Skip to content

Update ci-cd.dev.yml #160

Update ci-cd.dev.yml

Update ci-cd.dev.yml #160

Workflow file for this run

name: CI/CD Production Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18' # Using Node.js version 18
- name: Install dependencies
run: |
cd ./satsquare
npm install
- name: Run prisma commands and build
run: |
export DATABASE_URL=${{ secrets.DATABASE_URL }}
export NEXTAUTH_SECRET=${{ secrets.NEXTAUTH_SECRET }}
export NEXT_PUBLIC_LNURL_AUTH_PUBLIC_KEY=${{ secrets.NEXT_PUBLIC_LNURL_AUTH_PUBLIC_KEY }}
export NEXT_PUBLIC_SITE_URL=${{ secrets.NEXT_PUBLIC_SITE_URL }}
export NEXT_PUBLIC_SOCKET_URL=${{ secrets.NEXT_PUBLIC_SOCKET_URL }}
export REDIS_URL=${{ secrets.REDIS_URL }}
cd ./satsquare
npx prisma generate
npx prisma db push
npm run seed
npm run build
lint:
needs: build
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: |
cd ./satsquare
npm ci
npm run lint
unit-tests:
needs: build
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: |
cd ./satsquare
npm ci
npm run test
e2e-tests:
needs: build
environment: production
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: |
export DATABASE_URL=${{ secrets.DATABASE_URL }}
export NEXTAUTH_SECRET=${{ secrets.NEXTAUTH_SECRET }}
export NEXT_PUBLIC_LNURL_AUTH_PUBLIC_KEY=${{ secrets.NEXT_PUBLIC_LNURL_AUTH_PUBLIC_KEY }}
export NEXT_PUBLIC_SITE_URL=${{ secrets.NEXT_PUBLIC_SITE_URL }}
export NEXT_PUBLIC_SOCKET_URL=${{ secrets.NEXT_PUBLIC_SOCKET_URL }}
export REDIS_URL=${{ secrets.REDIS_URL }}
cd ./satsquare
npm ci
npm run test:e2e
deps-vulnerability:
needs: [e2e-tests, unit-tests]
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v3
- run: |
cd ./satsquare
npm ci
npm audit --audit-level=moderate
codecov:
needs: deps-vulnerability
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: |
cd ./satsquare
npm ci
npm run test -- --coverage
- uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
lighthouse:
needs: codecov
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: |
cd ./satsquare
npm install
npx lhci autorun
docker-deploy:
needs: lighthouse
runs-on: ubuntu-latest
environment: production
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- run: |
export DATABASE_URL=${{ secrets.DATABASE_URL }}
export NEXTAUTH_SECRET=${{ secrets.NEXTAUTH_SECRET }}
export NEXT_PUBLIC_LNURL_AUTH_PUBLIC_KEY=${{ secrets.NEXT_PUBLIC_LNURL_AUTH_PUBLIC_KEY }}
export NEXT_PUBLIC_SITE_URL=${{ secrets.NEXT_PUBLIC_SITE_URL }}
export NEXT_PUBLIC_SOCKET_URL=${{ secrets.NEXT_PUBLIC_SOCKET_URL }}
export REDIS_URL=${{ secrets.REDIS_URL }}
cd ./satsquare
docker build -f Dockerfile.prod --build-arg DATABASE_URL=${{ secrets.DATABASE_URL }} --build-arg NEXTAUTH_SECRET="${{ github.sha }}" -t ghcr.io/ismail-mouyahada/master-satsquare-app:prod-${{ github.sha }} .
- uses: aquasecurity/[email protected]
with:
image-ref: ghcr.io/ismail-mouyahada/master-satsquare-app:prod-${{ github.sha }}
- run: docker push ghcr.io/ismail-mouyahada/master-satsquare-app:prod-${{ github.sha }}
notify:
needs: docker-deploy
runs-on: ubuntu-latest
environment: production
steps:
- name: Notification de succès 🎉
uses: containrrr/shoutrrr-action@v1
if: success()
with:
url: ${{ secrets.DISCORD_WEBHOOK_URL }}
title: "🚀 Déploiement réussi : ${{ github.sha }} sur PRODUCTION 🎉"
message: "Voir les modifications : ${{ github.event.compare }}."
username: "PreproductionBOT"
avatar: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR9SYdK1M7jEIJgdj9foHiEoUdUiYxfREv3jg&s"
- name: Notification échec 💥
uses: containrrr/shoutrrr-action@v1
if: failure()
with:
url: ${{ secrets.DISCORD_WEBHOOK_URL }}
message: "❗ Consultez les logs pour plus de détails. Voir les modifications : ${{ github.event.compare }}."
username: "PreproductionBOT"
avatar: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR9SYdK1M7jEIJgdj9foHiEoUdUiYxfREv3jg&s"