Deploy #202
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy | |
| env: | |
| registry: "ghcr.io" | |
| SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} | |
| SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }} | |
| on: | |
| workflow_run: | |
| workflows: ["Version Bump"] | |
| types: | |
| - completed | |
| workflow_dispatch: | |
| concurrency: | |
| group: deploy-${{ github.ref }} | |
| cancel-in-progress: false | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: write | |
| jobs: | |
| verify-version-job: | |
| if: ${{ github.event.repository.fork == false && (github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success') }} | |
| runs-on: ubuntu-latest | |
| outputs: | |
| should_deploy: ${{ steps.check-version.outputs.should_deploy }} | |
| steps: | |
| - name: verify version job succeeded | |
| id: check-version | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| if (context.eventName === "workflow_dispatch") { | |
| core.setOutput("should_deploy", "true"); | |
| return; | |
| } | |
| const runId = context.payload.workflow_run?.id; | |
| if (!runId) { | |
| core.info("No upstream workflow run id found. Skipping deploy."); | |
| core.setOutput("should_deploy", "false"); | |
| return; | |
| } | |
| const jobs = await github.paginate(github.rest.actions.listJobsForWorkflowRun, { | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| run_id: runId, | |
| per_page: 100, | |
| }); | |
| const versionJob = jobs.find((job) => job.name === "version"); | |
| const shouldDeploy = Boolean(versionJob && versionJob.conclusion === "success"); | |
| if (!shouldDeploy) { | |
| core.info("Version Bump 'version' job did not succeed; skipping deploy."); | |
| } | |
| core.setOutput("should_deploy", shouldDeploy ? "true" : "false"); | |
| docker: | |
| needs: verify-version-job | |
| if: ${{ needs.verify-version-job.outputs.should_deploy == 'true' }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: checkout repository | |
| uses: actions/checkout@v6 | |
| - name: send slack start message | |
| id: slack-start | |
| uses: ./.github/actions/slack-run-start | |
| with: | |
| message_prefix: Deployment running | |
| - name: setup node | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| - name: install dependencies | |
| run: npm ci | |
| - name: set build timestamp | |
| id: build-time | |
| run: echo "value=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> "$GITHUB_OUTPUT" | |
| - name: get backend version | |
| id: backend-version | |
| uses: martinbeentjes/npm-get-version-action@v1.1.0 | |
| with: | |
| path: ./ | |
| - name: print backend version | |
| run: echo "building server image with version ${{ steps.backend-version.outputs.current-version }}" | |
| - name: set up qemu | |
| uses: docker/setup-qemu-action@v3 | |
| - name: set up docker buildx | |
| id: buildx | |
| uses: docker/setup-buildx-action@v3 | |
| with: | |
| buildkitd-flags: --debug | |
| - name: login to ghcr | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.registry }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| logout: false | |
| - name: build and push server image | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: "." | |
| file: ./src/server/Dockerfile | |
| platforms: linux/amd64 | |
| push: true | |
| tags: | | |
| ${{ env.registry }}/${{ github.repository_owner }}/bug:${{ steps.backend-version.outputs.current-version }} | |
| ${{ env.registry }}/${{ github.repository_owner }}/bug:latest | |
| labels: | | |
| author=${{ github.actor }} | |
| version=${{ steps.backend-version.outputs.current-version }} | |
| org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} | |
| uk.co.bbc.bug.build.timestamp=${{ steps.build-time.outputs.value }} | |
| uk.co.bbc.bug.build.number=${{ github.run_number }} | |
| uk.co.bbc.bug.build.commit=${{ github.sha }} | |
| - name: update slack message | |
| if: ${{ always() && steps.slack-start.outputs.ts != '' && steps.slack-start.outputs.channel_id != '' }} | |
| uses: ./.github/actions/slack-run-finish | |
| with: | |
| channel_id: ${{ steps.slack-start.outputs.channel_id }} | |
| ts: ${{ steps.slack-start.outputs.ts }} | |
| status: ${{ job.status }} | |
| message_prefix: Deployment |