name: docker on: push: tags: - "v*" workflow_dispatch: permissions: contents: read packages: write env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: build-and-push: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Lowercase repository owner for ghcr.io id: repo run: echo "name=$(echo '${{ github.repository }}' | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_OUTPUT" - name: Derive version from tag id: version run: | if [ "${GITHUB_REF_TYPE}" = "tag" ]; then echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT" else echo "version=0.0.0-dev" >> "$GITHUB_OUTPUT" fi echo "build_time=$(git show -s --format=%cI HEAD)" >> "$GITHUB_OUTPUT" - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GHCR uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push multi-arch image uses: docker/build-push-action@v6 with: context: . file: ./Dockerfile platforms: linux/amd64,linux/arm64 push: true build-args: | VERSION=${{ steps.version.outputs.version }} BUILD_TIME=${{ steps.version.outputs.build_time }} tags: | ${{ env.REGISTRY }}/${{ steps.repo.outputs.name }}:latest ${{ env.REGISTRY }}/${{ steps.repo.outputs.name }}:${{ steps.version.outputs.version }} cache-from: type=gha cache-to: type=gha,mode=max