146 lines
4.0 KiB
YAML
146 lines
4.0 KiB
YAML
name: PR Checks
|
|
|
|
# Required status checks — configure these in branch protection rules.
|
|
# PRs to preprod : lint + type-check + unit tests + integration tests
|
|
# PRs to main : lint + type-check + unit tests only
|
|
|
|
on:
|
|
pull_request:
|
|
branches: [preprod, main]
|
|
|
|
concurrency:
|
|
group: pr-${{ github.event.pull_request.number }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
NODE_VERSION: '20'
|
|
|
|
jobs:
|
|
backend-quality:
|
|
name: Backend — Lint
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: apps/backend
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: ${{ env.NODE_VERSION }}
|
|
cache: 'npm'
|
|
cache-dependency-path: apps/backend/package-lock.json
|
|
- run: npm install --legacy-peer-deps
|
|
- run: npm run lint
|
|
|
|
frontend-quality:
|
|
name: Frontend — Lint & Type-check
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: apps/frontend
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: ${{ env.NODE_VERSION }}
|
|
cache: 'npm'
|
|
cache-dependency-path: apps/frontend/package-lock.json
|
|
- run: npm ci --legacy-peer-deps
|
|
- run: npm run lint
|
|
- run: npm run type-check
|
|
|
|
backend-tests:
|
|
name: Backend — Unit Tests
|
|
runs-on: ubuntu-latest
|
|
needs: backend-quality
|
|
defaults:
|
|
run:
|
|
working-directory: apps/backend
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: ${{ env.NODE_VERSION }}
|
|
cache: 'npm'
|
|
cache-dependency-path: apps/backend/package-lock.json
|
|
- run: npm install --legacy-peer-deps
|
|
- run: npm test -- --passWithNoTests
|
|
|
|
frontend-tests:
|
|
name: Frontend — Unit Tests
|
|
runs-on: ubuntu-latest
|
|
needs: frontend-quality
|
|
defaults:
|
|
run:
|
|
working-directory: apps/frontend
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: ${{ env.NODE_VERSION }}
|
|
cache: 'npm'
|
|
cache-dependency-path: apps/frontend/package-lock.json
|
|
- run: npm ci --legacy-peer-deps
|
|
- run: npm test -- --passWithNoTests
|
|
|
|
# Integration tests — PRs to preprod only
|
|
# Code going to main was already integration-tested when it passed through preprod
|
|
integration-tests:
|
|
name: Backend — Integration Tests
|
|
runs-on: ubuntu-latest
|
|
needs: backend-tests
|
|
if: github.base_ref == 'preprod'
|
|
defaults:
|
|
run:
|
|
working-directory: apps/backend
|
|
|
|
services:
|
|
postgres:
|
|
image: postgres:15-alpine
|
|
env:
|
|
POSTGRES_USER: xpeditis_test
|
|
POSTGRES_PASSWORD: xpeditis_test_password
|
|
POSTGRES_DB: xpeditis_test
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 5s
|
|
--health-timeout 5s
|
|
--health-retries 10
|
|
ports:
|
|
- 5432:5432
|
|
redis:
|
|
image: redis:7-alpine
|
|
options: >-
|
|
--health-cmd "redis-cli ping"
|
|
--health-interval 5s
|
|
--health-timeout 5s
|
|
--health-retries 10
|
|
ports:
|
|
- 6379:6379
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: ${{ env.NODE_VERSION }}
|
|
cache: 'npm'
|
|
cache-dependency-path: apps/backend/package-lock.json
|
|
- run: npm install --legacy-peer-deps
|
|
- name: Run integration tests
|
|
env:
|
|
NODE_ENV: test
|
|
DATABASE_HOST: localhost
|
|
DATABASE_PORT: 5432
|
|
DATABASE_USER: xpeditis_test
|
|
DATABASE_PASSWORD: xpeditis_test_password
|
|
DATABASE_NAME: xpeditis_test
|
|
DATABASE_SYNCHRONIZE: 'false'
|
|
REDIS_HOST: localhost
|
|
REDIS_PORT: 6379
|
|
REDIS_PASSWORD: ''
|
|
JWT_SECRET: test-secret-key-ci
|
|
SMTP_HOST: localhost
|
|
SMTP_PORT: 1025
|
|
SMTP_FROM: test@xpeditis.com
|
|
run: npm run test:integration -- --passWithNoTests
|