| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- name: Build and Publish Docker 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=semver,pattern=v{{version}}
- - 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 }}
- cache-from: type=gha
- cache-to: type=gha,mode=max
|