Test and check#
make ci
This runs every check GitHub runs on a pull request: formatting, lint, type checks, the Python
tests, the website’s own checks, a production build, and the browser tests. make fmt fixes
formatting for you.
Check |
Command |
What it covers |
|---|---|---|
Formatting |
|
Python (ruff) and the website (oxfmt). |
Lint |
|
Python and website code style. |
Types |
|
Python types (pyrefly). Fails only on new errors; known ones are listed in |
Python tests |
|
Starts a real API with a fresh database for each test, so no separate Postgres is needed. |
Website checks |
|
Astro type checks, the end-to-end tests’ own types, and the website’s unit tests. |
Browser tests |
|
See below. |
Browser tests#
make web-e2e-install # once, to download the browsers
make web-e2e
This opens every page in desktop Chrome, on a simulated iPhone, an Android phone and a 320px
phone. The API is faked from website/e2e/data.ts, so these tests check layout and behaviour,
not real data. A test fails if a page scrolls sideways, falls off the screen, doesn’t load, or
logs an error.
Read the results with:
npx playwright show-report
run from website/. It opens a report with screenshots for anything that failed.
A new page needs an entry in PAGES in website/e2e/layout.spec.ts. A new API call the page
makes needs a matching handler in website/e2e/fixtures.ts; an unhandled call fails the test.
Type check baseline#
Type checks only fail on errors that aren’t already known. After you fix some of the known errors, record the smaller baseline:
make type-baseline
Database migrations#
make migration MSG="add away dates" writes a new migration from your model changes; make migrate applies it. See How it works for why a migration also has to work with the code
that was running before it.