name: (CD) Publish docker + s3 on: workflow_call: inputs: projects: required: true type: string jobs: publish-dist: strategy: fail-fast: false matrix: app: ${{ fromJSON(inputs.projects) }} name: ${{ matrix.app }} runs-on: ubuntu-22.04 steps: - name: Check out code uses: actions/checkout@v3 - name: Set up QEMU id: quemu uses: docker/setup-qemu-action@v2 - name: Available platforms run: echo ${{ steps.qemu.outputs.platforms }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Log in to the Container registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} # https://docs.github.com/en/actions/learn-github-actions/contexts - name: Define variables id: tags run: | if [[ "${{ github.event_name }}" = "push" ]]; then domain="vega.rocks" if [[ "${{ github.ref }}" =~ .*release/.* ]]; then envName="$(echo ${{ github.ref }} | rev | cut -d '/' -f 1 | rev)" if [[ "${{ github.ref }}" =~ .*mainnet.* ]]; then domain="vega.community" fi elif [[ "${{ github.ref }}" =~ .*develop$ ]]; then envName="stagnet3" fi bucketName="${{ matrix.app }}.${envName}.${domain}" echo ::set-output name=bucketName::${bucketName} echo ::set-output name=envName::${envName} fi nodeVersion=$(cat .nvmrc | head -n 1) echo ::set-output name=nodeVersion::${nodeVersion} - name: Build and export to local Docker id: docker_build uses: docker/build-push-action@v3 with: load: true build-args: | APP=${{ matrix.app }} NODE_VERSION=${{ steps.tags.outputs.nodeVersion }} ENV_NAME=${{ steps.tags.outputs.envName || '' }} tags: | ghcr.io/vegaprotocol/frontend/${{ matrix.app }}:local - name: Sanity check docker image run: | echo "Check ipfs-hash" docker run --rm ghcr.io/vegaprotocol/frontend/${{ matrix.app }}:local cat ipfs-hash echo "List html directory" docker run --rm ghcr.io/vegaprotocol/frontend/${{ matrix.app }}:local sh -c 'apk add --update tree; tree .' - name: Copy dist to local filesystem run: | docker create --name=dist ghcr.io/vegaprotocol/frontend/${{ matrix.app }}:local docker cp dist:/usr/share/nginx/html dist echo "check local dist files" tree dist - name: Publish dist as docker image uses: docker/build-push-action@v3 if: ${{ github.event_name == 'pull_request' }} with: push: true build-args: | APP=${{ matrix.app }} NODE_VERSION=${{ steps.tags.outputs.nodeVersion }} tags: | ghcr.io/vegaprotocol/frontend/${{ matrix.app }}:${{ github.event.pull_request.head.sha || github.sha }} # bucket creation in github.com/vegaprotocol/terraform//frontend - name: Publish dist to s3 uses: jakejarvis/s3-sync-action@master if: ${{ github.event_name == 'push' }} with: args: --acl private --follow-symlinks --delete env: AWS_S3_BUCKET: ${{ steps.tags.outputs.bucketName }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_REGION: 'eu-west-1' SOURCE_DIR: 'dist/${{ matrix.app }}' - name: Add preview label uses: actions-ecosystem/action-add-labels@v1 if: ${{ github.event_name == 'pull_request' }} with: labels: ${{ matrix.app }}-preview number: ${{ github.event.number }} - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }}