ci: run the build-and-test workflow on master - #39
Conversation
ci.yml watched `main` and `develop`. Neither exists:
$ gh api repos/embeddedos-org/eAI -q .default_branch
master
$ gh api repos/embeddedos-org/eAI/branches/main
404 Branch not found
So every push to master and every pull request against it — they all target
master — fell outside the trigger. The last run was 2026-05-31, and the
pattern shows what happened:
2026-05-31 branch=v1.9.0 failure
2026-05-28 branch=v1.5.0 failure
2026-05-27 branch=main failure
2026-05-27 branch=main success
main existed until late May, the workflow ran on it, the branch was renamed
to master, and the workflow was left pointing at a branch that had gone. The
runs after that are tag pushes, which still match tags: ["v*"], and all
three failed.
ci.yml is the only workflow here that compiles the C, runs pytest and
cross-builds for ARM:
jobs:
test-c:
test-python:
build-arm:
release:
Five other workflows do watch master and have kept running — codeql,
book-build, video-build, deploy-pages, scorecard — so the repository has not
been silent. But none of them is a test gate. codeql builds, as input to
static analysis, not to check the build.
master is added rather than substituted, so a later rename in either
direction does not break this again.
Expect the first run to be red. The last three were, and three months of
changes have landed unverified since; finding that out is the point.
Refs #38
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
CI is running again, and it found something within a minute. Results on this PR: So the C side is healthy and the Python suite cannot collect at all: numpy is declared nowhere — no pip install -r requirements.txt 2>/dev/null || trueThe file does not exist, and This red is the point of the PR, not a regression from it. The failure has If you would rather land a green The same change is now open on the five sibling repositories with the identical |
|
Correction to my comment above, prompted by #41. I reported
and the old invocation ended in So this repository had a green C/C++ badge over a suite that was never compiled — Restoring the trigger here made the job run. #41 makes it mean something, by The two changes are complementary and neither is sufficient alone: without this The rest of my comment stands — Python Tests fails on an undeclared |
ci.yml watched `main` and `develop`. Neither exists — this repository's default branch is `master`, so every push to it and every pull request against it fell outside the trigger. Last run of ci.yml: 2026-05-31. A repository-wide rename from main to master in late May left the workflow pointing at a branch that had gone, and nothing has built or tested a change here since. master is added rather than substituted, on both push and pull_request, so a rename in either direction does not break this again. Expect the first run to be red. Three months of changes have landed unverified; finding that out is the point. Same fix as embeddedos-org/eAI#39, where it is verified to work: the PR went from a single skipped `assign` job to `C/C++ Tests` and `Python Tests` actually running. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
ci.yml watched `main` and `develop`. Neither exists — this repository's default branch is `master`, so every push to it and every pull request against it fell outside the trigger. Last run of ci.yml: 2026-08-28. A repository-wide rename from main to master in late May left the workflow pointing at a branch that had gone, and nothing has built or tested a change here since. master is added rather than substituted, on both push and pull_request, so a rename in either direction does not break this again. Expect the first run to be red. Three months of changes have landed unverified; finding that out is the point. Same fix as embeddedos-org/eAI#39, where it is verified to work: the PR went from a single skipped `assign` job to `C/C++ Tests` and `Python Tests` actually running. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
srpatcha
left a comment
There was a problem hiding this comment.
Review — eAI#39 "ci: run the build-and-test workflow on master"
head: 9dbf01a author: srpatcha ci: fail (Python Tests)
Verdict: Two-line trigger repair, correct and evidenced; it conforms. One thing has
changed under it since the discussion above, and one fake-green survives the merge.
Findings
| # | Severity | File:line | Finding | Recommended fix |
|---|---|---|---|---|
| 1 | Medium | .github/workflows/ci.yml:62-67 (master) |
After this merges, the workflow finally fires — and build-arm is still fully suppressed: cmake ... 2>/dev/null || true twice, then an unconditional echo "ARM build complete" > dist/build.txt. It also names cmake/arm-cortex-m4.cmake, which does not exist (the repo has cmake/toolchain-arm-cortex-m4.cmake and cmake/toolchains/toolchain-arm-cortex-m4.cmake). The job cannot fail and uploads a marker asserting a build that never happened. |
Land #41's ARM hunk with this, or immediately after. Not a change to make inside this PR. |
| 2 | Low | PR body, "The change" | YAML validated. is the one claim here with no command output behind it. Everything else in the body is backed; this line is not. |
Quote the validator invocation, or drop the claim. |
Correction to the record, not a finding
The second comment on this PR reports that -DBUILD_TESTS=ON and the trailing || true
still make the C/C++ badge meaningless. That half is already on master — commit
abd678b (merge of #33, chore/audit-and-ci). Current origin/master:.github/workflows/ci.yml
reads:
-DEAI_BUILD_TESTS=ON
cmake --build build --parallel $(nproc)
# No `|| true`: a failing test must fail the job. --no-tests=error
# catches an empty test set, which ctest otherwise reports as success.
cd build && ctest --output-on-failure --no-tests=errorThe C/C++ Tests pass 32s in this PR's checks.txt came from the old recipe, because
the PR head branches from 21d8b0a. So the first honest master run after this merges
will use the already-fixed C recipe — the guard is in place, and #41's remaining value is
the ARM half (finding 1), not the C half.
master's on: block is still branches: [main, develop] / pull_request: [main], so
this PR is still needed and still correct, and gh reports it MERGEABLE.
CI state
Python Tests fail (12s) — ModuleNotFoundError: numpy, tracked as #40 and already
argued out above; not repeated here. Cross-compile ARM Cortex-M4 and Create GitHub Release skip behind it. Analyze (python), C/C++ Tests, assign pass.
mergeStateStatus: BLOCKED follows from the red required check.
Architecture conformance
Conforms. Master design §21 places eAI in Tier 3 (Advanced); a CI trigger list is
Infrastructure inside the owning repo, which is where §21.1 wants it. No dependency
edge is added, so §5.1 is untouched — nothing here makes a lower tier reference a higher
one.
Proposed changes
None to this diff. Merge order that keeps each step honest:
- This PR — the workflow starts firing on
master. - #41 rebased to its ARM hunk only —
build-armstops reporting success for a build it
did not do. - #40 —
numpydeclared,Python Testsgoes green for a real reason.
Not checked
- I did not run the workflow. CI state is read from the bundle's
checks.txtonly. prepare-run.shproduced an emptydiff.patchfor this bundle;gh pr diffin the
bundler swallows its own errors with2>/dev/null. The diff reviewed here was
re-fetched by hand. Worth fixing in the tooling — an empty diff currently looks like
"no changes" rather than "fetch failed".- I did not verify the five sibling repos in the body's table.
Automated architecture review of 9dbf01a08c4a — scheduled, model claude-opus-5, checked against the EmbeddedOS Master Design v2.0. Advisory only: this reviewer never approves, requests changes, or merges. Reply here to discuss or push back — a wrong finding is a bug worth reporting.
Closes #38.
ci.ymlwatchedmainanddevelop. Neither exists:Every push to
masterand every pull request against it falls outside thetrigger. The last run was 2026-05-31, and the history shows what happened:
mainexisted until late May, the workflow ran on it, the branch was renamed tomaster, and the workflow was left pointing at a branch that had gone. The runsafter that are tag pushes, which still match
tags: ["v*"]— and all threefailed.
What this does and does not claim
ci.ymlis the only workflow here that compiles the C, runs pytest, andcross-builds for ARM:
Five other workflows do watch
masterand have kept running —codeql,book-build,video-build,deploy-pages,scorecard— so the repository hasnot been silent, and I overstated that in the issue before correcting it.
codeqleven has a build step, but as input to static analysis rather than as atest gate.
The accurate statement: code-quality and docs pipelines are alive, and the
build-and-test pipeline has been dead since May.
The change
masteris added rather than substituted, on bothpushandpull_request, so a rename in either direction does not break this again. YAMLvalidated.
Expect the first run to be red
The last three runs failed and three months of changes have landed unverified
since. That is the point of turning it back on, and it should not be read as a
regression from this PR.
Not confined to this repository
Same pattern in five others — default branch
master,ci.ymlwatching[main, develop]:[main, develop][main, develop][main, develop][main, develop][main, develop][main, develop]eApps is the one that got it right —
[main, master, develop].I will open the same change against the others once this shape is agreed, rather
than raising six PRs on an approach nobody has looked at yet.
This is the third hardcoded-name failure found this week, after ebuild#81
(
"branch": "main"for repositories whose default ismaster) and EoSim#16(a lowercase repo list finding 2 of 19 on a case-sensitive filesystem).