diff --git a/.github/workflows/buildtest.yaml b/.github/workflows/build-test.yaml similarity index 100% rename from .github/workflows/buildtest.yaml rename to .github/workflows/build-test.yaml diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 16d7cf7..a0aaa63 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -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: @@ -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 @@ -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 diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml.old similarity index 100% rename from .github/workflows/deploy.yaml rename to .github/workflows/deploy.yaml.old diff --git a/.github/workflows/update-manifest.yaml b/.github/workflows/update-manifest.yaml new file mode 100644 index 0000000..1e75d62 --- /dev/null +++ b/.github/workflows/update-manifest.yaml @@ -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