From 9e660b0fe9f374f3eb643d3d46bf6cb660cd58d0 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Tue, 10 Feb 2026 12:11:29 +0700 Subject: [PATCH] fix build management --- .../workflows/deploy-frontend-management.yaml | 146 +++++++++++++++--- 1 file changed, 128 insertions(+), 18 deletions(-) diff --git a/.forgejo/workflows/deploy-frontend-management.yaml b/.forgejo/workflows/deploy-frontend-management.yaml index 56ded2f0..13887467 100644 --- a/.forgejo/workflows/deploy-frontend-management.yaml +++ b/.forgejo/workflows/deploy-frontend-management.yaml @@ -1,12 +1,12 @@ -name: Build and Deploy Frontend Management +name: Build and Deploy Frontend Management to Dev Server on: push: branches: - - main - dev paths: - - 'frontend_management/**' + - "frontend_management/**" + - ".forgejo/workflows/deploy-frontend-management.yaml" workflow_dispatch: env: @@ -14,6 +14,13 @@ env: REGISTRY_USERNAME: ${{ vars.CONTAINER_REGISTRY_USERNAME }} REGISTRY_PASSWORD: ${{ secrets.CONTAINER_REGISTRY_PASSWORD }} + # Docker Image + IMAGE_NAME: chamomind/elearning-management + IMAGE_TAG: ${{ github.sha }} + + # Notifications + DISCORD_WEBHOOK_URL: ${{ vars.DISCORD_WEBHOOK_URL }} + jobs: build: name: Build Frontend Management Docker Image @@ -22,6 +29,13 @@ jobs: - name: Checkout code uses: actions/checkout@v4 + - name: Log in to Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ env.REGISTRY_USERNAME }} + password: ${{ env.REGISTRY_PASSWORD }} + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: @@ -30,24 +44,17 @@ jobs: http = true insecure = true - - name: Login to Docker Registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ env.REGISTRY_USERNAME }} - password: ${{ env.REGISTRY_PASSWORD }} - - name: Extract metadata id: meta uses: docker/metadata-action@v5 with: - images: ${{ env.REGISTRY }}/elearning-frontend-management + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=ref,event=branch type=sha,prefix= type=raw,value=latest,enable=${{ github.ref == 'refs/heads/dev' }} - - name: Build and push Docker image + - name: Build and Push Docker image uses: docker/build-push-action@v5 with: context: ./frontend_management @@ -55,20 +62,123 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache + cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache,mode=max deploy: - name: Deploy Frontend Management to Server + name: Deploy E-learning Frontend Management to Dev Server runs-on: ubuntu-latest needs: build - if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev' steps: - - name: Remote Deploy + - name: Deploy frontend management on server uses: appleboy/ssh-action@v1.2.1 with: host: ${{ vars.SSH_DEPLOY_HOST }} port: ${{ vars.SSH_DEPLOY_PORT }} username: ${{ secrets.SSH_DEPLOY_USER }} password: ${{ secrets.SSH_DEPLOY_PASSWORD }} - script: eval "${{ secrets.SSH_DEPLOY_FRONTEND_MGMT_CMD }}" + script: | + cd ~/repo + chmod +x ./replace-env.sh ./deploy.sh + ./replace-env.sh MANAGEMENT_TAG "${{ env.IMAGE_TAG }}" + ./deploy.sh elearning-management + + notify: + name: Notify Deployment Status + runs-on: ubuntu-latest + needs: [build, deploy] + if: always() + steps: + - name: Send Discord notification - Success + if: ${{ needs.deploy.result == 'success' }} + run: | + curl -H "Content-Type: application/json" \ + -d '{ + "embeds": [{ + "title": "✅ E-learning Frontend Management Deployment Successful", + "description": "E-learning Frontend Management deployed to dev server", + "color": 3066993, + "fields": [ + { + "name": "Environment", + "value": "Development", + "inline": true + }, + { + "name": "Branch", + "value": "${{ github.ref_name }}", + "inline": true + }, + { + "name": "Commit", + "value": "`${{ github.sha }}`", + "inline": false + }, + { + "name": "Image Tag", + "value": "`${{ env.IMAGE_TAG }}`", + "inline": true + }, + { + "name": "Web URL", + "value": "${{ env.NEXT_PUBLIC_APP_URL }}", + "inline": false + }, + { + "name": "Deployed By", + "value": "${{ github.actor }}", + "inline": true + } + ], + "footer": { + "text": "CMP CD Pipeline" + }, + "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%S.000Z)"'" + }] + }' \ + ${{ env.DISCORD_WEBHOOK_URL }} + + - name: Send Discord notification - Failure + if: ${{ needs.deploy.result == 'failure' || needs.build.result == 'failure' }} + run: | + curl -H "Content-Type: application/json" \ + -d '{ + "embeds": [{ + "title": "❌ E-learning Frontend Management Deployment Failed", + "description": "Failed to deploy E-learning Frontend Management to dev server", + "color": 15158332, + "fields": [ + { + "name": "Environment", + "value": "Development", + "inline": true + }, + { + "name": "Branch", + "value": "${{ github.ref_name }}", + "inline": true + }, + { + "name": "Commit", + "value": "`${{ github.sha }}`", + "inline": false + }, + { + "name": "Failed Job", + "value": "${{ needs.build.result == 'failure' && 'Build' || 'Deploy' }}", + "inline": true + }, + { + "name": "Deployed By", + "value": "${{ github.actor }}", + "inline": true + } + ], + "footer": { + "text": "CMP CD Pipeline" + }, + "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%S.000Z)"'" + }] + }' \ + ${{ env.DISCORD_WEBHOOK_URL }} + exit 1