|
1 | 1 | # Runs build, unit tests, and E2E tests - gates deployment |
2 | | -# @TODO: Push to a preview branch on Vercel, and run the E2E tests on that preview instead of from a dev server |
3 | | -name: CI - Build & Test |
| 2 | +name: Build and Test |
4 | 3 |
|
5 | 4 | on: |
6 | 5 | push: |
| 6 | + branches: |
| 7 | + - main |
7 | 8 | pull_request: |
8 | | - branches: [main] |
| 9 | + branches: |
| 10 | + - main |
9 | 11 |
|
10 | 12 | jobs: |
11 | 13 | build-and-test: |
|
39 | 41 |
|
40 | 42 | steps: |
41 | 43 | - name: Checkout repository |
42 | | - uses: actions/checkout@v6 |
| 44 | + uses: actions/checkout@v4 |
43 | 45 |
|
44 | 46 | - name: Setup Node.js |
45 | 47 | uses: actions/setup-node@v4 |
|
50 | 52 | - name: Install dependencies |
51 | 53 | run: npm ci --legacy-peer-deps |
52 | 54 |
|
53 | | - - name: Run TypeScript check |
| 55 | + - name: Sync Astro types |
| 56 | + run: npm run sync |
| 57 | + |
| 58 | + - name: Run Astro check |
54 | 59 | run: npm run check |
55 | 60 |
|
56 | 61 | - name: Run lint |
|
61 | 66 | # Run vitest with coverage. The built-in 'github-actions' reporter |
62 | 67 | # (configured in vitest.config.ts) will create annotations. |
63 | 68 | # Coverage reporters (json-summary, json) are configured in vitest.config.ts. |
64 | | - npx vitest run --coverage |
| 69 | + npm run test:coverage |
65 | 70 |
|
66 | 71 | - name: Report Coverage |
67 | 72 | uses: davelosert/vitest-coverage-report-action@v2.9.0 |
|
70 | 75 | json-summary-path: './coverage/coverage-summary.json' |
71 | 76 | json-final-path: './coverage/coverage-final.json' |
72 | 77 |
|
73 | | - - name: Build project |
74 | | - run: npm run build |
75 | | - env: |
76 | | - NODE_ENV: production |
77 | | - |
78 | 78 | - name: Install Playwright browsers |
79 | 79 | run: npx playwright install --with-deps |
80 | 80 |
|
@@ -116,11 +116,41 @@ jobs: |
116 | 116 | - name: Apply Supabase migrations |
117 | 117 | run: npm run containers:supabase:db-push |
118 | 118 |
|
| 119 | + - name: Start Astro dev server |
| 120 | + run: | |
| 121 | + npm run dev -- --host 0.0.0.0 > /tmp/astro-dev.log 2>&1 & |
| 122 | + echo $! > /tmp/astro-dev.pid |
| 123 | +
|
| 124 | + - name: Wait for dev server |
| 125 | + run: | |
| 126 | + for attempt in $(seq 1 60); do |
| 127 | + if curl -fsS http://127.0.0.1:4321 >/dev/null; then |
| 128 | + echo "✅ Dev server is responding" |
| 129 | + exit 0 |
| 130 | + fi |
| 131 | + sleep 2 |
| 132 | + done |
| 133 | + echo "❌ Dev server failed to start" >&2 |
| 134 | + if [ -f /tmp/astro-dev.log ]; then |
| 135 | + echo '--- Astro dev server log ---' |
| 136 | + cat /tmp/astro-dev.log |
| 137 | + fi |
| 138 | + exit 1 |
| 139 | +
|
119 | 140 | - name: Run Playwright E2E tests |
120 | 141 | run: npx playwright test |
121 | 142 | env: |
122 | 143 | CI: "1" |
123 | 144 | FORCE_COLOR: "1" |
| 145 | + E2E_MOCKS: "1" |
| 146 | + |
| 147 | + - name: Stop Astro dev server |
| 148 | + if: always() |
| 149 | + run: | |
| 150 | + if [ -f /tmp/astro-dev.pid ]; then |
| 151 | + kill $(cat /tmp/astro-dev.pid) || true |
| 152 | + rm /tmp/astro-dev.pid |
| 153 | + fi |
124 | 154 |
|
125 | 155 | - name: Upload Playwright report |
126 | 156 | uses: actions/upload-artifact@v4 |
@@ -155,7 +185,7 @@ jobs: |
155 | 185 |
|
156 | 186 | steps: |
157 | 187 | - name: Checkout repository |
158 | | - uses: actions/checkout@v6 |
| 188 | + uses: actions/checkout@v4 |
159 | 189 |
|
160 | 190 | - name: Deploy to Vercel (Preview) |
161 | 191 | uses: amondnet/vercel-action@v41.1.4 |
@@ -201,7 +231,7 @@ jobs: |
201 | 231 |
|
202 | 232 | steps: |
203 | 233 | - name: Checkout repository |
204 | | - uses: actions/checkout@v6 |
| 234 | + uses: actions/checkout@v4 |
205 | 235 |
|
206 | 236 | - name: Deploy to Vercel (Production) |
207 | 237 | uses: amondnet/vercel-action@v41.1.4 |
|
0 commit comments