Skip to content
This repository was archived by the owner on Nov 23, 2025. It is now read-only.
Merged
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
59 changes: 25 additions & 34 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,23 +1,18 @@
name: Build and Package Service
name: Build and Push Docker Image

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

permissions:
contents: read
packages: write
packages: write

jobs:
build-test:
name: Install and Build (Tests Skipped)
build-and-push:
name: Build & Push Docker Image
runs-on: ubuntu-latest

steps:
Expand All @@ -39,39 +34,26 @@ jobs:
restore-keys: |
${{ runner.os }}-maven-

- name: Build with Maven (Skip Tests)
- name: Build with Maven
run: mvn -B clean package -DskipTests --file project-service/pom.xml

- name: Upload Build Artifact (JAR)
uses: actions/upload-artifact@v4
with:
name: project-service-jar
path: project-service/target/*.jar
- 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}"

build-and-push-docker:
name: Build & Push Docker Image
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/devOps' || github.ref == 'refs/heads/dev'
runs-on: ubuntu-latest
needs: build-test

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

- name: Download JAR Artifact
uses: actions/download-artifact@v4
with:
name: project-service-jar
path: project-service/target/

- name: Docker meta
- name: Docker meta (with branch-aware tags)
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/techtorque-2025/project_service
tags: |
type=sha,prefix=
type=raw,value=${{ steps.branch.outputs.name }}-{{sha}},enable=true
type=raw,value=latest,enable={{is_default_branch}}
flavor: |
latest=false

- name: Log in to GHCR
uses: docker/login-action@v3
Expand All @@ -87,3 +69,12 @@ jobs:
push: true
tags: ${{ steps.meta.outputs.tags }}
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
89 changes: 89 additions & 0 deletions .github/workflows/update-manifest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# 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 Push Docker Image"] # 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: "project_service" # e.g., "timelogging_service", "frontend_web", "authentication"
DEPLOYMENT_FILE: "project-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 }}"
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}

- name: Commit and push changes
env:
SERVICE_NAME: "project_service"
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/project-deployment.yaml" >> $GITHUB_STEP_SUMMARY
echo "- **Next Step**: ArgoCD will sync this change to the cluster" >> $GITHUB_STEP_SUMMARY