Skip to content
This repository was archived by the owner on Nov 23, 2025. It is now read-only.
Merged

Dev #20

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 64 additions & 35 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
# .github/workflows/build.yml
# This workflow builds the JAR, then packages it as a Docker image.
# Updated build.yaml template for microservices
# This replaces the old build.yaml to add branch-aware image tagging

name: Build and Package Service

on:
push:
branches:
- 'main'
- 'devOps'
- 'dev'
pull_request:
branches:
- 'main'
- 'devOps'
- 'dev'

# Permissions needed to push Docker images to your org's GitHub packages
permissions:
contents: read
packages: write
packages: write

jobs:
# JOB 1: Your original job, unchanged
# JOB 1: Build and test (runs on all pushes and PRs)
build-test:
name: Install and Build (Tests Skipped)
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:
Expand All @@ -43,65 +43,94 @@ jobs:
restore-keys: |
${{ runner.os }}-maven-

- name: Build with Maven (Skip Tests)
# As requested, we are keeping -DskipTests for now
- name: Build with Maven
run: mvn -B clean package -DskipTests --file auth-service/pom.xml

- name: Upload Build Artifact (JAR)
# We upload the JAR so the next job can use it
- name: Upload Build Artifact
uses: actions/upload-artifact@v4
with:
name: auth-service-jar
name: service-jar
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Artifact name changed from auth-service-jar to generic service-jar. While this makes the workflow more generic, it could cause issues if multiple services use the same artifact name in parallel workflows. The previous name auth-service-jar was more specific and less likely to collide. Consider using a name that includes the repository name or a unique identifier:

name: ${{ github.event.repository.name }}-jar
Suggested change
name: service-jar
name: ${{ github.event.repository.name }}-jar

