Install it on a machine that has nothing, nightly - #11
Merged
Merged
Conversation
CI runs on a machine that has everything: a compiler, a linker, a CMake an action put there, a Rust toolchain, and whatever the last job left in a cache. The install job it already had installs into a prefix and builds cmake/consumer against it, which is worth having and is still not what a user does, because the whole thing happens inside a checkout on a runner where every tool is already present. So this installs it the way a person with nothing gets it, in a container holding a compiler and nothing else, every night rather than on every push, because what breaks an install is usually somebody else's release and not a commit here. Three rows. A gcc image given cmake, which is most of the people who would install this. A bare debian given a compiler and cmake, which is the row where the absent list means something because every tool on it had to be named. And a bare debian with no cmake on it at all, which is the only honest way to check the claim the README makes for a project that would rather not use CMake: the wrapper is header only, so it needs the include path and nothing else. What each row does is install the wrapper, take both programs off the README, build them against the install, run each in a directory of its own since both write social.zu1 beside themselves, and diff what they print against the block under them on the page. The C program is there because it needs nothing out of this repository, which is the point: it says the SDK a user was handed is enough on its own. The image is checked rather than believed. The day a base image starts shipping a Rust toolchain is the day this job quietly stops being about anything, so the absent list is asserted, and so is the absence of a zu.h, a zu.hpp, a libzu and a pkg-config entry for one. And it is run again with a piece taken out of the install, which is the half a job like this usually leaves out. A job that only ever passes is a job nobody has seen fail. Take the header out and the build has to stop; take the CMake package out and find_package has to stop; take the engine out and the link has to stop. If any of them still worked, the compiler found something on the image and every pass meant nothing. The engine arrives as an SDK laid out on disk, since there is no release yet, in the layout ZU_ROOT documents and a release archive unpacks to. Checked on a Linux box with docker: three rows green, and all eight break runs failing, each for the reason it was supposed to. The header one fails at "#include <zu.hpp>", which is the message a user would get.
tamnd
added a commit
to tamnd/zu
that referenced
this pull request
Aug 23, 2026
tamnd/zu-c#11 installs the kit in a container holding a compiler and nothing else, nightly, and runs both programs off the README against what it installed. Three rows, and the third is the one worth having: a machine with no CMake on it at all, which is the only honest way to check the claim that a header-only wrapper needs the include path and nothing else. Each row runs again with a piece taken out of the install, after the install rather than out of the source. Without the header the compile has to fail, without the CMake package find_package has to fail, without the engine the link has to fail. A build that still worked would be a build that found something on the image, and every pass would have meant nothing. Practice goes 78 to 89 over a denominator of 90. stability is the last item on the card and it is the one that keeps zu-c off the threshold.
22 tasks
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
installitem on zu-c's scorecard: a clean-machine install test, nightly, in a container holding the language runtime and nothing else.CI runs on a machine that has everything. The
installjob this repository already had installs into a prefix and buildscmake/consumeragainst it, which is worth having and is still not what a user does: the whole thing happens inside a checkout on a runner where every tool is already present, so it cannot tell you whether the install is self-sufficient.The rows
gcc:15-bookwormfind_package(zu-cpp)debian:13-slimfind_package(zu-cpp)debian:13-slim-lThe third row is the only honest way to check the claim the README makes for a project that would rather not use CMake, because it is on an image with no CMake on it at all.
Each row installs the wrapper, takes both programs off the README, builds them against the install, runs each in a directory of its own since both write
social.zu1beside themselves, and diffs what they print against the block under them on the page. The C program is in there because it needs nothing out of this repository, which is the point: it says the SDK a user was handed is enough on its own.The image is checked rather than believed. The day a base image starts shipping a Rust toolchain is the day this job quietly stops being about anything, so the absent list is asserted, and so is the absence of a
zu.h, azu.hpp, alibzuand a pkg-config entry for one.The half that is usually left out
A job that only ever passes is a job nobody has seen fail. So each row runs again with a piece taken out of the install, after the install rather than out of the source, and the build has to stop:
zu.hppin the prefix, the compile has to failfind_packagehas to failIf any of them still worked, the compiler found something on the image and every pass above meant nothing.
Checked
On a Linux box with docker rather than reasoned about. Three rows green, all eight break runs failing, each for the reason it was supposed to:
And the header break fails at
#include <zu.hpp>, which is the message a user would get.The engine arrives as an SDK laid out on disk, since there is no release yet, in the layout
ZU_ROOTdocuments and a release archive unpacks to. What that leaves out is the download and the signature, and those arrive on the day the first tag does.