Test, build and the Pixi tasks
pixi run -e bun bun run test # source tests, without coverage gatingpixi run -e bun bun run coverage # Python and TypeScript coverage checkspixi run -e bun bun run buildpixi run -e bun typecheckRoot build, test, and coverage scripts delegate to Turbo. Tests run from source and do not depend on builds. Coverage has separate 90% checks for qgis-sdk-python and qgis-sdk-typescript, with repository-root-relative LCOV reports for Codecov. In CI, Linux coverage runs on its own runner in parallel with the other Linux checks; the checks status requires both jobs to succeed. Each job restores its own environments and artifacts, trading extra runner setup for a shorter critical path.
| Task | Command | Purpose |
|---|---|---|
| Test | pixi run -e bun bun run test |
Source tests, no coverage gate |
| Coverage | pixi run -e bun bun run coverage |
Separate 90% Python/TypeScript coverage gates |
| Build | pixi run -e bun bun run build |
Build workspace packages |
| Typecheck | pixi run -e bun typecheck |
TypeScript bridge typecheck |
| Lint Python | pixi run lint-python |
Ruff lint across the whole checkout |
| Format check Python | pixi run format-python-check |
Ruff format check across the whole checkout |
| Repository policy | pixi run lint-repository |
Alint rules in .alint.yml |
| Test repository policy | pixi run test-alint-policy |
Exercise the actual Alint rules against isolated passing and failing trees |
| Docs site | pixi run -e bun docs-build |
The bridge, the Storybook and the Astro site into apps/docs/dist |
| Docs links | pixi run -e bun docs-link-check |
Builds, then checks every internal link and fragment of the site |
| Docs dev | pixi run -e bun docs-dev |
The site from source with reload on 0.0.0.0:4321 |
The Alint policy requires the root README and license, byte-identical scoped and alias READMEs with the alias installation commands, immutable external GitHub Actions and container references, and no merge-conflict markers or bidirectional override controls in non-ignored files. The README mirror rules also run with pixi run -e default test-release-tool, alongside the remaining README-shape tests. Alint complements Ruff, Biome, actionlint, typechecking, generated-file checks and the built-site link checker; it does not replace them. CI runs the policy and its fixture tests, subject to the existing workflow path filters.
The bridge freshness gate regenerates the registered sample and host TypeScript outputs and checks Git status across the bridge package. It also reports, without deleting, .ts files in the sample-client and host output directories whose generator and source headers identify those outputs but whose paths are no longer registered. Files with other or missing headers and files outside those directories are not treated as orphans. To retire or rename an output, remove the old file explicitly; use python packages/qgis-sdk-python/scripts/generate_bridge_clients.py --check for a non-writing byte and orphan check. The reference plugin schema and QGIS Processing snapshot retain their separate checks.
Keep Python development tools in packages/qgis-sdk-python/pyproject.toml’s dev extra; Pixi installs that local extra through the Python feature. Keep direct Pixi dependency versions exactly pinned in pixi.toml and refresh pixi.lock when they change. Python build tooling and Twine stay in the Pixi Python feature; Bun remains in its separate environment.