Copilot uses AI. Check for mistakes.
path: auth-service/target/*.jar

# JOB 2: New job to package the service as a Docker image
# 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

Comment on lines +55 to +70
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Commented-out code should be removed or properly documented. Large blocks of commented Node.js/Frontend code (lines 55-69) add clutter and reduce maintainability. If this workflow is meant to be a template, consider:

  1. Creating separate workflow files for Java and Node.js services, or
  2. Using a matrix strategy to handle different service types, or
  3. Moving template examples to documentation rather than commented code
Suggested change
# 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

Copilot uses AI. Check for mistakes.
# JOB 2: Package as Docker image (only on pushes to main/dev, not PRs)
build-and-push-docker:
name: Build & Push Docker Image
# This job only runs on pushes to 'main', not on PRs
# Ensures you only publish final images for merged code
if: 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
# This job runs *after* the build-test job succeeds
needs: build-test


steps:
- name: Checkout code
uses: actions/checkout@v4

# We need the JAR file that the 'build-test' job created
# For Java services: download JAR from previous job
- name: Download JAR Artifact
uses: actions/download-artifact@v4
with:
name: auth-service-jar
name: service-jar
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent artifact naming between upload and download. The artifact is uploaded with name service-jar (line 52) but this creates a potential issue if the workflow template is copied across multiple repositories without changes, as artifact names should be unique within a workflow run. Both occurrences should use a consistent, repository-specific naming pattern.

Suggested change
name: service-jar
name: service-jar-${{ github.event.repository.name }}

Copilot uses AI. Check for mistakes.
path: auth-service/target/

# This action generates smart tags for your Docker image
# e.g., 'ghcr.io/your-org/auth-service:latest'
# e.g., 'ghcr.io/your-org/auth-service:a1b2c3d' (from the commit SHA)
- name: Docker meta
- 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 (with branch-aware tags)
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }} # e.g., ghcr.io/randitha/Authentication
images: ghcr.io/techtorque-2025/authentication
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hardcoded repository-specific image name. The image name ghcr.io/techtorque-2025/authentication is hardcoded and specific to this authentication service. For a reusable template workflow (as indicated by the file comments), this should use github.repository_owner and derive the service name dynamically. For example:

images: ghcr.io/${{ github.repository }}

This would make the workflow truly reusable across microservices.

Suggested change
images: ghcr.io/techtorque-2025/authentication
images: ghcr.io/${{ github.repository }}

Copilot uses AI. Check for mistakes.
tags: |
type=sha,prefix=
# Branch + short SHA (e.g., dev-abc1234 or main-xyz5678)
type=raw,value=${{ steps.branch.outputs.name }}-{{sha}},enable=true
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Invalid type=raw syntax with Docker metadata action. The {{sha}} placeholder syntax is not valid for type=raw in docker/metadata-action v5. For raw tags, you need to use the format with prefix or construct the full value using available variables. The correct approach would be:

type=raw,value=${{ steps.branch.outputs.name }}-{{sha}}

However, {{sha}} is only available for certain tag types like type=sha. Consider using:

type=sha,prefix=${{ steps.branch.outputs.name }}-,format=short
Suggested change
type=raw,value=${{ steps.branch.outputs.name }}-{{sha}},enable=true
type=sha,prefix=${{ steps.branch.outputs.name }}-,format=short,enable=true

Copilot uses AI. Check for mistakes.
# Latest tag only for main branch
type=raw,value=latest,enable={{is_default_branch}}
flavor: |
latest=false
Comment on lines +106 to +107
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The flavor: latest=false configuration conflicts with the latest tag definition. On line 105, you explicitly create a latest tag for the default branch, but then on line 107 you set flavor: latest=false. This configuration is contradictory. If you want to control the latest tag manually (as you're doing on line 105), the flavor: latest=false is correct. However, verify this is the intended behavior, as it may cause confusion.

Copilot uses AI. Check for mistakes.

# Logs you into the GitHub Container Registry (GHCR)
- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }} # This token is auto-generated
password: ${{ secrets.GITHUB_TOKEN }}

# Builds the Docker image and pushes it to GHCR
# This assumes you have a 'Dockerfile' in the root of 'Authentication'
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: . # Assumes Dockerfile is in the root of this repo
# The Dockerfile build will copy the JAR from auth-service/target/
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
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:
# - auth-service: e.g., "auth-service", "time-logging-service" (for Java services)
# - authentication: e.g., "authentication", "timelogging_service", "frontend_web"
# - Uncomment Node.js steps for Frontend_Web
Comment on lines +133 to +136
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementation notes should not be in production workflow files. Lines 133-136 contain replacement instructions that are meant for developers implementing this template. These comments should either be:

  1. Removed once the workflow is configured for a specific service, or
  2. Moved to a separate README or documentation file

Having these in the workflow file suggests this is still a template that hasn't been properly customized for the authentication service.

Suggested change
# REPLACEMENTS NEEDED:
# - auth-service: e.g., "auth-service", "time-logging-service" (for Java services)
# - authentication: e.g., "authentication", "timelogging_service", "frontend_web"
# - Uncomment Node.js steps for Frontend_Web

Copilot uses AI. Check for mistakes.
72 changes: 72 additions & 0 deletions .github/workflows/deploy.yaml.old
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Authentication/.github/workflows/deploy.yml

name: Deploy Auth Service to Kubernetes

on:
workflow_run:
# This MUST match the 'name:' of your build.yml file
workflows: ["Build and Package Service"]
types:
- completed
branches:
- 'main'
- 'devOps'
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Critical: devOps branch removed from build.yaml.

This workflow triggers on the devOps branch, but build.yaml (Line 9-10) no longer builds images for this branch. This creates a mismatch where deployments may trigger without corresponding images.

Either update build.yaml to include devOps or remove this branch reference:

     branches:
       - 'main'
-      - 'devOps'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- 'devOps'
branches:
- 'main'
🤖 Prompt for AI Agents
In .github/workflows/deploy.yaml.old around line 13 (the '- 'devOps'' entry)
there is a branch trigger mismatch: build.yaml (lines 9-10) no longer builds
images for devOps, so deployments can fire without a corresponding image; fix by
either adding devOps back into build.yaml’s image build matrix (so builds
produce images for devOps) or remove the 'devOps' branch entry from deploy.yaml
(and any other workflow files) so triggers and build.yaml remain consistent;
ensure after change you run a quick CI dry-run or validate workflow files to
confirm triggers align.


jobs:
deploy:
name: Deploy Auth Service to Kubernetes
# We only deploy if the build job was successful
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest

steps:
# We only need the SHA of the new image
- name: Get Commit SHA
id: get_sha
run: |
echo "sha=$(echo ${{ github.event.workflow_run.head_sha }} | cut -c1-7)" >> $GITHUB_OUTPUT

# 1. Checkout your new 'k8s-config' repository
- name: Checkout K8s Config Repo
uses: actions/checkout@v4
with:
# This points to your new repo
repository: 'TechTorque-2025/k8s-config'
# This uses the org-level secret you created
token: ${{ secrets.REPO_ACCESS_TOKEN }}
# We'll put the code in a directory named 'config-repo'
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 }} # This uses your Org-level secret

# 2. Update the image tag for the *authentication* service
- name: Update image tag in YAML
run: |
yq -i '(select(.kind == "Deployment") | .spec.template.spec.containers[0].image) = "ghcr.io/techtorque-2025/authentication:${{ steps.get_sha.outputs.sha }}"' config-repo/k8s/services/auth-deployment.yaml
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Critical: Image tag format incompatible with new tagging scheme.

This workflow uses SHA-only tags (authentication:abc1234), but build.yaml now generates branch-prefixed tags (authentication:main-abc1234 or authentication:dev-abc1234). This mismatch will cause image pull failures.

Update the image reference to match the new format from build.yaml:

       - name: Update image tag in YAML
         run: |
-          yq -i '(select(.kind == "Deployment") | .spec.template.spec.containers[0].image) = "ghcr.io/techtorque-2025/authentication:${{ steps.get_sha.outputs.sha }}"' config-repo/k8s/services/auth-deployment.yaml
+          BRANCH="${{ github.event.workflow_run.head_branch }}"
+          yq -i '(select(.kind == "Deployment") | .spec.template.spec.containers[0].image) = "ghcr.io/techtorque-2025/authentication:'"${BRANCH}"'-${{ steps.get_sha.outputs.sha }}"' config-repo/k8s/services/auth-deployment.yaml

However, given that update-manifest.yaml appears to replace this workflow with a GitOps approach, consider removing this file entirely.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
yq -i '(select(.kind == "Deployment") | .spec.template.spec.containers[0].image) = "ghcr.io/techtorque-2025/authentication:${{ steps.get_sha.outputs.sha }}"' config-repo/k8s/services/auth-deployment.yaml
- name: Update image tag in YAML
run: |
BRANCH="${{ github.event.workflow_run.head_branch }}"
yq -i '(select(.kind == "Deployment") | .spec.template.spec.containers[0].image) = "ghcr.io/techtorque-2025/authentication:'"${BRANCH}"'-${{ steps.get_sha.outputs.sha }}"' config-repo/k8s/services/auth-deployment.yaml


# --- NEW DEBUGGING STEP ---
- name: Display file contents before apply
run: |
echo "--- Displaying k8s/services/auth-deployment.yaml ---"
cat config-repo/k8s/services/auth-deployment.yaml
echo "------------------------------------------------------"

# 3. Deploy the updated file
- name: Deploy to Kubernetes
run: |
kubectl apply -f config-repo/k8s/services/auth-deployment.yaml
kubectl rollout status deployment/auth-deployment
Comment on lines +1 to +72
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

Clarify the status of this .old file.

The .old extension suggests this workflow is deprecated, likely replaced by update-manifest.yaml which follows GitOps principles (commit to k8s-config, let ArgoCD sync) rather than direct kubectl apply.

If this workflow is no longer needed:

  1. Delete the file entirely to avoid confusion
  2. Document the migration in the PR description or README

If it's kept for reference or rollback purposes:

  1. Disable the workflow by removing the on: triggers
  2. Add a prominent comment at the top explaining its status
  3. Consider moving it to a docs/ or .archive/ directory
# DEPRECATED: This workflow has been replaced by update-manifest.yaml
# Kept for reference only - DO NOT USE
# See: update-manifest.yaml for the current GitOps-based deployment approach
🤖 Prompt for AI Agents
In .github/workflows/deploy.yaml.old around lines 1-72 the file appears to be an
outdated deployment workflow (note the .old suffix) causing potential confusion
with the current GitOps flow; either remove the file if it's fully deprecated
and add a short note in the PR description/README about the migration to
update-manifest.yaml, or if you must keep it for reference disable all triggers
(remove the on: block), add a prominent top-of-file comment stating "DEPRECATED:
replaced by update-manifest.yaml — kept for reference only; do not use", and
optionally move the file into a docs/ or .archive/ directory to avoid accidental
execution.

88 changes: 88 additions & 0 deletions .github/workflows/update-manifest.yaml
Original file line number Diff line number Diff line change
@@ -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'

Comment on lines +34 to +35
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Potential branch checkout failure when k8s-config branch doesn't exist. If a microservice pushes to a branch (e.g., feature-branch) that doesn't exist in the k8s-config repository, this checkout will fail. Consider adding error handling or defaulting to a base branch (e.g., dev or main) if the matching branch doesn't exist:

- 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 }}
    path: 'k8s-config'
  continue-on-error: true

- name: Fallback to main branch if needed
  if: failure()
  uses: actions/checkout@v4
  with:
    repository: 'TechTorque-2025/k8s-config'
    token: ${{ secrets.REPO_ACCESS_TOKEN }}
    ref: 'main'
    path: 'k8s-config'
Suggested change
path: 'k8s-config'
path: 'k8s-config'
continue-on-error: true
- name: Fallback to main branch if needed
if: failure()
uses: actions/checkout@v4
with:
repository: 'TechTorque-2025/k8s-config'
token: ${{ secrets.REPO_ACCESS_TOKEN }}
ref: 'main'
path: 'k8s-config'

Copilot uses AI. Check for mistakes.
- name: Install yq (YAML processor)
run: |
sudo wget -qO /usr/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing security flag for wget command. The wget command uses -qO but doesn't verify the downloaded binary's integrity. Consider adding checksum verification or using the -q with --secure-protocol option. Additionally, downloading from latest can lead to non-reproducible builds. Consider pinning to a specific version:

VERSION="v4.35.1"  # or latest stable version
sudo wget -qO /usr/bin/yq https://github.com/mikefarah/yq/releases/download/${VERSION}/yq_linux_amd64
echo "expected_checksum /usr/bin/yq" | sha256sum -c
sudo chmod +x /usr/bin/yq
Suggested change
sudo wget -qO /usr/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64
YQ_VERSION="v4.35.1"
YQ_BINARY_URL="https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_amd64"
YQ_CHECKSUM_URL="https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/checksums"
sudo wget -qO /usr/bin/yq "${YQ_BINARY_URL}"
wget -qO /tmp/yq_checksums "${YQ_CHECKSUM_URL}"
grep "yq_linux_amd64" /tmp/yq_checksums | sha256sum -c --ignore-missing

Copilot uses AI. Check for mistakes.
sudo chmod +x /usr/bin/yq

- name: Update image tag in deployment manifest
env:
SERVICE_NAME: "authentication" # e.g., "timelogging_service", "frontend_web", "authentication"
DEPLOYMENT_FILE: "auth-deployment.yaml" # e.g., "timelogging-deployment.yaml", "frontend-deployment.yaml"
Comment on lines +43 to +44
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hardcoded service-specific values should be parameterized. These SERVICE_NAME and DEPLOYMENT_FILE values are specific to the authentication service and would need to be manually changed for each microservice. Consider using repository variables or deriving these from the repository name to make this workflow reusable across different microservices.

Copilot uses AI. Check for mistakes.
Comment on lines +43 to +44
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

Eliminate hardcoded service-specific values.

The SERVICE_NAME (authentication) and DEPLOYMENT_FILE (auth-deployment.yaml) are hardcoded in multiple locations despite comments suggesting they should be parameterized. This makes the "template" non-reusable across different services.

Consider using repository variables or extracting from repository name:

       - name: Update image tag in deployment manifest
         env:
-          SERVICE_NAME: "authentication"  # e.g., "timelogging_service", "frontend_web", "authentication"
-          DEPLOYMENT_FILE: "auth-deployment.yaml"  # e.g., "timelogging-deployment.yaml", "frontend-deployment.yaml"
+          SERVICE_NAME: ${{ vars.SERVICE_NAME }}
+          DEPLOYMENT_FILE: ${{ vars.DEPLOYMENT_FILE }}

And update the summary step:

           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/auth-deployment.yaml" >> $GITHUB_STEP_SUMMARY
+          echo "- **Manifest Updated**: k8s/services/${{ env.DEPLOYMENT_FILE }}" >> $GITHUB_STEP_SUMMARY
           echo "- **Next Step**: ArgoCD will sync this change to the cluster" >> $GITHUB_STEP_SUMMARY

Also applies to: 60-60, 87-87

🤖 Prompt for AI Agents
.github/workflows/update-manifest.yaml lines 43-44 (and also adjust occurrences
at lines 60 and 87): the SERVICE_NAME and DEPLOYMENT_FILE are hardcoded; change
them to use workflow inputs or repository/organization variables (e.g., inputs
defined in the workflow or GitHub repository secrets/variables or derive from
github.repository) so the file becomes a reusable template; replace hardcoded
values with references to the chosen inputs/vars, ensure parsing logic derives
SERVICE_NAME from the repo name if needed, and update the summary step to
reference the new variables instead of literal
"authentication"/"auth-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: "authentication"
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate hardcoded SERVICE_NAME value. This is the same hardcoded value as in the previous step (line 43). This duplication could lead to inconsistencies if one is updated but not the other. Consider defining this once at the job or workflow level using environment variables.

Copilot uses AI. Check for mistakes.
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/auth-deployment.yaml" >> $GITHUB_STEP_SUMMARY
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hardcoded deployment file name. This value is hardcoded and specific to the authentication service. It should match the DEPLOYMENT_FILE variable defined earlier but is duplicated here, creating another maintenance point. Consider using a job-level environment variable to define this once.

Copilot uses AI. Check for mistakes.
echo "- **Next Step**: ArgoCD will sync this change to the cluster" >> $GITHUB_STEP_SUMMARY