diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index 0e62be3d9..d164f9bc7 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -26,8 +26,6 @@ jobs: - linux/arm64 steps: - # GitHub Packages requires the entire repository name to be in lowercase - # although the repository owner has a lowercase username, this prevents some people from running actions after forking - name: Set repository and image name to lowercase run: | echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} @@ -56,19 +54,27 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Extract metadata for Docker images (default latest tag) + - name: Get version number from package.json + id: get_version + run: | + VERSION=$(jq -r '.version' package.json) + echo "version=$VERSION" >> $GITHUB_OUTPUT + + - name: Extract metadata for Docker images id: meta uses: docker/metadata-action@v5 with: images: ${{ env.FULL_IMAGE_NAME }} + # While 'raw' should work below, I'm worried about collisions and wonder if there isn't a better way to handle this + # https://github.com/docker/metadata-action?tab=readme-ov-file#typeraw tags: | + type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} + type=raw,value=${{ steps.get_version.outputs.version }} type=ref,event=branch type=ref,event=tag type=sha,prefix=git- type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} - flavor: | - latest=${{ github.ref == 'refs/heads/main' }} - name: Extract metadata for Docker cache id: cache-meta @@ -82,7 +88,7 @@ jobs: prefix=cache-${{ matrix.platform }}- latest=false - - name: Build Docker image (latest) + - name: Build Docker image uses: docker/build-push-action@v5 id: build with: @@ -90,6 +96,7 @@ jobs: push: true platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} + tags: ${{ steps.meta.outputs.tags }} outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }} cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max