Skip to content

Merge pull request #219 from jhayniffy/feat/fail-fast-env-validation #2

Merge pull request #219 from jhayniffy/feat/fail-fast-env-validation

Merge pull request #219 from jhayniffy/feat/fail-fast-env-validation #2

Workflow file for this run

name: CI
on:
push:
branches: [main, dev]
pull_request:
branches: [main, dev]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
name: Test
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16-alpine
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: vatix
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
redis:
image: redis:7-alpine
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v3
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Generate Prisma Client
run: pnpm prisma:generate
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/vatix
- name: Validate migrations
run: pnpm prisma:validate
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/vatix
- name: Run migrations
run: pnpm prisma:migrate deploy
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/vatix
- name: Run unit tests
run: pnpm test:run
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/vatix
REDIS_URL: redis://localhost:6379
NODE_ENV: test
- name: Run integration tests
run: pnpm test:integration
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/vatix
REDIS_URL: redis://localhost:6379
NODE_ENV: test
- name: Run tests with coverage
run: pnpm test:coverage --reporter=verbose --outputFile=test-results/results.json
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/vatix
REDIS_URL: redis://localhost:6379
NODE_ENV: test
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
path: test-results/
retention-days: 7
- name: Upload coverage reports
uses: actions/upload-artifact@v4
if: always()
with:
name: coverage-report
path: coverage/
retention-days: 7
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
if: always()
with:
files: ./coverage/coverage-final.json
flags: unittests
name: codecov-umbrella
fail_ci_if_error: false
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v3
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Generate Prisma Client
run: pnpm exec prisma generate
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/vatix
- name: Check code formatting
run: pnpm format:check
- name: Check TypeScript
run: pnpm tsc --noEmit
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v3
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Generate Prisma Client
run: pnpm prisma:generate
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/vatix
- name: Build
run: pnpm build