Skip to content

ci: checks.yml takes the checks, build.yml keeps the artifacts - #3090

Merged
nesbox merged 3 commits into
mainfrom
checks-workflow
Oct 14, 2026
Merged

nesbox merged 3 commits into
mainfrom
checks-workflow

Conversation

@nesbox

@nesbox nesbox commented Oct 14, 2026

Copy link
Copy Markdown
Owner

The checks and the conformance suite were two halves of one idea that had not met. The tree has a rule it wrote down twice — a check does not live where a release can be blocked by it — and the conformance suite, landed 2026-10-09 after the last tag, was riding the release path: release.yml reaches build.yml through workflow_call, so the next tag would have run it, and a broken measurement would have failed a release with nothing to learn from it. This draws the line: one workflow produces artifacts, one holds the checks.

lint.yml becomes checks.yml — the format and tidy jobs as they are, under the name that says what the workflow is for.

The conformance job leaves build.yml for it, as tests — and grows: the sixteen tests cmake/tests.cmake registers now build and run on every pull request, through the one target the file defines (tic80-tests), so a test added there needs no edit to the workflow. ctest runs the suite; the conformance runner keeps its own invocation, because ctest swallows the output of a test that passes, so its table still reaches the job summary. The configuration is unchanged — static runtime, every language, the system layer off, no display, nothing installed beyond the toolchain.

build.yml is the artifact matrix alone — thirteen jobs, its file and its name untouched; the README badge and the nightly links point at it. release.yml is untouched too and reaches build.yml alone, so no release runs a check.

A registered test that fails is a failure; a conformance divergence stays a finding, as its spec says. Nothing else changes — no source file, flag, artifact or API; the one build-system addition is a convenience target that compiles nothing of its own.

Seen locally in the job's configuration: 362 build steps, 15/15 tests through ctest in 5.5 seconds, and the conformance runner exiting 0 with its table over 119 probes.

🤖 Generated with Claude Code

nesbox and others added 3 commits October 14, 2026 17:47
tic80_add_test records every target it registers and tic80-tests depends on
them all, so a test added to the file is built and run without touching the
workflow that builds it. A list in the job would let a new test fall out of
CI silently — the registration is the source of truth for the run side
already, and this makes it one for the build side too.

Co-Authored-By: Claude Code <noreply@anthropic.com>
lint.yml becomes checks.yml, and the conformance job leaves build.yml for it
as the tests job — which now builds the whole suite the build registers and
runs it with ctest, the conformance runner keeping its own invocation so its
table still reaches the job summary. release.yml reaches build.yml alone, so
a release runs the artifacts and no check; the conformance job had drifted
onto the tag path, where a broken measurement could fail a release that has
nothing to learn from it.

Co-Authored-By: Claude Code <noreply@anthropic.com>
The conformance runner's non-zero exit — the one case it has one — skipped
the ctest step under the default success() condition, so the run that broke
a measurement was the one without the other fifteen tests' results. The
step now gates on the build's outcome alone.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@nesbox nesbox self-assigned this Oct 14, 2026
@nesbox
nesbox merged commit 25fbcf5 into main Oct 14, 2026
16 checks passed
@nesbox
nesbox deleted the checks-workflow branch October 14, 2026 18:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant