Skip to content

Add branded end-of-session PDF export #45

Add branded end-of-session PDF export

Add branded end-of-session PDF export #45

name: CI Infrastructure
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
jobs:
ci-checks:
runs-on: ubuntu-latest
timeout-minutes: 15
env:
VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }}
VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_SUPABASE_ANON_KEY }}
E2E_TEST_EMAIL: ${{ secrets.E2E_TEST_EMAIL }}
E2E_TEST_PASSWORD: ${{ secrets.E2E_TEST_PASSWORD }}
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Check required Supabase client and smoke-test env vars
run: |
test -n "$VITE_SUPABASE_URL"
test -n "$VITE_SUPABASE_ANON_KEY"
test -n "$E2E_TEST_EMAIL"
test -n "$E2E_TEST_PASSWORD"
- name: Smoke-test Supabase client startup and runtime config
run: |
node --input-type=module -e "import { createServer } from 'vite'; const server = await createServer({ server: { middlewareMode: true }, optimizeDeps: { noDiscovery: true } }); try { await server.ssrLoadModule('/services/supabaseClient.ts'); console.log('Supabase client startup smoke test passed'); } finally { await server.close(); }"
- name: Run client-visible database contract smoke check
run: npm run check:db-contract
- name: Type-check app and tests
run: npm run typecheck
- name: Run unit tests
run: npm run test:run
- name: Build production bundle
run: npm run build
- name: Install Playwright browser dependencies
run: npx playwright install --with-deps chromium
- name: Run browser smoke tests against live Supabase data
run: npm run test:e2e