Bug #12687
openshipping nightly and bldenv is a recipe for flag days
0%
Description
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 invokesmake
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 about 2 years 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 illumos.sh
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 && \ NIGHTLY="$(BUILD_DIR)/$(MACH)/nightly"
3) gfx-drm - uses own bldenv copy as
cp tools/bldenv $(BUILD_DIR)/$(MACH)/bldenv && \ BLDENV=$(BUILD_DIR)/$(MACH)/bldenv
So, we should be safe if nightly/bldenv is not packaged.