From 7dbce6e4b0d51bc8924df632e513cdefaf16fb4a Mon Sep 17 00:00:00 2001 From: RandithaK Date: Wed, 12 Nov 2025 19:16:29 +0530 Subject: [PATCH 1/4] fix: Update reverse proxy to preserve custom headers and adjust strip_prefix for AI service --- cmd/gateway/main.go | 15 +++++++++++++++ config.yaml | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/cmd/gateway/main.go b/cmd/gateway/main.go index 3b7a324..11d369b 100644 --- a/cmd/gateway/main.go +++ b/cmd/gateway/main.go @@ -98,8 +98,21 @@ func newProxy(targetURL, stripPrefix string) (*httputil.ReverseProxy, error) { proxy := httputil.NewSingleHostReverseProxy(target) originalDirector := proxy.Director proxy.Director = func(req *http.Request) { + // Store the custom headers before calling originalDirector + userSubject := req.Header.Get("X-User-Subject") + userRoles := req.Header.Get("X-User-Roles") + originalDirector(req) req.Host = target.Host + + // Re-apply custom headers after originalDirector (which may create a new header map) + if userSubject != "" { + req.Header.Set("X-User-Subject", userSubject) + } + if userRoles != "" { + req.Header.Set("X-User-Roles", userRoles) + } + if stripPrefix != "" { req.URL.Path = strings.TrimPrefix(req.URL.Path, stripPrefix) } @@ -182,6 +195,8 @@ func injectUserInfo(next http.Handler) http.Handler { } logger.Info("Injecting user info into headers", "subject", r.Header.Get("X-User-Subject"), "roles", r.Header.Get("X-User-Roles")) } + // NOTE: The Authorization header is already present in r.Header and will be + // automatically forwarded by the reverse proxy to downstream services next.ServeHTTP(w, r) }) } diff --git a/config.yaml b/config.yaml index f183b0d..dc2027c 100644 --- a/config.yaml +++ b/config.yaml @@ -116,6 +116,6 @@ services: - name: "ai" path_prefix: "/api/v1/ai/" target_url: "http://localhost:8091" # Agent Bot service (Python FastAPI) - strip_prefix: "" # Don't strip - Agent Bot expects the full path + strip_prefix: "/api/v1/ai" # Strip to match Agent Bot's internal routing auth_required: true env_var: "AGENT_BOT_SERVICE_URL" \ No newline at end of file From 2d56011514b8d18b3bfa05fe4d4c51dec9ed383e Mon Sep 17 00:00:00 2001 From: RandithaK Date: Sat, 15 Nov 2025 03:27:38 +0530 Subject: [PATCH 2/4] chore: migrate to GitOps workflow with ArgoCD - Update build.yaml with branch-aware image tagging (branch-sha format) - Add update-manifest.yaml to update k8s-config manifests - Backup old deploy.yaml (no longer needed with GitOps) Refs: - k8s-config/argocd/GITOPS_CI_CD_WORKFLOW.md - k8s-config/argocd/SERVICE_MIGRATION_GUIDE.md --- .github/workflows/build.yaml | 138 +++++++++++++++---------- .github/workflows/deploy.yaml.old | 63 +++++++++++ .github/workflows/update-manifest.yaml | 88 ++++++++++++++++ 3 files changed, 234 insertions(+), 55 deletions(-) create mode 100644 .github/workflows/deploy.yaml.old create mode 100644 .github/workflows/update-manifest.yaml diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 834691a..d9fb4e6 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,95 +1,110 @@ -# API_Gateway/.github/workflows/build.yml -# This workflow builds, tests, AND packages the Go API Gateway +# Updated build.yaml template for microservices +# This replaces the old build.yaml to add branch-aware image tagging -name: Build, Test, and Package Gateway +name: Build and Package Service on: push: branches: - 'main' - - 'devOps' - 'dev' pull_request: branches: - 'main' - - 'devOps' - 'dev' permissions: contents: read - packages: write + packages: write jobs: - # --- JOB 1: Build and Test (From your file) --- - # This runs on all pushes AND all pull requests to verify the code - build-and-test: - name: Build and Smoke Test + # JOB 1: Build and test (runs on all pushes and PRs) + build-test: + name: Build and Test runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - - name: Set up Go - uses: actions/setup-go@v5 + # For Java/Spring Boot services: + - name: Set up JDK 17 + uses: actions/setup-java@v4 with: - go-version: '1.22' - cache-dependency-path: go.mod + java-version: '17' + distribution: 'temurin' + cache: maven - - name: Download dependencies - run: go mod download + - name: Cache Maven packages + uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- - - name: Build Go Application - run: go build -v -o ./app ./cmd/gateway + - name: Build with Maven + run: mvn -B clean package -DskipTests --file gateway/pom.xml - - name: Verify config.yaml exists - run: | - if [ ! -f config.yaml ]; then - echo "Error: config.yaml not found!" - exit 1 - fi - echo "✓ config.yaml found" + - name: Upload Build Artifact + uses: actions/upload-artifact@v4 + with: + name: service-jar + path: gateway/target/*.jar - - name: Start Gateway (smoke test) - run: | - echo "Starting API Gateway with config.yaml..." - # We need to set a dummy secret for the smoke test - export JWT_SECRET="dummy-secret-for-test" - timeout 5s ./app || code=$? - if [ ${code:-0} -eq 124 ]; then - echo "✓ Gateway started successfully (terminated after 5s)" - exit 0 - elif [ ${code:-0} -eq 0 ]; then - echo "✓ Gateway started and stopped cleanly" - exit 0 - else - echo "✗ Gateway failed to start (exit code: ${code})" - exit 1 - fi - - # --- JOB 2: Package as Docker Image (From my file) --- - # This runs ONLY after Job 1 succeeds, AND - # This runs ONLY on pushes to your main branches (not PRs) + # For Node.js/Next.js services (Frontend): + # - name: Use Node.js and cache npm + # uses: actions/setup-node@v4 + # with: + # node-version: '22' + # cache: 'npm' + # + # - name: Install dependencies + # run: npm ci + # + # - name: Run linter + # run: npm run lint + # + # - name: Build + # run: npm run build + + # JOB 2: Package as Docker image (only on pushes to main/dev, not PRs) build-and-push-docker: name: Build & Push Docker Image - needs: build-and-test # Depends on the first job - - # This logic ensures it only runs on pushes, not PRs - if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/devOps' || github.ref == 'refs/heads/dev') + needs: build-test + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 + + # For Java services: download JAR from previous job + - name: Download JAR Artifact + uses: actions/download-artifact@v4 + with: + name: service-jar + path: gateway/target/ + + - name: Extract branch name + id: branch + run: | + BRANCH_NAME=${GITHUB_REF#refs/heads/} + echo "name=${BRANCH_NAME}" >> $GITHUB_OUTPUT + echo "📍 Building for branch: ${BRANCH_NAME}" - - name: Docker meta + - name: Docker meta (with branch-aware tags) id: meta uses: docker/metadata-action@v5 with: - images: ghcr.io/${{ github.repository }} + images: ghcr.io/techtorque-2025/api_gateway tags: | - type=sha,prefix= - type:raw,value=latest,enable={{is_default_branch}} + # Branch + short SHA (e.g., dev-abc1234 or main-xyz5678) + type=raw,value=${{ steps.branch.outputs.name }}-{{sha}},enable=true + # Latest tag only for main branch + type=raw,value=latest,enable={{is_default_branch}} + flavor: | + latest=false - name: Log in to GHCR uses: docker/login-action@v3 @@ -102,7 +117,20 @@ jobs: uses: docker/build-push-action@v5 with: context: . - file: ./Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file + labels: ${{ steps.meta.outputs.labels }} + + - name: Image Summary + run: | + echo "### 🐳 Docker Image Built" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Tags pushed:**" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + echo "${{ steps.meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + +# REPLACEMENTS NEEDED: +# - gateway: e.g., "auth-service", "time-logging-service" (for Java services) +# - api_gateway: e.g., "authentication", "timelogging_service", "frontend_web" +# - Uncomment Node.js steps for Frontend_Web diff --git a/.github/workflows/deploy.yaml.old b/.github/workflows/deploy.yaml.old new file mode 100644 index 0000000..e7bdd81 --- /dev/null +++ b/.github/workflows/deploy.yaml.old @@ -0,0 +1,63 @@ +# API_Gateway/.github/workflows/deploy.yml + +name: Deploy Gateway to Kubernetes + +on: + workflow_run: + workflows: ["Build, Test, and Package Gateway"] + types: + - completed + branches: + - 'main' + - 'devOps' + +jobs: + deploy: + name: Deploy Gateway to Kubernetes + if: ${{ github.event.workflow_run.conclusion == 'success' }} + runs-on: ubuntu-latest + + steps: + - name: Get Commit SHA + id: get_sha + run: | + echo "sha=$(echo ${{ github.event.workflow_run.head_sha }} | cut -c1-7)" >> $GITHUB_OUTPUT + + - name: Checkout K8s Config Repo + uses: actions/checkout@v4 + with: + repository: 'TechTorque-2025/k8s-config' + token: ${{ secrets.REPO_ACCESS_TOKEN }} + path: 'config-repo' + # --- NEW LINE --- + # Explicitly checkout the 'main' branch + ref: 'main' + + - name: Install kubectl + uses: azure/setup-kubectl@v3 + + - name: Install yq + run: | + sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq + sudo chmod +x /usr/bin/yq + + - name: Set Kubernetes context + uses: azure/k8s-set-context@v4 + with: + kubeconfig: ${{ secrets.KUBE_CONFIG_DATA }} + + - name: Update image tag in YAML + run: | + yq -i '(select(.kind == "Deployment") | .spec.template.spec.containers[0].image) = "ghcr.io/techtorque-2025/api_gateway:${{ steps.get_sha.outputs.sha }}"' config-repo/k8s/services/gateway-deployment.yaml + + # --- NEW DEBUGGING STEP --- + - name: Display file contents before apply + run: | + echo "--- Displaying k8s/services/gateway-deployment.yaml ---" + cat config-repo/k8s/services/gateway-deployment.yaml + echo "------------------------------------------------------" + + - name: Deploy to Kubernetes + run: | + kubectl apply -f config-repo/k8s/services/gateway-deployment.yaml + kubectl rollout status deployment/api-gateway-deployment \ No newline at end of file diff --git a/.github/workflows/update-manifest.yaml b/.github/workflows/update-manifest.yaml new file mode 100644 index 0000000..86c14d9 --- /dev/null +++ b/.github/workflows/update-manifest.yaml @@ -0,0 +1,88 @@ +# GitHub Actions Workflow Template for GitOps with ArgoCD +# This workflow should replace the old deploy.yaml in each microservice repo + +name: Update K8s Manifest + +on: + workflow_run: + workflows: ["Build and Package Service"] # Or "Build, Test, and Package Frontend" for Frontend_Web + types: [completed] + branches: ['main', 'dev'] + +jobs: + update-manifest: + name: Update Image Tag in k8s-config + if: ${{ github.event.workflow_run.conclusion == 'success' }} + runs-on: ubuntu-latest + + steps: + - name: Get branch and SHA info + id: info + run: | + BRANCH="${{ github.event.workflow_run.head_branch }}" + SHORT_SHA="$(echo ${{ github.event.workflow_run.head_sha }} | cut -c1-7)" + echo "branch=${BRANCH}" >> $GITHUB_OUTPUT + echo "sha=${SHORT_SHA}" >> $GITHUB_OUTPUT + echo "📍 Branch: ${BRANCH}, SHA: ${SHORT_SHA}" + + - name: Checkout k8s-config repo (matching branch) + uses: actions/checkout@v4 + with: + repository: 'TechTorque-2025/k8s-config' + token: ${{ secrets.REPO_ACCESS_TOKEN }} + ref: ${{ steps.info.outputs.branch }} # Checkout dev or main to match microservice branch + path: 'k8s-config' + + - name: Install yq (YAML processor) + run: | + sudo wget -qO /usr/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 + sudo chmod +x /usr/bin/yq + + - name: Update image tag in deployment manifest + env: + SERVICE_NAME: "api_gateway" # e.g., "timelogging_service", "frontend_web", "authentication" + DEPLOYMENT_FILE: "gateway-deployment.yaml" # e.g., "timelogging-deployment.yaml", "frontend-deployment.yaml" + run: | + cd k8s-config + NEW_IMAGE="ghcr.io/techtorque-2025/${SERVICE_NAME}:${{ steps.info.outputs.branch }}-${{ steps.info.outputs.sha }}" + + echo "🔄 Updating ${DEPLOYMENT_FILE} to use image: ${NEW_IMAGE}" + + yq eval -i \ + '(select(.kind == "Deployment") | .spec.template.spec.containers[0].image) = env(NEW_IMAGE)' \ + k8s/services/${DEPLOYMENT_FILE} + + echo "✅ Updated manifest:" + yq eval 'select(.kind == "Deployment") | .spec.template.spec.containers[0].image' k8s/services/${DEPLOYMENT_FILE} + + - name: Commit and push changes + env: + SERVICE_NAME: "api_gateway" + run: | + cd k8s-config + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + git add k8s/services/ + + if git diff --cached --quiet; then + echo "⚠️ No changes detected, skipping commit" + exit 0 + fi + + git commit -m "chore(${SERVICE_NAME}): update image to ${{ steps.info.outputs.branch }}-${{ steps.info.outputs.sha }}" \ + -m "Triggered by: ${{ github.event.workflow_run.html_url }}" + + git push origin ${{ steps.info.outputs.branch }} + + echo "✅ Pushed manifest update to k8s-config/${{ steps.info.outputs.branch }}" + echo "🚀 ArgoCD will automatically deploy this change" + + - name: Summary + run: | + echo "### 🎉 Manifest Update Complete" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "- **Branch**: ${{ steps.info.outputs.branch }}" >> $GITHUB_STEP_SUMMARY + echo "- **Image Tag**: ${{ steps.info.outputs.branch }}-${{ steps.info.outputs.sha }}" >> $GITHUB_STEP_SUMMARY + echo "- **Manifest Updated**: k8s/services/gateway-deployment.yaml" >> $GITHUB_STEP_SUMMARY + echo "- **Next Step**: ArgoCD will sync this change to the cluster" >> $GITHUB_STEP_SUMMARY From 1afb14203cb64c96b6f89f8cd244c6b8919854b0 Mon Sep 17 00:00:00 2001 From: RandithaK Date: Sat, 15 Nov 2025 04:33:02 +0530 Subject: [PATCH 3/4] fix: use export for NEW_IMAGE variable in yq command (fixes --arg incompatibility) --- .github/workflows/update-manifest.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/update-manifest.yaml b/.github/workflows/update-manifest.yaml index 86c14d9..7698c75 100644 --- a/.github/workflows/update-manifest.yaml +++ b/.github/workflows/update-manifest.yaml @@ -45,13 +45,14 @@ jobs: run: | cd k8s-config NEW_IMAGE="ghcr.io/techtorque-2025/${SERVICE_NAME}:${{ steps.info.outputs.branch }}-${{ steps.info.outputs.sha }}" - + export NEW_IMAGE + echo "🔄 Updating ${DEPLOYMENT_FILE} to use image: ${NEW_IMAGE}" - + yq eval -i \ '(select(.kind == "Deployment") | .spec.template.spec.containers[0].image) = env(NEW_IMAGE)' \ k8s/services/${DEPLOYMENT_FILE} - + echo "✅ Updated manifest:" yq eval 'select(.kind == "Deployment") | .spec.template.spec.containers[0].image' k8s/services/${DEPLOYMENT_FILE} From 70a3da5777bc6858ee0bb14bff379a1388cfd594 Mon Sep 17 00:00:00 2001 From: RandithaK Date: Sat, 15 Nov 2025 12:47:36 +0530 Subject: [PATCH 4/4] chore: commit workspace changes for gitops flow --- .github/workflows/build-test.yaml | 34 +++++++++++ .github/workflows/build.yaml | 82 ++------------------------ .github/workflows/deploy.yaml | 63 -------------------- .github/workflows/update-manifest.yaml | 2 +- 4 files changed, 39 insertions(+), 142 deletions(-) create mode 100644 .github/workflows/build-test.yaml delete mode 100644 .github/workflows/deploy.yaml diff --git a/.github/workflows/build-test.yaml b/.github/workflows/build-test.yaml new file mode 100644 index 0000000..b659d1e --- /dev/null +++ b/.github/workflows/build-test.yaml @@ -0,0 +1,34 @@ +name: Build and Test + +on: + pull_request: + branches: + - 'main' + - 'dev' + +permissions: + contents: read + +jobs: + build-test: + name: Build and Test + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.21' + cache: true + + - name: Build + run: go build -v ./... + + - name: Test Summary + run: | + echo "### ✅ Build Successful" >> $GITHUB_STEP_SUMMARY + echo "Go build completed successfully" >> $GITHUB_STEP_SUMMARY + echo "Ready for review and merge" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index d9fb4e6..84f6dc9 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,90 +1,23 @@ -# Updated build.yaml template for microservices -# This replaces the old build.yaml to add branch-aware image tagging - -name: Build and Package Service +name: Build and Push Docker Image on: push: branches: - 'main' - 'dev' - pull_request: - branches: - - 'main' - - 'dev' permissions: contents: read packages: write jobs: - # JOB 1: Build and test (runs on all pushes and PRs) - build-test: - name: Build and Test - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - # For Java/Spring Boot services: - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'temurin' - cache: maven - - - name: Cache Maven packages - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven- - - - name: Build with Maven - run: mvn -B clean package -DskipTests --file gateway/pom.xml - - - name: Upload Build Artifact - uses: actions/upload-artifact@v4 - with: - name: service-jar - path: gateway/target/*.jar - - # For Node.js/Next.js services (Frontend): - # - name: Use Node.js and cache npm - # uses: actions/setup-node@v4 - # with: - # node-version: '22' - # cache: 'npm' - # - # - name: Install dependencies - # run: npm ci - # - # - name: Run linter - # run: npm run lint - # - # - name: Build - # run: npm run build - - # JOB 2: Package as Docker image (only on pushes to main/dev, not PRs) - build-and-push-docker: + build-and-push: name: Build & Push Docker Image - needs: build-test - if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') runs-on: ubuntu-latest - + steps: - name: Checkout code uses: actions/checkout@v4 - - # For Java services: download JAR from previous job - - name: Download JAR Artifact - uses: actions/download-artifact@v4 - with: - name: service-jar - path: gateway/target/ - name: Extract branch name id: branch @@ -99,9 +32,7 @@ jobs: with: images: ghcr.io/techtorque-2025/api_gateway tags: | - # Branch + short SHA (e.g., dev-abc1234 or main-xyz5678) type=raw,value=${{ steps.branch.outputs.name }}-{{sha}},enable=true - # Latest tag only for main branch type=raw,value=latest,enable={{is_default_branch}} flavor: | latest=false @@ -120,7 +51,7 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - + - name: Image Summary run: | echo "### 🐳 Docker Image Built" >> $GITHUB_STEP_SUMMARY @@ -129,8 +60,3 @@ jobs: echo '```' >> $GITHUB_STEP_SUMMARY echo "${{ steps.meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY - -# REPLACEMENTS NEEDED: -# - gateway: e.g., "auth-service", "time-logging-service" (for Java services) -# - api_gateway: e.g., "authentication", "timelogging_service", "frontend_web" -# - Uncomment Node.js steps for Frontend_Web diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml deleted file mode 100644 index e7bdd81..0000000 --- a/.github/workflows/deploy.yaml +++ /dev/null @@ -1,63 +0,0 @@ -# API_Gateway/.github/workflows/deploy.yml - -name: Deploy Gateway to Kubernetes - -on: - workflow_run: - workflows: ["Build, Test, and Package Gateway"] - types: - - completed - branches: - - 'main' - - 'devOps' - -jobs: - deploy: - name: Deploy Gateway to Kubernetes - if: ${{ github.event.workflow_run.conclusion == 'success' }} - runs-on: ubuntu-latest - - steps: - - name: Get Commit SHA - id: get_sha - run: | - echo "sha=$(echo ${{ github.event.workflow_run.head_sha }} | cut -c1-7)" >> $GITHUB_OUTPUT - - - name: Checkout K8s Config Repo - uses: actions/checkout@v4 - with: - repository: 'TechTorque-2025/k8s-config' - token: ${{ secrets.REPO_ACCESS_TOKEN }} - path: 'config-repo' - # --- NEW LINE --- - # Explicitly checkout the 'main' branch - ref: 'main' - - - name: Install kubectl - uses: azure/setup-kubectl@v3 - - - name: Install yq - run: | - sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq - sudo chmod +x /usr/bin/yq - - - name: Set Kubernetes context - uses: azure/k8s-set-context@v4 - with: - kubeconfig: ${{ secrets.KUBE_CONFIG_DATA }} - - - name: Update image tag in YAML - run: | - yq -i '(select(.kind == "Deployment") | .spec.template.spec.containers[0].image) = "ghcr.io/techtorque-2025/api_gateway:${{ steps.get_sha.outputs.sha }}"' config-repo/k8s/services/gateway-deployment.yaml - - # --- NEW DEBUGGING STEP --- - - name: Display file contents before apply - run: | - echo "--- Displaying k8s/services/gateway-deployment.yaml ---" - cat config-repo/k8s/services/gateway-deployment.yaml - echo "------------------------------------------------------" - - - name: Deploy to Kubernetes - run: | - kubectl apply -f config-repo/k8s/services/gateway-deployment.yaml - kubectl rollout status deployment/api-gateway-deployment \ No newline at end of file diff --git a/.github/workflows/update-manifest.yaml b/.github/workflows/update-manifest.yaml index 7698c75..144d856 100644 --- a/.github/workflows/update-manifest.yaml +++ b/.github/workflows/update-manifest.yaml @@ -5,7 +5,7 @@ name: Update K8s Manifest on: workflow_run: - workflows: ["Build and Package Service"] # Or "Build, Test, and Package Frontend" for Frontend_Web + workflows: ["Build and Push Docker Image"] types: [completed] branches: ['main', 'dev']