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

Dev #10

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
36 changes: 36 additions & 0 deletions .github/workflows/build-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
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 Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
cache: 'pip'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt

- name: Test Summary
run: |
echo "### ✅ Build Successful" >> $GITHUB_STEP_SUMMARY
echo "Python dependencies installed successfully" >> $GITHUB_STEP_SUMMARY
echo "Ready for review and merge" >> $GITHUB_STEP_SUMMARY
90 changes: 25 additions & 65 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,102 +1,62 @@
name: Build and Package Agent Bot Service
name: Build and Push Docker Image

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: Test the Python application
build-test:
name: Install Dependencies and Test
build-and-push:
name: Build & Push Docker Image
runs-on: ubuntu-latest

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

- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'

- name: Cache pip packages
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt

- name: Lint with flake8 (optional)
- name: Extract branch name
id: branch
run: |
pip install flake8
# Stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# Exit-zero treats all errors as warnings
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
continue-on-error: true
BRANCH_NAME=${GITHUB_REF#refs/heads/}
echo "name=${BRANCH_NAME}" >> $GITHUB_OUTPUT
echo "📍 Building for branch: ${BRANCH_NAME}"

# Removed: Test import of main module
# This step was causing failures because it tries to initialize the application
# without environment variables (GOOGLE_API_KEY, PINECONE_API_KEY).
# These variables are only available in the K3S cluster, not in GitHub Actions.
# The flake8 linting step above is sufficient to catch syntax errors.

# JOB 2: Build and push Docker image
build-and-push-docker:
name: Build & Push Docker Image
# This job only runs on pushes to 'main', 'devOps', or 'dev', not on PRs
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/devOps' || 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

# This action generates smart tags for your Docker image
- name: Docker meta
- name: Docker meta (with branch-aware tags)
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }} # e.g., ghcr.io/TechTorque-2025/Agent_Bot
images: ghcr.io/techtorque-2025/agent_bot
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

# 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
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: . # Dockerfile is in the root of this repo
context: .
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"]
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: "agent_bot" # e.g., "timelogging_service", "frontend_web", "authentication"
DEPLOYMENT_FILE: "agent-bot-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: "agent_bot"
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/agent-bot-deployment.yaml" >> $GITHUB_STEP_SUMMARY
echo "- **Next Step**: ArgoCD will sync this change to the cluster" >> $GITHUB_STEP_SUMMARY