From 91bf321d3fa043960740b0fdd33439ac79765e76 Mon Sep 17 00:00:00 2001 From: Eaven Kimura Date: Wed, 24 Sep 2025 14:01:20 +0000 Subject: [PATCH] Fix image tagging in CI/CD flow --- .gitea/workflows/docker-build.yml | 51 ++++++++++++++++--------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml index 2fc1160..6439ebc 100644 --- a/.gitea/workflows/docker-build.yml +++ b/.gitea/workflows/docker-build.yml @@ -38,38 +38,45 @@ jobs: username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - - name: Determine Docker tags + - name: Generate Docker tags id: tags run: | - # Default tag from workflow_dispatch input + # Base image name + IMAGE_NAME="${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}" + + # Determine primary tag if [ -n "${{ github.event.inputs.image_tag }}" ]; then PRIMARY_TAG="${{ github.event.inputs.image_tag }}" - # Tag for release (semantic version tag) elif [[ ${{ github.ref }} == refs/tags/v* ]]; then PRIMARY_TAG="${GITHUB_REF#refs/tags/}" - # Also create a major.minor tag (e.g., v1.2 for v1.2.3) - MAJOR_MINOR_TAG=$(echo "$PRIMARY_TAG" | sed -E 's/^v([0-9]+\.[0-9]+)\.[0-9]+.*$/v\1/') - if [[ "$MAJOR_MINOR_TAG" != "$PRIMARY_TAG" ]]; then - echo "major_minor_tag=$MAJOR_MINOR_TAG" >> $GITHUB_OUTPUT - fi - # Also create a major tag (e.g., v1 for v1.2.3) - MAJOR_TAG=$(echo "$PRIMARY_TAG" | sed -E 's/^v([0-9]+)\.[0-9]+\.[0-9]+.*$/v\1/') - if [[ "$MAJOR_TAG" != "$PRIMARY_TAG" ]]; then - echo "major_tag=$MAJOR_TAG" >> $GITHUB_OUTPUT - fi - # Tag for main branch elif [[ ${{ github.ref }} == refs/heads/main ]]; then PRIMARY_TAG="latest" - # Tag for experimental branch elif [[ ${{ github.ref }} == refs/heads/experimental ]]; then PRIMARY_TAG="experimental" + else + PRIMARY_TAG="latest" fi - echo "primary_tag=$PRIMARY_TAG" >> $GITHUB_OUTPUT - echo "Using primary tag: $PRIMARY_TAG" + # Start with primary tag and SHA tag + TAGS="$IMAGE_NAME:$PRIMARY_TAG,$IMAGE_NAME:${{ github.sha }}" - # Always include SHA tag for traceability - echo "sha_tag=${{ github.sha }}" >> $GITHUB_OUTPUT + # Add version tags for releases + if [[ ${{ github.ref }} == refs/tags/v* ]]; then + # Add major.minor tag (e.g., v1.2 for v1.2.3) + MAJOR_MINOR_TAG=$(echo "$PRIMARY_TAG" | sed -E 's/^v([0-9]+\.[0-9]+)\.[0-9]+.*$/v\1/') + if [[ "$MAJOR_MINOR_TAG" != "$PRIMARY_TAG" ]]; then + TAGS="$TAGS,$IMAGE_NAME:$MAJOR_MINOR_TAG" + fi + + # Add major tag (e.g., v1 for v1.2.3) + MAJOR_TAG=$(echo "$PRIMARY_TAG" | sed -E 's/^v([0-9]+)\.[0-9]+\.[0-9]+.*$/v\1/') + if [[ "$MAJOR_TAG" != "$PRIMARY_TAG" ]]; then + TAGS="$TAGS,$IMAGE_NAME:$MAJOR_TAG" + fi + fi + + echo "tags=$TAGS" >> $GITHUB_OUTPUT + echo "Generated tags: $TAGS" - name: Build and push multi-arch image uses: docker/build-push-action@v4 @@ -79,8 +86,4 @@ jobs: push: true cache-from: type=registry,ref=${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}:cache cache-to: type=registry,ref=${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}:cache,mode=max - tags: | - ${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}:${{ steps.tags.outputs.primary_tag }} - ${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}:${{ steps.tags.outputs.sha_tag }} - ${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}:${{ steps.tags.outputs.major_minor_tag }} - ${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}:${{ steps.tags.outputs.major_tag }} \ No newline at end of file + tags: ${{ steps.tags.outputs.tags }} \ No newline at end of file