Commands Cheatsheet¶
Taskfile.yaml only keeps targets that compose multiple commands,
inject environment variables, or encode a non-obvious default.
Everything else is a direct call into a third-party CLI — listed below
so a forker can run the underlying command without learning a Task
target that merely renamed it.
All uv run commands assume you are at the repo root.
Linting + formatting¶
uv run ruff check . # lint
uv run ruff check . --fix # lint + auto-fix
uv run ruff format . # format in place
uv run ruff format --check . # format check (no write)
uv run mypy . --ignore-missing-imports
task ci composes all four gates plus pytest + secret scan.
Testing¶
uv run pytest # full suite
uv run pytest -m unit # unit tests only
uv run pytest -m integration # integration tests
uv run pytest -m e2e # end-to-end tests
uv run pytest --cov=. --cov-report=html
Test markers are defined in pyproject.toml under [tool.pytest.ini_options].
SQLMesh¶
Run from transforms/main/ — SQLMesh picks up config.py there.
Logs land in .logs/sqlmesh/ via the local transforms/main/logs
symlink (gitignored; created by task install).
cd transforms/main
uv run sqlmesh plan --auto-apply # plan + apply changes
uv run sqlmesh run # run scheduled models
uv run sqlmesh test # run SQLMesh unit tests
uv run sqlmesh ui # start SQLMesh UI
uv run sqlmesh plan dev # plan into dev env
Dagster (beyond dagster:dev / full-refresh / verify)¶
export DAGSTER_HOME="$PWD/.dagster"
export PYTHONPATH="$PWD"
uv run dagster asset materialize --select <key> \
-f packages/databox/databox/orchestration/definitions.py
uv run dagster asset wipe --all \
-f packages/databox/databox/orchestration/definitions.py
Pre-commit¶
uv run pre-commit run --all-files # run every hook across every file
uv run pre-commit run ruff # run one hook
Secret scan¶
python scripts/check_secrets.py # scan repo root
python scripts/check_secrets.py path/to/file.py
Source layout + staging codegen¶
python scripts/check_source_layout.py # lint per-source directory layout
python scripts/generate_staging.py # regenerate trivial-rename stg_* SQL
python scripts/generate_staging.py --check # fail on drift (also runs in task ci)
Watching¶
Task's built-in watch mode works without a dedicated target:
task -w ci # re-run ci on file change