Merge pull request #3884 from ita-social-projects/feature/issue-3849 #256
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Main pipeline Backend | |
| on: | |
| push: | |
| branches: | |
| - 'release/**' | |
| env: | |
| RUN_NUM: ${{ github.run_number }} | |
| jobs: | |
| docker: | |
| name: Build and push docker image | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out the repo | |
| uses: actions/checkout@v4 | |
| - name: "Run docker build and doker push" | |
| run: echo "Tag for image ${GITHUB_REF##*/}.${RUN_NUM}" | |
| - name: Log in to Docker Hub | |
| uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Extract metadata for Docker | |
| id: meta | |
| uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 | |
| with: | |
| images: | | |
| victorycenterua/backend | |
| - name: Build and push Docker images | |
| id: push | |
| uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671 | |
| with: | |
| context: . | |
| push: true | |
| tags: ${{ steps.meta.outputs.tags }}.${{ github.run_number }} | |
| manual_approval_deploy: | |
| needs: docker | |
| environment: stage | |
| runs-on: ubuntu-latest | |
| outputs: | |
| comment: ${{ steps.set_env.outputs.comment }} | |
| steps: | |
| - name: "Get approval message for Stage deploy" | |
| id: set_env | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| echo "comment=$(curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \ | |
| -H "Accept: application/vnd.github+json" \ | |
| https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/approvals \ | |
| | jq '.[] | {user: .user.login, comment: .comment, environments: [.environments[].name]}' \ | |
| | jq -r '.comment')" >> $GITHUB_OUTPUT | |
| stage_deploy: | |
| needs: [manual_approval_deploy, docker] | |
| if: contains(needs.manual_approval_deploy.outputs.comment, 'approve') | |
| runs-on: self-hosted | |
| outputs: | |
| backend_tag: ${{ steps.backend_tag.outputs.backend_tag }} | |
| frontend_tag: ${{ steps.frontend_tag.outputs.frontend_tag }} | |
| backend_tag_rollback: ${{ steps.backend_tag_rollback.outputs.backend_tag_rollback }} | |
| steps: | |
| - run: echo ${{ needs.manual_approval_deploy.outputs.comment }} | |
| - name: "Set backend tag for rollback" | |
| id: backend_tag_rollback | |
| run: | | |
| echo "backend_tag_rollback=$(docker inspect backend --format '{{.Config.Image}}' | cut -d: -f2)" >> "$GITHUB_OUTPUT" | |
| - name: "Set frontend tag" | |
| id: frontend_tag | |
| run: | | |
| echo "frontend_tag=$(docker inspect frontend --format '{{.Config.Image}}' | cut -d: -f2)" >> "$GITHUB_OUTPUT" | |
| - name: "Set backend tag" | |
| id: backend_tag | |
| run: | | |
| echo "backend_tag=release-${GITHUB_REF##*/}.${RUN_NUM}" >> "$GITHUB_OUTPUT" | |
| - name: Debug resolved images | |
| run: | | |
| echo "DOCKER_TAG_FRONTEND=${{ steps.frontend_tag.outputs.frontend_tag }}" | |
| echo "DOCKER_TAG_BACKEND=${{ steps.backend_tag.outputs.backend_tag }}" | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: ita-social-projects/VictoryCenter-DevOps | |
| - name: Stop all containers | |
| run: docker stop nginx certbot frontend backend || true | |
| - name: Delete additional info | |
| run: docker system prune -f | |
| - name: Set up enviroments and Deploy | |
| env: | |
| INITIAL_ADMIN_EMAIL: ${{ secrets.INITIAL_ADMIN_EMAIL }} | |
| INITIAL_ADMIN_PASSWORD: ${{ secrets.INITIAL_ADMIN_PASSWORD }} | |
| JWTOPTIONS_SECRETKEY: ${{ secrets.JWTOPTIONS_SECRETKEY }} | |
| JWTOPTIONS_REFRESH_TOKEN_SECRETKEY: ${{ secrets.JWTOPTIONS_REFRESH_TOKEN_SECRETKEY }} | |
| DOCKER_TAG_FRONTEND: ${{ steps.frontend_tag.outputs.frontend_tag }} | |
| DOCKER_TAG_BACKEND: ${{ steps.backend_tag.outputs.backend_tag }} | |
| DB_CONNECTION_STRING: ${{ secrets.DB_CONNECTION_STRING }} | |
| WAY4PAY_MERCHANT_LOGIN: ${{ secrets.WAY4PAY_MERCHANT_LOGIN }} | |
| WAY4PAY_MERCHANT_SECRET_KEY: ${{ secrets.WAY4PAY_MERCHANT_SECRET_KEY }} | |
| WAY4PAY_MERCHANT_DOMAIN_NAME: ${{ secrets.WAY4PAY_MERCHANT_DOMAIN_NAME }} | |
| WAY4PAY_API_URL: ${{ secrets.WAY4PAY_API_URL }} | |
| BLOB_LOCAL_STORE_KEY: ${{ secrets.BLOB_LOCAL_STORE_KEY }} | |
| CLOUDFLARE_TURNSTILE_SECRET_KEY: ${{ secrets.CLOUDFLARE_TURNSTILE_SECRET_KEY }} | |
| CLOUDFLARE_TURNSTILE_SITE_VERIFY_URL: ${{ secrets.CLOUDFLARE_TURNSTILE_SITE_VERIFY_URL }} | |
| CONTACT_US_EMAIL_OPTIONS_FROM_ADDRESS: ${{ secrets.CONTACT_US_EMAIL_OPTIONS_FROM_ADDRESS }} | |
| RESEND_API_TOKEN: ${{ secrets.RESEND_API_TOKEN }} | |
| run: | | |
| docker compose up -d | |
| - name: Discord notification | |
| if: failure() | |
| env: | |
| DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} | |
| uses: appleboy/discord-action@v1.2.0 | |
| with: | |
| args: | | |
| ❗ Deployment error on Main Backend pipeline! | |
| An issue occurred during the deployment process. | |
| Commit: ${{ github.sha }} | |
| Author: ${{ github.actor }} | |
| 🔗 [View workflow logs](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) | |
| manual_approval_rollback: | |
| needs: stage_deploy | |
| environment: stage | |
| runs-on: ubuntu-latest | |
| outputs: | |
| comment: ${{ steps.set_comment_rollback.outputs.comment }} | |
| steps: | |
| - name: "Get rollback message for Stage deploy" | |
| id: set_comment_rollback | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| echo "comment=$(curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \ | |
| -H "Accept: application/vnd.github+json" \ | |
| https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/approvals \ | |
| | jq -r '.[0].comment')" >> $GITHUB_OUTPUT | |
| stage_rollback: | |
| needs: [manual_approval_rollback, stage_deploy] | |
| if: contains(needs.manual_approval_rollback.outputs.comment, 'approve') | |
| runs-on: self-hosted | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: ita-social-projects/VictoryCenter-DevOps | |
| - name: Stop all containers | |
| run: docker stop nginx certbot frontend backend | |
| - name: Delete additon info | |
| run: docker system prune -f | |
| - name: Set up enviroments and Deploy | |
| env: | |
| INITIAL_ADMIN_EMAIL: ${{ secrets.INITIAL_ADMIN_EMAIL }} | |
| INITIAL_ADMIN_PASSWORD: ${{ secrets.INITIAL_ADMIN_PASSWORD }} | |
| JWTOPTIONS_SECRETKEY: ${{ secrets.JWTOPTIONS_SECRETKEY }} | |
| JWTOPTIONS_REFRESH_TOKEN_SECRETKEY: ${{ secrets.JWTOPTIONS_REFRESH_TOKEN_SECRETKEY }} | |
| DOCKER_TAG_FRONTEND: ${{ needs.stage_deploy.outputs.frontend_tag }} | |
| DOCKER_TAG_BACKEND: ${{ needs.stage_deploy.outputs.backend_tag_rollback }} | |
| DB_CONNECTION_STRING: ${{ secrets.DB_CONNECTION_STRING }} | |
| WAY4PAY_MERCHANT_LOGIN: ${{ secrets.WAY4PAY_MERCHANT_LOGIN }} | |
| WAY4PAY_MERCHANT_SECRET_KEY: ${{ secrets.WAY4PAY_MERCHANT_SECRET_KEY }} | |
| WAY4PAY_MERCHANT_DOMAIN_NAME: ${{ secrets.WAY4PAY_MERCHANT_DOMAIN_NAME }} | |
| WAY4PAY_API_URL: ${{ secrets.WAY4PAY_API_URL }} | |
| BLOB_LOCAL_STORE_KEY: ${{ secrets.BLOB_LOCAL_STORE_KEY }} | |
| CLOUDFLARE_TURNSTILE_SECRET_KEY: ${{ secrets.CLOUDFLARE_TURNSTILE_SECRET_KEY }} | |
| CLOUDFLARE_TURNSTILE_SITE_VERIFY_URL: ${{ secrets.CLOUDFLARE_TURNSTILE_SITE_VERIFY_URL }} | |
| CONTACT_US_EMAIL_OPTIONS_FROM_ADDRESS: ${{ secrets.CONTACT_US_EMAIL_OPTIONS_FROM_ADDRESS }} | |
| RESEND_API_TOKEN: ${{ secrets.RESEND_API_TOKEN }} | |
| run: | | |
| docker compose up -d |