| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- name: "[Build] Release Image"
- on:
- push:
- # branches: [main]
- tags: ["v*"]
- workflow_dispatch:
- inputs:
- version:
- description: "Version to set (e.g. v1.2.3). Leave empty to auto-detect."
- required: false
- default: ""
- env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
- jobs:
- build-and-push:
- runs-on: ubuntu-latest
- permissions:
- contents: read
- packages: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
- - name: Log in to GitHub Container Registry
- uses: docker/login-action@v3
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- - name: Determine version
- id: version
- run: |
- if [[ -n "${{ github.event.inputs.version }}" ]]; then
- echo "value=${{ github.event.inputs.version }}" >> "$GITHUB_OUTPUT"
- elif [[ "${{ github.ref_type }}" == "tag" ]]; then
- echo "value=${{ github.ref_name }}" >> "$GITHUB_OUTPUT"
- else
- TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "development")
- echo "value=${TAG}" >> "$GITHUB_OUTPUT"
- fi
- - name: Extract metadata (tags, labels)
- id: meta
- uses: docker/metadata-action@v5
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- tags: |
- type=raw,value=latest
- type=raw,value=${{ steps.version.outputs.value }},enable=${{ steps.version.outputs.value != 'development' }}
- # A short hash of the server action key, so a new key rebuilds Next
- # instead of reusing a cached build (see the Dockerfile).
- - name: Fingerprint the server action key
- id: actions_key
- env:
- KEY: ${{ secrets.NEXT_SERVER_ACTIONS_BUILD_KEY }}
- run: echo "id=$(printf '%s' "$KEY" | sha256sum | cut -c1-12)" >> "$GITHUB_OUTPUT"
- - name: Build and push Docker image
- uses: docker/build-push-action@v6
- with:
- context: .
- push: true
- tags: ${{ steps.meta.outputs.tags }}
- labels: ${{ steps.meta.outputs.labels }}
- # The POSTHOG_ lines upload the browser source maps to PostHog error
- # tracking for app.torqvoice.com when the key is set, and skip it
- # otherwise (see scripts/upload-source-maps.sh).
- build-args: |
- APP_VERSION=${{ steps.version.outputs.value }}
- NEXT_ACTIONS_FINGERPRINT=${{ steps.actions_key.outputs.id }}
- POSTHOG_SOURCEMAPS=${{ secrets.POSTHOG_SOURCEMAPS_API_KEY != '' && 'on' || 'off' }}
- POSTHOG_CLI_HOST=https://eu.posthog.com
- POSTHOG_CLI_PROJECT_ID=142584
- POSTHOG_UPLOAD_ATTEMPT=${{ github.run_id }}-${{ github.run_attempt }}
- # Keeps server action IDs the same from release to release, so tabs
- # opened before a deploy keep working (see the Dockerfile).
- secrets: |
- next_actions_key=${{ secrets.NEXT_SERVER_ACTIONS_BUILD_KEY }}
- posthog_cli_api_key=${{ secrets.POSTHOG_SOURCEMAPS_API_KEY }}
- cache-from: type=gha
- cache-to: type=gha,mode=max
|