Skip to content

Merge pull request #3884 from ita-social-projects/feature/issue-3849 #256

Merge pull request #3884 from ita-social-projects/feature/issue-3849

Merge pull request #3884 from ita-social-projects/feature/issue-3849 #256

Workflow file for this run

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