Bug #12687

shipping nightly and bldenv is a recipe for flag days

Added by Joshua M. Clulow 2 months ago. Updated 2 months ago.

tools - gate/build tools
Start date:
Due date:
% Done:


Estimated time:
Gerrit CR:


Today, we ship /opt/onbld/bin/nightly and /opt/onbld/bin/bldenv in the developer/build/onbld package. These tools necessarily require a lot of knowledge of the build, as they are responsible for correctly orchestrating it through the environment and the sequence of commands that are executed. As such, any change to these tools can become a flag day between the older shipped version of the tool installed on the build machine, and the version of the tool included in the repository where it can match the rest of the source.

These tools really present two interfaces:

  • upward, to the user: the flags and environment file overrides that the user specifies as input to nightly might be considered if not stable, at least not a good target for capricious change, as both humans and build scripts tend to depend on invoking them a particular way
  • downward, to the Makefile infrastructure and the build itself: nightly sets environment variables in a particular way, and invokes make targets and other commands in the gate source in a particular sequence

The latter interface should be considered totally private, so that we can evolve and improve the build system as a whole. While an apparently correct build may at times result from using a nightly from outside the gate, the only way to be sure is to use the one that matches the rest of the source.

As of #11224, both nightly and bldenv are directly executable in-place in the source tree, even without running dmake setup. We should stop shipping them in the onbld package. We can leave them in the tools proto area for compatibility with existing CI/CD tools and scripts that expect to find them there after doing dmake setup.



Updated by Alexander Pyhalov 2 months ago

I've checked, in OI we use nightly and buildenv to build
1) illumos-gate - nightly is used as

time $(ENV) -i ./usr/src/tools/scripts/nightly

2) slim_source (Caiman) - uses own nightly copy as
       cp usr/src/tools/env/nightly $(BUILD_DIR)/$(MACH)/nightly && \
        chmod u+wx $(BUILD_DIR)/$(MACH)/nightly && \

3) gfx-drm - uses own bldenv copy as
       cp tools/bldenv $(BUILD_DIR)/$(MACH)/bldenv && \

So, we should be safe if nightly/bldenv is not packaged.

Also available in: Atom PDF