From 01d5e1e33064fb93a6196c33c2a5e453a344f61f Mon Sep 17 00:00:00 2001 From: WorkClub Automation Date: Sun, 8 Mar 2026 14:35:43 +0100 Subject: [PATCH] fix(cd): change workflow to manual trigger with inputs --- .gitea/workflows/cd-bootstrap.yml | 220 ++++++++++++++---------------- 1 file changed, 101 insertions(+), 119 deletions(-) diff --git a/.gitea/workflows/cd-bootstrap.yml b/.gitea/workflows/cd-bootstrap.yml index ba32a82..9e3aaa5 100644 --- a/.gitea/workflows/cd-bootstrap.yml +++ b/.gitea/workflows/cd-bootstrap.yml @@ -1,11 +1,23 @@ name: CD Bootstrap - Release Image Publish on: - workflow_run: - workflows: ["CI Pipeline"] - types: [completed] - branches: [main] - workflow_dispatch: # Manual trigger for testing + workflow_dispatch: + inputs: + image_tag: + description: 'Image tag (e.g., v1.0.0, latest, dev)' + required: true + default: 'latest' + type: string + build_backend: + description: 'Build backend image' + required: false + default: true + type: boolean + build_frontend: + description: 'Build frontend image' + required: false + default: true + type: boolean env: REGISTRY_HOST: 192.168.241.13:8080 @@ -13,59 +25,58 @@ env: FRONTEND_IMAGE: workclub-frontend jobs: - gate: - name: CI Success & Release Tag Gate + prepare: + name: Prepare Build Metadata runs-on: ubuntu-latest outputs: - is_release_tag: ${{ steps.validate.outputs.is_release_tag }} - image_tag: ${{ steps.validate.outputs.image_tag }} - image_sha: ${{ steps.validate.outputs.image_sha }} + image_tag: ${{ steps.metadata.outputs.image_tag }} + image_sha: ${{ steps.metadata.outputs.image_sha }} + build_backend: ${{ steps.metadata.outputs.build_backend }} + build_frontend: ${{ steps.metadata.outputs.build_frontend }} steps: - - name: Check CI workflow conclusion - if: ${{ github.event.workflow_run.conclusion != 'success' }} + - name: Generate build metadata + id: metadata run: | - echo "CI Pipeline did not succeed (conclusion: ${{ github.event.workflow_run.conclusion }})" - exit 1 - - - name: Validate release tag and extract version - id: validate - run: | - # Extract ref from workflow_run event or direct trigger - REF="${{ github.event.workflow_run.head_branch }}" - if [[ -z "$REF" ]]; then - REF="${{ github.ref }}" + IMAGE_TAG="${{ github.event.inputs.image_tag }}" + if [[ -z "$IMAGE_TAG" ]]; then + IMAGE_TAG="latest" fi - echo "Detected ref: $REF" + IMAGE_SHA="${{ github.sha }}" + IMAGE_SHA_SHORT="${IMAGE_SHA:0:7}" - # Check if ref matches release tag pattern (refs/tags/v*) - if [[ "$REF" =~ ^refs/tags/v[0-9]+\.[0-9]+\.[0-9]+ ]] || [[ "$REF" =~ ^v[0-9]+\.[0-9]+\.[0-9]+ ]]; then - # Extract version tag (vX.Y.Z) - IMAGE_TAG=$(echo "$REF" | sed 's|refs/tags/||') - - # Extract short commit SHA (first 7 chars) - IMAGE_SHA="${{ github.event.workflow_run.head_sha }}" - if [[ -z "$IMAGE_SHA" ]]; then - IMAGE_SHA="${{ github.sha }}" - fi - IMAGE_SHA_SHORT="${IMAGE_SHA:0:7}" - - echo "is_release_tag=true" >> $GITHUB_OUTPUT - echo "image_tag=$IMAGE_TAG" >> $GITHUB_OUTPUT - echo "image_sha=$IMAGE_SHA_SHORT" >> $GITHUB_OUTPUT - - echo "✅ Release tag detected: $IMAGE_TAG (SHA: $IMAGE_SHA_SHORT)" + BUILD_BACKEND="${{ github.event.inputs.build_backend }}" + BUILD_FRONTEND="${{ github.event.inputs.build_frontend }}" + + if [[ -z "$BUILD_BACKEND" || "$BUILD_BACKEND" == "false" ]]; then + BUILD_BACKEND="false" else - echo "is_release_tag=false" >> $GITHUB_OUTPUT - echo "⏭️ Not a release tag, skipping image publish" + BUILD_BACKEND="true" fi + + if [[ -z "$BUILD_FRONTEND" || "$BUILD_FRONTEND" == "false" ]]; then + BUILD_FRONTEND="false" + else + BUILD_FRONTEND="true" + fi + + echo "image_tag=$IMAGE_TAG" >> $GITHUB_OUTPUT + echo "image_sha=$IMAGE_SHA_SHORT" >> $GITHUB_OUTPUT + echo "build_backend=$BUILD_BACKEND" >> $GITHUB_OUTPUT + echo "build_frontend=$BUILD_FRONTEND" >> $GITHUB_OUTPUT + + echo "✅ Build configuration:" + echo " Image Tag: $IMAGE_TAG" + echo " Commit SHA: $IMAGE_SHA_SHORT" + echo " Build Backend: $BUILD_BACKEND" + echo " Build Frontend: $BUILD_FRONTEND" backend-image: name: Build & Push Backend Image runs-on: ubuntu-latest - needs: [gate] - if: needs.gate.outputs.is_release_tag == 'true' + needs: [prepare] + if: needs.prepare.outputs.build_backend == 'true' steps: - name: Checkout repository @@ -81,36 +92,36 @@ jobs: working-directory: ./backend run: | docker build \ - -t ${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:${{ needs.gate.outputs.image_tag }} \ + -t ${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:${{ needs.prepare.outputs.image_tag }} \ -f Dockerfile \ . - name: Tag with commit SHA run: | docker tag \ - ${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:${{ needs.gate.outputs.image_tag }} \ - ${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:sha-${{ needs.gate.outputs.image_sha }} + ${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:${{ needs.prepare.outputs.image_tag }} \ + ${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:sha-${{ needs.prepare.outputs.image_sha }} - name: Push images to registry run: | - docker push ${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:${{ needs.gate.outputs.image_tag }} - docker push ${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:sha-${{ needs.gate.outputs.image_sha }} + docker push ${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:${{ needs.prepare.outputs.image_tag }} + docker push ${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:sha-${{ needs.prepare.outputs.image_sha }} - name: Capture push evidence run: | mkdir -p .sisyphus/evidence cat > .sisyphus/evidence/task-31-backend-push.json < .sisyphus/evidence/task-32-frontend-push.json < .sisyphus/evidence/task-30-ci-gate.json < .sisyphus/evidence/task-30-non-tag-skip.json < .sisyphus/evidence/task-33-cd-bootstrap-release.json <> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - echo "**Release Tag:** ${{ needs.gate.outputs.image_tag }}" >> $GITHUB_STEP_SUMMARY - echo "**Commit SHA:** ${{ needs.gate.outputs.image_sha }}" >> $GITHUB_STEP_SUMMARY + echo "**Release Tag:** ${{ needs.prepare.outputs.image_tag }}" >> $GITHUB_STEP_SUMMARY + echo "**Commit SHA:** ${{ needs.prepare.outputs.image_sha }}" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### Published Images" >> $GITHUB_STEP_SUMMARY - echo "- **Backend:** \`${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:${{ needs.gate.outputs.image_tag }}\`" >> $GITHUB_STEP_SUMMARY - echo "- **Backend SHA:** \`${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:sha-${{ needs.gate.outputs.image_sha }}\`" >> $GITHUB_STEP_SUMMARY - echo "- **Frontend:** \`${{ env.REGISTRY_HOST }}/${{ env.FRONTEND_IMAGE }}:${{ needs.gate.outputs.image_tag }}\`" >> $GITHUB_STEP_SUMMARY - echo "- **Frontend SHA:** \`${{ env.REGISTRY_HOST }}/${{ env.FRONTEND_IMAGE }}:sha-${{ needs.gate.outputs.image_sha }}\`" >> $GITHUB_STEP_SUMMARY + echo "- **Backend:** \`${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:${{ needs.prepare.outputs.image_tag }}\`" >> $GITHUB_STEP_SUMMARY + echo "- **Backend SHA:** \`${{ env.REGISTRY_HOST }}/${{ env.BACKEND_IMAGE }}:sha-${{ needs.prepare.outputs.image_sha }}\`" >> $GITHUB_STEP_SUMMARY + echo "- **Frontend:** \`${{ env.REGISTRY_HOST }}/${{ env.FRONTEND_IMAGE }}:${{ needs.prepare.outputs.image_tag }}\`" >> $GITHUB_STEP_SUMMARY + echo "- **Frontend SHA:** \`${{ env.REGISTRY_HOST }}/${{ env.FRONTEND_IMAGE }}:sha-${{ needs.prepare.outputs.image_sha }}\`" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### Job Results" >> $GITHUB_STEP_SUMMARY echo "- Backend Image: ${{ needs.backend-image.result }}" >> $GITHUB_STEP_SUMMARY