From 96c4cec25ad408b3a0c93d88b2d1bc29e778f5a6 Mon Sep 17 00:00:00 2001 From: estebanthi Date: Sun, 19 Oct 2025 18:27:36 +0200 Subject: [PATCH] Docker build wf --- .gitea/workflows/docker-build-push.yml | 14 +-- .../.gitea/workflows/docker-build-push.yml | 9 +- templates/docker-build-push.yml | 90 +++++++++++++++++++ 3 files changed, 99 insertions(+), 14 deletions(-) create mode 100644 templates/docker-build-push.yml diff --git a/.gitea/workflows/docker-build-push.yml b/.gitea/workflows/docker-build-push.yml index 80082db..3aa801f 100644 --- a/.gitea/workflows/docker-build-push.yml +++ b/.gitea/workflows/docker-build-push.yml @@ -13,17 +13,16 @@ on: - 'main' tags: - 'v*' - pull_request: - branches: - - 'main' env: - REGISTRY_HOST: '{{ secrets.REGISTRY_HOST }}' - REGISTRY_USERNAME: '{{ secrets.REGISTRY_USERNAME }}' - REGISTRY_PASSWORD: '{{ secrets.REGISTRY_PASSWORD }}' + REGISTRY_HOST: {{ secrets.REGISTRY_HOST }} + REGISTRY_USERNAME: {{ secrets.REGISTRY_USERNAME }} + REGISTRY_PASSWORD: {{ secrets.REGISTRY_PASSWORD }} IMAGE_NAME: "wavyzz/sample-image" CONTEXT_PATH: "." DOCKERFILE_PATH: "./Dockerfile" + PLATFORMS: "linux/amd64,linux/arm64" + CACHE_REF: ${{ env.REGISTRY_HOST }}/${{ env.IMAGE_NAME }}:buildcache jobs: build-and-push: @@ -76,8 +75,11 @@ jobs: context: ${{ env.CONTEXT_PATH }} file: ${{ env.DOCKERFILE_PATH }} push: true + platforms: ${{ env.PLATFORMS }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + cache-from: type=registry,ref=${{ env.CACHE_REF }} + cache-to: type=registry,ref=${{ env.CACHE_REF }},mode=max - name: Image details run: | diff --git a/examples/docker-build-push/.gitea/workflows/docker-build-push.yml b/examples/docker-build-push/.gitea/workflows/docker-build-push.yml index 80082db..615bd40 100644 --- a/examples/docker-build-push/.gitea/workflows/docker-build-push.yml +++ b/examples/docker-build-push/.gitea/workflows/docker-build-push.yml @@ -8,14 +8,7 @@ name: Build external repo image on: - push: - branches: - - 'main' - tags: - - 'v*' - pull_request: - branches: - - 'main' + env: REGISTRY_HOST: '{{ secrets.REGISTRY_HOST }}' diff --git a/templates/docker-build-push.yml b/templates/docker-build-push.yml new file mode 100644 index 0000000..ab81e19 --- /dev/null +++ b/templates/docker-build-push.yml @@ -0,0 +1,90 @@ +# === Workflow Doc ========================================================= +# Name: Docker build +# Purpose: Build & push a Docker image +# Requires: +# - +# ========================================================================== + +name: Build external repo image + +on: + push: + branches: + - 'main' + tags: + - 'v*' + pull_request: + branches: + - 'main' + +env: + REGISTRY_HOST: {{ secrets.REGISTRY_HOST }} + REGISTRY_USERNAME: {{ secrets.REGISTRY_USERNAME }} + REGISTRY_PASSWORD: {{ secrets.REGISTRY_PASSWORD }} + IMAGE_NAME: "wavyzz/sample-image" + CONTEXT_PATH: "." + DOCKERFILE_PATH: "./Dockerfile" + +jobs: + build-and-push: + name: Build and Push Docker Image + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Define branch helpers + id: branch + run: | + DEFAULT="${{ gitea.event.repository.default_branch }}" + CURRENT="${{ gitea.ref_name }}" + if [ "$DEFAULT" = "$CURRENT" ]; then + echo "is_default_branch=true" >> $GITEA_OUTPUT + else + echo "is_default_branch=false" >> $GITEA_OUTPUT + fi + + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_HOST }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha + type=raw,value=latest,enable=${{ steps.branch.outputs.is_default_branch }} + labels: | + org.opencontainers.image.source=${{ gitea.event.repository.html_url }} + org.opencontainers.image.url=${{ gitea.event.repository.html_url }} + org.opencontainers.image.version=${{ gitea.event.repository.default_branch }} + + - name: Set up QEMU # for multi-platform builds + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx # for advanced builds + uses: docker/setup-buildx-action@v3 + + - name: Log in to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY_HOST }} + username: ${{ env.REGISTRY_USERNAME }} + password: ${{ env.REGISTRY_PASSWORD }} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: ${{ env.CONTEXT_PATH }} + file: ${{ env.DOCKERFILE_PATH }} + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Image details + run: | + echo "Image pushed: ${{ env.REGISTRY_HOST }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.tags }}" + echo "Labels: ${{ steps.meta.outputs.labels }}" + echo "Tags: ${{ steps.meta.outputs.tags }}" + echo "Digest: ${{ steps.meta.outputs.digest }}"