From 77ac9604118d9b1cfcacbe737ecbf459eab7c6b2 Mon Sep 17 00:00:00 2001 From: Mathis HERRIOT <197931332+0x485254@users.noreply.github.com> Date: Wed, 14 Jan 2026 16:44:03 +0100 Subject: [PATCH] feat(ci): add GitHub Actions workflow for production deployment Introduce `deploy.yml` to automate deployment to production on `prod` branch push. Includes setup for Node.js, pnpm caching, linting, building, and Docker Compose deployment. Update `docker-compose.prod.yml` to use environment variables for enhanced configurability. --- .gitea/workflows/deploy.yml | 73 +++++++++++++++++++++++++++++++++++++ docker-compose.prod.yml | 16 ++++---- 2 files changed, 80 insertions(+), 9 deletions(-) create mode 100644 .gitea/workflows/deploy.yml diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..c69d15f --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,73 @@ +name: Deploy to Production +on: + push: + branches: + - prod + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 20 + + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITEA_ENV + + - name: Setup pnpm cache + uses: actions/cache@v3 + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - name: Lint all projects + run: pnpm run lint + + - name: Build all projects + run: pnpm run build + + - name: Deploy with Docker Compose + run: | + docker compose -f docker-compose.prod.yml up -d --build + env: + BACKEND_PORT: ${{ secrets.BACKEND_PORT }} + FRONTEND_PORT: ${{ secrets.FRONTEND_PORT }} + POSTGRES_HOST: ${{ secrets.POSTGRES_HOST }} + POSTGRES_PORT: ${{ secrets.POSTGRES_PORT }} + POSTGRES_USER: ${{ secrets.POSTGRES_USER }} + POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} + POSTGRES_DB: ${{ secrets.POSTGRES_DB }} + REDIS_HOST: ${{ secrets.REDIS_HOST }} + REDIS_PORT: ${{ secrets.REDIS_PORT }} + S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }} + S3_PORT: ${{ secrets.S3_PORT }} + S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }} + S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }} + S3_BUCKET_NAME: ${{ secrets.S3_BUCKET_NAME }} + JWT_SECRET: ${{ secrets.JWT_SECRET }} + ENCRYPTION_KEY: ${{ secrets.ENCRYPTION_KEY }} + PGP_ENCRYPTION_KEY: ${{ secrets.PGP_ENCRYPTION_KEY }} + SESSION_PASSWORD: ${{ secrets.SESSION_PASSWORD }} + MAIL_HOST: ${{ secrets.MAIL_HOST }} + MAIL_PASS: ${{ secrets.MAIL_PASS }} + MAIL_USER: ${{ secrets.MAIL_USER }} + MAIL_FROM: ${{ secrets.MAIL_FROM }} + DOMAIN_NAME: ${{ secrets.DOMAIN_NAME }} + NEXT_PUBLIC_API_URL: ${{ secrets.NEXT_PUBLIC_API_URL }} diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index c638d60..a2dcebf 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -73,24 +73,22 @@ services: condition: service_started clamav: condition: service_started - ports: - - "3000:3000" environment: NODE_ENV: production - POSTGRES_HOST: memegoat-db - POSTGRES_PORT: 5432 + POSTGRES_HOST: ${POSTGRES_HOST:-memegoat-db} + POSTGRES_PORT: ${POSTGRES_PORT:-5432} POSTGRES_DB: ${POSTGRES_DB:-app} POSTGRES_USER: ${POSTGRES_USER:-app} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-app} - REDIS_HOST: memegoat-redis - REDIS_PORT: 6379 - S3_ENDPOINT: memegoat-s3 - S3_PORT: 9000 + REDIS_HOST: ${REDIS_HOST:-memegoat-redis} + REDIS_PORT: ${REDIS_PORT:-6379} + S3_ENDPOINT: ${S3_ENDPOINT:-memegoat-s3} + S3_PORT: ${S3_PORT:-9000} S3_ACCESS_KEY: ${S3_ACCESS_KEY:-minioadmin} S3_SECRET_KEY: ${S3_SECRET_KEY:-minioadmin} S3_BUCKET_NAME: ${S3_BUCKET_NAME:-memegoat} MAIL_HOST: ${MAIL_HOST:-smtp.mail.ovh.net} - MAIL_PORT: 465 + MAIL_PORT: ${MAIL_PORT:-465} MAIL_USER: ${MAIL_USER} MAIL_PASS: ${MAIL_PASS} MAIL_FROM: ${MAIL_FROM:-noreply@memegoat.fr}