From ec30db4c2d9d3aa519d7bfb42a3bf62e2f71cff6 Mon Sep 17 00:00:00 2001 From: EvanChal Date: Sun, 25 Jan 2026 22:25:55 +0100 Subject: [PATCH] fix(ci/cd) --- .gitea/workflows/deploy-prod.yml | 92 +++++++++++++++++++++++++------- 1 file changed, 74 insertions(+), 18 deletions(-) diff --git a/.gitea/workflows/deploy-prod.yml b/.gitea/workflows/deploy-prod.yml index df86abf..7af6605 100644 --- a/.gitea/workflows/deploy-prod.yml +++ b/.gitea/workflows/deploy-prod.yml @@ -65,7 +65,7 @@ jobs: run: | cd frontend npm run build - + build-and-deploy: needs: test runs-on: ubuntu-latest @@ -74,36 +74,92 @@ jobs: - name: Checkout code uses: actions/checkout@v3 + - name: Force IPv4 for DNS + run: | + echo 'precedence ::ffff:0:0/96 100' | sudo tee -a /etc/gai.conf + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - - name: Login to Gitea Container Registry - uses: docker/login-action@v2 - with: - registry: ${{ secrets.REGISTRY_URL }} - username: ${{ secrets.REGISTRY_USERNAME }} - password: ${{ secrets.REGISTRY_TOKEN }} + - name: Login to Gitea Container Registry (with retry) + run: | + for i in 1 2 3 4 5; do + echo "🔐 Login attempt $i..." + echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ${{ secrets.REGISTRY_URL }} -u ${{ secrets.REGISTRY_USERNAME }} --password-stdin && break || sleep 5 + done - - name: Build and push backend image + # ===== BACKEND ===== + - name: Build backend image uses: docker/build-push-action@v4 with: context: ./backend file: ./backend/Dockerfile - push: true + push: false + load: true tags: | - ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord-backend:prod - ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord-backend:latest - cache-from: type=registry,ref=${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord-backend:prod + ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord:prod-backend + ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord:latest-backend + cache-from: type=registry,ref=${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord:prod-backend cache-to: type=inline - - name: Build and push frontend image + - name: Push backend image (with retry) + run: | + push_with_retry() { + local image=$1 + for i in 1 2 3 4 5; do + echo "📤 Push attempt $i for $image..." + if docker push "$image"; then + echo "✅ Successfully pushed $image" + return 0 + fi + echo "⚠️ Push failed, waiting 10s..." + sleep 10 + done + echo "❌ Failed to push $image after 5 attempts" + return 1 + } + + push_with_retry "${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord:prod-backend" + push_with_retry "${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord:latest-backend" + + # ===== FRONTEND ===== + - name: Build frontend image uses: docker/build-push-action@v4 with: context: ./frontend file: ./frontend/Dockerfile - push: true + push: false + load: true tags: | - ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord-frontend:prod - ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord-frontend:latest - cache-from: type=registry,ref=${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord-frontend:prod - cache-to: type=inline \ No newline at end of file + ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord:prod-frontend + ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord:latest-frontend + cache-from: type=registry,ref=${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord:prod-frontend + cache-to: type=inline + + - name: Push frontend image (with retry) + run: | + push_with_retry() { + local image=$1 + for i in 1 2 3 4 5; do + echo "📤 Push attempt $i for $image..." + if docker push "$image"; then + echo "✅ Successfully pushed $image" + return 0 + fi + echo "⚠️ Push failed, waiting 10s..." + sleep 10 + done + echo "❌ Failed to push $image after 5 attempts" + return 1 + } + + push_with_retry "${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord:prod-frontend" + push_with_retry "${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USERNAME }}/lediscord:latest-frontend" + + # ===== DEPLOY ===== + - name: Deploy to Nomad + if: success() + run: | + echo "🚀 Deployment ready!" + echo "Run on your server:" + echo " nomad job run -force lediscord.nomad" \ No newline at end of file