From e9ebf31c88ab0ae262d109e4b654d8ae9581aa93 Mon Sep 17 00:00:00 2001 From: GSRN Date: Wed, 17 Sep 2025 23:17:34 +0200 Subject: [PATCH] chore: Refactor CI workflow for Docker builds to include shared setup job ### Summary of Changes - Introduced a shared setup job in the CI workflow to streamline common steps for building and pushing Docker images. - Updated individual build jobs for API Gateway, Service Adapters, API Docs, and Frontend to depend on the setup job, ensuring consistent versioning and labeling. ### Expected Results - Enhanced maintainability and clarity of the CI workflow by reducing redundancy and centralizing setup steps, leading to more efficient Docker image builds. --- .gitea/workflows/docker-build.yml | 110 ++++++++++++++++++++++++------ 1 file changed, 90 insertions(+), 20 deletions(-) diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml index 4bf5802..4b13f10 100644 --- a/.gitea/workflows/docker-build.yml +++ b/.gitea/workflows/docker-build.yml @@ -14,23 +14,17 @@ env: IMAGE_PREFIX: labfusion jobs: - build-and-push: + # Shared setup job for common steps + setup: runs-on: ubuntu-latest + outputs: + version: ${{ steps.meta.outputs.version }} + labels: ${{ steps.meta.outputs.labels }} steps: - name: Checkout code uses: actions/checkout@v4 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Container Registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY_URL }} - username: ${{ secrets.REGISTRY_USERNAME }} - password: ${{ secrets.REGISTRY_PASSWORD }} - - name: Extract metadata id: meta uses: docker/metadata-action@v5 @@ -48,17 +42,55 @@ jobs: type=semver,pattern={{major}} type=sha,prefix={{branch}}- type=raw,value=latest,enable={{is_default_branch}} - + + # API Gateway build and push + build-push-api-gateway: + runs-on: ubuntu-latest + needs: setup + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY_URL }} + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_PASSWORD }} + - name: Build and push API Gateway uses: docker/build-push-action@v5 with: context: ./services/api-gateway platforms: linux/amd64,linux/arm64 push: true - tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-gateway:${{ steps.meta.outputs.version }} - labels: ${{ steps.meta.outputs.labels }} + tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-gateway:${{ needs.setup.outputs.version }} + labels: ${{ needs.setup.outputs.labels }} cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-gateway:cache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-gateway:cache,mode=max + + # Service Adapters build and push + build-push-service-adapters: + runs-on: ubuntu-latest + needs: setup + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY_URL }} + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_PASSWORD }} - name: Build and push Service Adapters uses: docker/build-push-action@v5 @@ -66,10 +98,29 @@ jobs: context: ./services/service-adapters platforms: linux/amd64,linux/arm64 push: true - tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/service-adapters:${{ steps.meta.outputs.version }} - labels: ${{ steps.meta.outputs.labels }} + tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/service-adapters:${{ needs.setup.outputs.version }} + labels: ${{ needs.setup.outputs.labels }} cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/service-adapters:cache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/service-adapters:cache,mode=max + + # API Docs build and push + build-push-api-docs: + runs-on: ubuntu-latest + needs: setup + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY_URL }} + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_PASSWORD }} - name: Build and push API Docs uses: docker/build-push-action@v5 @@ -77,10 +128,29 @@ jobs: context: ./services/api-docs platforms: linux/amd64,linux/arm64 push: true - tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-docs:${{ steps.meta.outputs.version }} - labels: ${{ steps.meta.outputs.labels }} + tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-docs:${{ needs.setup.outputs.version }} + labels: ${{ needs.setup.outputs.labels }} cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-docs:cache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/api-docs:cache,mode=max + + # Frontend build and push + build-push-frontend: + runs-on: ubuntu-latest + needs: setup + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY_URL }} + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_PASSWORD }} - name: Build and push Frontend uses: docker/build-push-action@v5 @@ -88,7 +158,7 @@ jobs: context: ./frontend platforms: linux/amd64,linux/arm64 push: true - tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/frontend:${{ steps.meta.outputs.version }} - labels: ${{ steps.meta.outputs.labels }} + tags: ${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/frontend:${{ needs.setup.outputs.version }} + labels: ${{ needs.setup.outputs.labels }} cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/frontend:cache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/frontend:cache,mode=max