| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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' }}
- - 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 }}
- build-args: |
- APP_VERSION=${{ steps.version.outputs.value }}
- # 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 }}
- cache-from: type=gha
- cache-to: type=gha,mode=max
|