Skip to content

fix: improve error messages and JWT token refresh #53

fix: improve error messages and JWT token refresh

fix: improve error messages and JWT token refresh #53

Workflow file for this run

# ==============================================================================
# CI Pipeline - Learnix
# Runs on: Pull requests and pushes to main
# Uses reusable workflows for DRY pattern
# ==============================================================================
name: CI
on:
push:
branches: [main]
paths:
- 'apps/web/**'
- 'apps/api/**'
- 'packages/**'
- 'e2e/**'
- 'playwright.config.ts'
- '.github/workflows/ci.yml'
- '.github/workflows/reusable-ci.yml'
- '.github/actions/**'
pull_request:
branches: [main]
paths:
- 'apps/web/**'
- 'apps/api/**'
- 'packages/**'
- 'e2e/**'
- 'playwright.config.ts'
- '.github/workflows/ci.yml'
- '.github/workflows/reusable-ci.yml'
- '.github/actions/**'
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
# ==========================
# Format Check (runs once for whole repo)
# ==========================
format:
name: Format Check
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
with:
working-directory: .
node-version: '24'
- name: Check formatting
run: pnpm exec prettier --check .
# ==========================
# Backend CI
# ==========================
backend:
name: Backend
uses: ./.github/workflows/reusable-ci.yml
with:
project: apps/api
filter: '@repo/api'
test-command: pnpm test
# ==========================
# Frontend CI
# ==========================
frontend:
name: Frontend
uses: ./.github/workflows/reusable-ci.yml
with:
project: apps/web
filter: '@repo/web'
test-command: pnpm test
# ==========================
# E2E Tests (Playwright)
# Runs only on PRs to catch regressions before merge
# ==========================
e2e:
name: E2E Tests
runs-on: ubuntu-latest
needs: [backend, frontend]
if: github.event_name == 'pull_request'
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
with:
working-directory: .
node-version: '24'
- name: Cache Playwright browsers
uses: actions/cache@v4
id: playwright-cache
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
- name: Install Playwright browsers
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: pnpm exec playwright install --with-deps chromium
- name: Install Playwright dependencies only
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: pnpm exec playwright install-deps chromium
- name: Build frontend
run: pnpm --filter @repo/web build
- name: Start frontend preview server
run: |
cd apps/web
pnpm preview --port 5173 &
# Wait for server to be ready
npx wait-on http://localhost:5173 --timeout 30000
- name: Run E2E tests
run: pnpm test:e2e --project=chromium
env:
CI: true
PLAYWRIGHT_BASE_URL: http://localhost:5173
- name: Upload Playwright report
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: playwright-report/
retention-days: 7
- name: Upload test results
if: failure()
uses: actions/upload-artifact@v4
with:
name: test-results
path: test-results/
retention-days: 7
# ==========================
# CI Status Check
# ==========================
ci-status:
name: CI Status
runs-on: ubuntu-latest
needs: [format, backend, frontend, e2e]
if: always()
steps:
- name: Check CI status
run: |
if [[ "${{ needs.format.result }}" == "failure" ]] || \
[[ "${{ needs.backend.result }}" == "failure" ]] || \
[[ "${{ needs.frontend.result }}" == "failure" ]] || \
[[ "${{ needs.e2e.result }}" == "failure" ]]; then
echo "❌ CI failed"
exit 1
fi
echo "✅ All CI checks passed"