From 08c85ccf0b12d7cc98d61bbed50810dbe84c0f8e Mon Sep 17 00:00:00 2001 From: aradhyacp Date: Fri, 9 Jan 2026 20:13:48 +0530 Subject: [PATCH] Add deployment steps to release workflow with prod branch check --- .github/workflows/release.yml | 81 +++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b866453..1fb15c4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,3 +40,84 @@ jobs: tags: | ghcr.io/${{ env.lower_actor }}/aperisolve:${{ env.RELEASE_VERSION }} ghcr.io/${{ env.lower_actor }}/aperisolve:latest + + deploy: + runs-on: ubuntu-latest + needs: docker-releases + environment: prod + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check if tag is from prod branch + id: check + run: | + TAG_REF="${GITHUB_REF#refs/tags/}" + echo "Tag: $TAG_REF" + + # Get branches containing this commit + BRANCHES=$(git branch -r --contains HEAD) + echo "Branches containing this commit: $BRANCHES" + + if echo "$BRANCHES" | grep -q "origin/prod"; then + echo "is_prod=true" >> $GITHUB_OUTPUT + echo "✅ Tag is from prod branch - will deploy" + else + echo "is_prod=false" >> $GITHUB_OUTPUT + echo "❌ Tag is not from prod branch - skipping deployment" + fi + + # wait for 30 seconds + - name: Wait for image propagation + if: steps.check.outputs.is_prod == 'true' + run: | + echo "Waiting 30 seconds for image to propagate in registry..." + sleep 30 + + - name: Deploy to production server + if: steps.check.outputs.is_prod == 'true' + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.PROD_SSH_HOST }} + username: ${{ secrets.PROD_SSH_USER }} + key: ${{ secrets.PROD_SSH_KEY }} + script: | + set -e + cd /root/AperiSolve + + # update code + git pull + + # create .env + cat < .env + MAX_CONTENT_LENGTH=${{ vars.MAX_CONTENT_LENGTH }} + MAX_PENDING_TIME=${{ vars.MAX_PENDING_TIME }} + MAX_STORE_TIME=${{ vars.MAX_STORE_TIME }} + CLEAR_AT_RESTART=${{ vars.CLEAR_AT_RESTART }} + SKIP_IHDR_FILL=${{ vars.SKIP_IHDR_FILL }} + + FLASK_DEBUG=${{ vars.FLASK_DEBUG }} + FLASK_ENV=${{ vars.FLASK_ENV }} + + RQ_DASHBOARD_REDIS_URL=${{ secrets.REDIS_URL }} + + POSTGRES_USER=${{ secrets.POSTGRES_USER }} + POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} + POSTGRES_DB=${{ secrets.POSTGRES_DB }} + DB_URI=${{ secrets.DATABASE_URL }} + + SENTRY_DSN=${{ secrets.SENTRY_DSN }} + SENTRY_TRACES_SAMPLE_RATE=${{ secrets.SENTRY_TRACES_SAMPLE_RATE }} + SENTRY_PROFILES_SAMPLE_RATE=${{ secrets.SENTRY_PROFILES_SAMPLE_RATE }} + SENTRY_RELEASE=${{ secrets.SENTRY_RELEASE }} + SENTRY_ENVIRONMENT=${{ secrets.SENTRY_ENVIRONMENT }} + EOF + + # Pull images and deploy + docker compose pull + docker compose down + docker compose up -d + docker image prune -f