32 lines
1.6 KiB
Markdown
32 lines
1.6 KiB
Markdown
# AareDAQ project notes
|
|
|
|
## CI gates — run locally BEFORE every commit/push
|
|
|
|
CI enforces more than `ruff check` + green tests. Two extra gates diff
|
|
against `origin/main`, so they fail on changed lines that a plain lint or
|
|
full-suite pass never inspects (`git fetch origin main` first):
|
|
|
|
1. `uv run ruff check` and `uv run ruff format --check`
|
|
2. Typecheck the diff (part of the lint job; ONE new basedpyright
|
|
violation on a changed line fails CI):
|
|
`uv run diff-quality --violations=basedpyright --fail-under=100 --compare-branch=origin/main`
|
|
3. Diff coverage >= 80% (coverage-analysis job):
|
|
`QT_QPA_PLATFORM=offscreen uv run pytest --cov=aare --cov-config=./pyproject.toml --cov-branch --cov-report=xml --no-cov-on-fail ./tests/unit`
|
|
`uv run diff-cover coverage.xml --compare-branch=origin/main --fail-under=80`
|
|
|
|
A pre-push hook in the shared `.git/hooks` runs all of the above; bypass
|
|
only deliberately with `git push --no-verify`.
|
|
|
|
Gotchas learned the hard way:
|
|
- The `diff-quality` basedpyright plugin is an editable install from
|
|
`~/repos/aare_suite/diff_quality_basedpyright` (gitea
|
|
mx/diff_quality_basedpyright). On ModuleNotFoundError reinstall with
|
|
`uv pip install -e ~/repos/aare_suite/diff_quality_basedpyright`.
|
|
- basedpyright rejects lazily created instance attributes — initialize in
|
|
`__init__`, no `hasattr` patterns.
|
|
- Every new branch needs a test that executes it or diff coverage sinks.
|
|
- Run GUI tests with `QT_QPA_PLATFORM=offscreen`; a blocking popup (e.g. a
|
|
real `QMenu.exec()`) otherwise freezes the suite on macOS. PySide method
|
|
lookup ignores class-attribute monkeypatches — patch by swapping in a
|
|
Python subclass instead.
|