From 9a66c944e21166a4095a92dd6a6037a6c89b2ef1 Mon Sep 17 00:00:00 2001 From: yangdx Date: Sat, 23 Aug 2025 23:50:06 +0800 Subject: [PATCH] Add Docker build workflow for main branch with manual trigger - Manual workflow dispatch trigger - Multi-platform build support - GHCR registry integration - Git tag-based versioning - GitHub Actions cache optimization --- .github/workflows/docker-build-main.yml | 69 +++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 .github/workflows/docker-build-main.yml diff --git a/.github/workflows/docker-build-main.yml b/.github/workflows/docker-build-main.yml new file mode 100644 index 00000000..7b7bcf76 --- /dev/null +++ b/.github/workflows/docker-build-main.yml @@ -0,0 +1,69 @@ +name: Build Docker Image from Main + +on: + workflow_dispatch: + +permissions: + contents: read + packages: write + +jobs: + build-and-push: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch all history for tags + + - name: Get latest tag + id: get_tag + run: | + # Get the latest tag, fallback to commit SHA if no tags exist + LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") + if [ -z "$LATEST_TAG" ]; then + LATEST_TAG="sha-$(git rev-parse --short HEAD)" + echo "No tags found, using commit SHA: $LATEST_TAG" + else + echo "Latest tag found: $LATEST_TAG" + fi + echo "tag=$LATEST_TAG" >> $GITHUB_OUTPUT + echo "image_tag=$LATEST_TAG" >> $GITHUB_OUTPUT + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository }} + tags: | + type=raw,value=${{ steps.get_tag.outputs.tag }} + type=raw,value=latest + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Output image details + run: | + echo "Docker image built and pushed successfully!" + echo "Image tags:" + echo " - ghcr.io/${{ github.repository }}:${{ steps.get_tag.outputs.tag }}" + echo " - ghcr.io/${{ github.repository }}:latest" + echo "Latest Git tag used: ${{ steps.get_tag.outputs.tag }}"