Enhance backend and CI configurations; introduce environment management #32
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
# Trigger on PRs and pushes to main | |
on: | |
pull_request: | |
branches: [main] | |
push: | |
branches: [main] | |
paths-ignore: | |
- "**.md" | |
- ".github/*.md" | |
- "docs/**" | |
- "LICENSE" | |
# Prevent multiple concurrent runs of the same workflow | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
# Define permissions needed for the workflow | |
permissions: | |
contents: read | |
pull-requests: write | |
checks: write | |
id-token: write # Needed for codecov | |
jobs: | |
validate: | |
name: Validate | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
node-version: [20] | |
fail-fast: false | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup environment | |
uses: ./.github/actions/prepare | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: | | |
**/node_modules | |
~/.pnpm-store | |
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm- | |
- name: Type check | |
run: pnpm tsc | |
- name: Lint Backend | |
run: pnpm lint:backend | |
- name: Lint Frontend | |
run: pnpm lint:frontend | |
- name: Check formatting | |
run: pnpm format --check | |
- name: Check dependencies (Knip) | |
run: pnpm lint:knip || true # Allow warnings for now | |
test: | |
name: Test | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
node-version: [20] | |
fail-fast: false | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup environment | |
uses: ./.github/actions/prepare | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: | | |
**/node_modules | |
~/.pnpm-store | |
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm- | |
- name: Run tests | |
run: pnpm test --coverage | |
- name: Upload coverage | |
uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
fail_ci_if_error: true | |
build: | |
name: Build | |
runs-on: ubuntu-latest | |
needs: [validate, test] | |
strategy: | |
matrix: | |
node-version: [20] | |
fail-fast: false | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup environment | |
uses: ./.github/actions/prepare | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: | | |
**/node_modules | |
~/.pnpm-store | |
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm- | |
- name: Build applications | |
run: pnpm build | |
- name: Test backend build | |
run: NODE_ENV=production node apps/backend/dist/index.js |