Files
anki/justfile

150 lines
4.3 KiB
Makefile

set windows-shell := ["cmd.exe", "/c"]
mod release
# Show available commands
default:
@just --list
# Build the project
build:
{{ ninja }} pylib qt
# Build wheels (needed for some platforms)
wheels:
{{ ninja }} wheels
# Build and run all checks (lint + test) - lets ninja handle dependencies
check:
{{ ninja }} pylib qt check
# Run all tests (Rust, Python, TypeScript). Pass --coverage to enforce coverage, and --html to include HTML reports.
[arg("coverage", long="coverage", value="--coverage")]
[arg("html", long="html", value="--html")]
test coverage='' html='':
just {{ if coverage == "--coverage" { "coverage " + html } else { "_test" } }}
# Run coverage for all test stacks. Pass --html to also generate HTML reports.
[arg("html", long="html", value="--html")]
coverage html='':
just _coverage-rust {{ html }}
just _coverage-py {{ html }}
just _coverage-ts {{ html }}
# Run Rust tests. Pass --coverage to enforce Rust coverage, and --html to include an HTML report.
[arg("coverage", long="coverage", value="--coverage")]
[arg("html", long="html", value="--html")]
test-rust coverage='' html='':
just {{ if coverage == "--coverage" { "_coverage-rust " + html } else { "_test-rust" } }}
# Run Python tests (pylib + qt). Pass --coverage to enforce coverage, and --html to include HTML reports.
[arg("coverage", long="coverage", value="--coverage")]
[arg("html", long="html", value="--html")]
test-py coverage='' html='':
just {{ if coverage == "--coverage" { "_coverage-py " + html } else { "_test-py" } }}
# Run TypeScript/Svelte Vitest tests. Pass --coverage to enforce coverage, and --html to include an HTML report.
[arg("coverage", long="coverage", value="--coverage")]
[arg("html", long="html", value="--html")]
test-ts coverage='' html='':
just {{ if coverage == "--coverage" { "_coverage-ts " + html } else { "_test-ts" } }}
[private]
_test:
{{ ninja }} check:rust_test check:pytest check:vitest
[private]
_test-rust:
{{ ninja }} check:rust_test
[private]
_test-py:
{{ ninja }} check:pytest
[private]
_test-ts:
{{ ninja }} check:vitest
[private]
_coverage-rust html='':
{{ if os_family() == "windows" { "tools\\coverage\\coverage-rust" } else { "tools/coverage/coverage-rust" } }} {{ html }}
[private]
_coverage-py html='':
{{ ninja }} pylib qt
just _coverage-py-pylib {{ html }}
just _coverage-py-qt {{ html }}
[private]
_coverage-py-pylib html='':
{{ if os_family() == "windows" { "tools\\coverage\\coverage-py" } else { "tools/coverage/coverage-py" } }} pylib {{ html }}
[private]
_coverage-py-qt html='':
{{ if os_family() == "windows" { "tools\\coverage\\coverage-py" } else { "tools/coverage/coverage-py" } }} qt {{ html }}
[private]
_coverage-ts html='':
{{ ninja }} node_modules ts:generated
{{ if os_family() == "windows" { "tools\\coverage\\coverage-ts" } else { "tools/coverage/coverage-ts" } }} {{ html }}
# Check formatting (fast, no build needed)
fmt:
{{ ninja }} check:format
# Fix formatting
fix-fmt:
{{ ninja }} format
# Run linting and type checking (requires build outputs)
lint:
{{ ninja }} \
check:clippy \
check:mypy \
check:ruff \
check:eslint \
check:svelte \
check:typescript
# Fix auto-fixable lint issues (ruff + eslint)
fix-lint:
{{ ninja }} fix:ruff fix:eslint
# Run minilints (copyright, contributors, licenses)
minilints:
{{ ninja }} check:minilints
# Fix minilints (update licenses.json)
fix-minilints:
{{ ninja }} fix:minilints
# Sync translation files
ftl-sync:
{{ ninja }} ftl-sync
# Deprecate translation strings
ftl-deprecate:
{{ ninja }} ftl-deprecate
# Build documentation site
docs:
uv run --group docs sphinx-build -b html docs out/docs/html
@echo "Docs built at out/docs/html/index.html"
# Build and serve documentation site
docs-serve:
uv run --group docs sphinx-autobuild docs out/docs/html --host 127.0.0.1 --port 8000
# Build Rust API docs
docs-rust:
cargo doc --open
# Dispatch CI workflow on a given branch or tag
ci branch:
gh workflow run ci.yml --ref {{ branch }}
# Helpers to get the right commands for the platform
ninja := if os() == "windows" { "tools\\ninja" } else { "./ninja" }
yarn := if os() == "windows" { "out\\extracted\\node\\yarn.cmd" } else { "out/extracted/node/bin/yarn" }