Repository navigation
The unit design gate could not fail, and the release found out - #6
Merged
Merged
Conversation
The v0.1.1 release build failed in Doxygen, on sources that CI had just passed. Two defects, and the second is the one worth reading. **A bare \dot in prose.** 00-mainpage.dox describes where the diagrams come from and wrote the directive literally. Ubuntu's doxygen 1.9 reads that as the START of a dot block and then hits end of file looking for the end of it; 1.18, which is what I had locally, does not. So the same sources passed here and failed on the runner. Escaped as @c \\dot, which is the convention the rest of that file already uses for \implements and \param, and udd.sh now prints the doxygen version, because a log that does not name the tool cannot show a version difference. **The CI gate could not fail.** The step ran `tools/udd.sh | tee udd.log`, and GitHub runs these steps with `bash -e` and NOT pipefail, so the pipeline reported tee's exit status and swallowed the script's. Every Doxygen failure this job existed to catch was invisible to it, for as long as it has existed. The release workflow runs udd.sh without a pipe, which is the only reason this was found at all. Measured rather than assumed: with a deliberate broken block in the sources, `set -o pipefail; tools/udd.sh | tee` exits 1 and `tools/udd.sh | tee` exits 0. This is the same mistake as the `|| true` that hid the QEMU job failing three different ways. A gate that cannot fail is worse than no gate, because it gets counted as evidence -- and this one was counted in a release note.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
v0.1.1release build failed in Doxygen, on sources CI had just passed. Two defects.A bare
\dotin prose.00-mainpage.doxdescribes where the diagrams come from and wrote the directive literally. Ubuntu's doxygen 1.9 reads that as the start of a dot block and then hits end of file looking for the end of it; 1.18, which I had locally, does not. Escaped as@c \\dot, the convention that file already uses for\implementsand\param, andudd.shnow prints the doxygen version — a log that does not name the tool cannot show a version difference.The CI gate could not fail. The step ran
tools/udd.sh | tee udd.log, and GitHub runs these steps withbash -eand not pipefail, so the pipeline reportedtee's exit status and swallowed the script's. Every Doxygen failure this job existed to catch was invisible to it, for as long as it has existed. The release workflow runsudd.shwithout a pipe, which is the only reason this surfaced.Measured, not assumed — with a deliberate broken block in the sources:
Same mistake as the
|| truethat hid the QEMU job failing three different ways. A gate that cannot fail is worse than no gate, because it gets counted as evidence — and this one was counted in a release note.Consequence for v0.1.1
The tag exists and its release build failed, so no release was published. The tag points at a commit whose
00-mainpage.doxstill has the bare\dot, so re-running the release workflow against it fails again: the fix has to be in the tagged tree. Once this merges, eitherv0.1.1is deleted and re-cut on the fixed commit, or it stays as a tag with no release andv0.1.2is the first published one.