From b5e2ff347d831adbe6145a6b8e1f2b78ca4b3d33 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Sun, 7 Dec 2025 17:17:50 +0000 Subject: [PATCH] ci: add Buildkit workflow for multi-image builds --- .gitea/workflows/build-images.yml | 85 +++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 .gitea/workflows/build-images.yml diff --git a/.gitea/workflows/build-images.yml b/.gitea/workflows/build-images.yml new file mode 100644 index 0000000..e82a80c --- /dev/null +++ b/.gitea/workflows/build-images.yml @@ -0,0 +1,85 @@ +name: Build and Push Docker Images + +on: + push: + branches: [main] + paths: + - 'images/**' + workflow_dispatch: + inputs: + image: + description: 'Image to build (e.g., terraform-ci)' + required: false + +env: + REGISTRY: gitea.arnodo.fr + +jobs: + detect-changes: + runs-on: docker + container: + image: alpine/git:latest + outputs: + matrix: ${{ steps.changes.outputs.matrix }} + has_changes: ${{ steps.changes.outputs.has_changes }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 2 + + - name: Detect changed images + id: changes + run: | + if [ -n "${{ github.event.inputs.image }}" ]; then + # Manual trigger - build specific image + echo "matrix=[\"${{ github.event.inputs.image }}\"]" >> $GITHUB_OUTPUT + echo "has_changes=true" >> $GITHUB_OUTPUT + else + # Auto-detect changed images + CHANGED=$(git diff --name-only HEAD~1 HEAD -- images/ | cut -d'/' -f2 | sort -u | grep -v '^$' || true) + if [ -z "$CHANGED" ]; then + echo "has_changes=false" >> $GITHUB_OUTPUT + echo "matrix=[]" >> $GITHUB_OUTPUT + else + # Convert to JSON array + JSON=$(echo "$CHANGED" | jq -R -s -c 'split("\n") | map(select(length > 0))') + echo "matrix=$JSON" >> $GITHUB_OUTPUT + echo "has_changes=true" >> $GITHUB_OUTPUT + fi + fi + + build: + needs: detect-changes + if: needs.detect-changes.outputs.has_changes == 'true' + runs-on: docker + strategy: + matrix: + image: ${{ fromJson(needs.detect-changes.outputs.matrix) }} + steps: + - uses: actions/checkout@v3 + + - name: Set up Docker Buildx + run: | + docker buildx create --use --name gitea-builder || docker buildx use gitea-builder + + - name: Login to Gitea Registry + run: | + echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ${{ env.REGISTRY }} -u ${{ gitea.actor }} --password-stdin + + - name: Build and push + run: | + IMAGE_NAME="${{ env.REGISTRY }}/damien/${{ matrix.image }}" + + docker buildx build \ + --platform linux/amd64 \ + --tag "${IMAGE_NAME}:latest" \ + --tag "${IMAGE_NAME}:${{ gitea.sha }}" \ + --push \ + ./images/${{ matrix.image }} + + - name: Summary + run: | + echo "### ✅ Image built and pushed" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "- **Image**: ${{ env.REGISTRY }}/damien/${{ matrix.image }}" >> $GITHUB_STEP_SUMMARY + echo "- **Tags**: latest, ${{ gitea.sha }}" >> $GITHUB_STEP_SUMMARY