Finding
server has two CI workflows: .github/workflows/build.yml (BuildStream image build + release) and .github/workflows/docs-checks.yml. Neither runs a test suite.
Three open PRs add test code that no workflow would execute:
So the tests run only when a human remembers to invoke them locally. A PR that breaks .github/scripts/docs-checks.py, files/bin/system-container, or files/installer/repart.d/ would still show all-green checks. build.yml is the only gate and it is a 180-minute image build — far too slow to serve as the fast feedback loop these unit tests are meant to provide.
There is also no runner for BATS at all: #30's recipe is pytest-only, so #38's .bats file has no entry point even locally.
Recommendation
Add .github/workflows/unit-tests.yml, gated on pull_request + push: [main], with permissions: contents: read:
actions/checkout (SHA-pinned, matching build.yml's style)
- install
bats and pytest
- run
python3 -m pytest tests/unit -q
- run
bats tests/unit (or extend the Justfile test-unit recipe to run both, and have CI call just test-unit so local and CI paths cannot drift)
Sequencing note: the workflow should land after at least one of #30/#38/#41 merges, otherwise it runs against an empty tests/ tree. Because all three are hold-gated and their merge order is a human decision, this is filed as an issue rather than a PR — the workflow's content depends on which test runners actually exist on main by then.
Priority
- Impact: high — the repo's only PR gate for shell/Python logic would be a 3-hour image build
- Effort: low — one workflow file, roughly 30 lines
Filed by quality agent (hold-gated mode)
🐝 Hive Agent: quality | Instance: hosted-projectbluefin-knuckle-gjvq | SHA: 6fece15
— hive: agent=quality backend=copilot model=claude-opus-5
Finding
serverhas two CI workflows:.github/workflows/build.yml(BuildStream image build + release) and.github/workflows/docs-checks.yml. Neither runs a test suite.Three open PRs add test code that no workflow would execute:
tests/unit/test_docs_checks.py(+ atest-unit: python3 -m pytest tests/unit -qJustfile recipe)tests/unit/system-container_test.batstests/unit/test_repart_layout.pySo the tests run only when a human remembers to invoke them locally. A PR that breaks
.github/scripts/docs-checks.py,files/bin/system-container, orfiles/installer/repart.d/would still show all-green checks.build.ymlis the only gate and it is a 180-minute image build — far too slow to serve as the fast feedback loop these unit tests are meant to provide.There is also no runner for BATS at all: #30's recipe is pytest-only, so #38's
.batsfile has no entry point even locally.Recommendation
Add
.github/workflows/unit-tests.yml, gated onpull_request+push: [main], withpermissions: contents: read:actions/checkout(SHA-pinned, matchingbuild.yml's style)batsandpytestpython3 -m pytest tests/unit -qbats tests/unit(or extend the Justfiletest-unitrecipe to run both, and have CI calljust test-unitso local and CI paths cannot drift)Sequencing note: the workflow should land after at least one of #30/#38/#41 merges, otherwise it runs against an empty
tests/tree. Because all three are hold-gated and their merge order is a human decision, this is filed as an issue rather than a PR — the workflow's content depends on which test runners actually exist onmainby then.Priority
Filed by quality agent (hold-gated mode)
🐝 Hive Agent:
quality| Instance:hosted-projectbluefin-knuckle-gjvq| SHA:6fece15— hive: agent=quality backend=copilot model=claude-opus-5