2025-09-19 05:02:59 -06:00

100 lines
2.8 KiB
YAML

name: CI
on:
push:
branches:
- main
- master
pull_request:
branches:
- main
- master
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Cache npm
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install dependencies
run: npm install --no-audit --no-fund
- name: Ensure CI dev deps present (fallback)
run: |
# Workaround when package-lock is stale vs package.json
npm i --no-save eslint@^8.57.0 eslint-config-next@14.2.16 @vitest/coverage-v8@^3.2.4 || true
- name: Lint
run: npm run ci:lint
- name: Typecheck
run: npm run ci:typecheck
- name: Unit tests (coverage)
run: npm run ci:test
- name: Build (OpenNext)
run: npm run ci:build
- name: Preview smoke check
shell: bash
run: |
set -euo pipefail
# Start preview via local CLI in background and verify it doesn't crash immediately
npm run preview > preview.log 2>&1 &
PREVIEW_PID=$!
# Give it a moment to start
sleep 5
if ! kill -0 "$PREVIEW_PID" 2>/dev/null; then
echo "Preview process exited prematurely. Logs:" >&2
sed -n '1,200p' preview.log >&2 || true
exit 1
fi
# Cleanly stop the preview
kill "$PREVIEW_PID" || true
wait "$PREVIEW_PID" || true
echo "Preview started successfully (smoke check passed)."
- name: Budgets check
run: npm run ci:budgets
env:
TOTAL_STATIC_MAX_BYTES: ${{ vars.TOTAL_STATIC_MAX_BYTES }}
MAX_ASSET_BYTES: ${{ vars.MAX_ASSET_BYTES }}
- name: Upload budgets report
if: always()
uses: actions/upload-artifact@v4
with:
name: budgets-report
path: .vercel/output/static-budgets-report.txt
- name: D1 migration dry-run (best-effort)
shell: bash
continue-on-error: true
run: |
set -euo pipefail
if [ -f sql/schema.sql ]; then
echo "Attempting D1 migration dry-run (local mode)..."
if npx wrangler d1 execute united-tattoo --local --file=./sql/schema.sql; then
echo "D1 migration dry-run completed successfully."
else
echo "D1 dry-run skipped or failed due to missing local bindings. This is expected until CI bindings are configured." >&2
fi
else
echo "No sql/schema.sql found; skipping D1 dry-run."
fi