Skip to content

Test, build and the Pixi tasks

Terminal window
pixi run -e bun bun run test # source tests, without coverage gating
pixi run -e bun bun run coverage # Python and TypeScript coverage checks
pixi run -e bun bun run build
pixi run -e bun typecheck

Root 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.