mirror of
https://github.com/openglow-org/forgefirm.git
synced 2026-09-27 08:41:13 -07:00
Setting the release number was a platform change. FORGEFIRM_RELEASE sat in forgefirm-image.bb, the recipe hashes as content of meta-forgefirm, and a change to the content of a layer invalidates every acceptance result. So a version bump threw away the campaign that was meant to authorize that very release, and the number therefore had to be decided before the image the campaign ran on. Nothing said so: the release-flow page went straight from the kas configuration to the artifact and the pipeline, while the gate quietly required the recipe value, the rootfs stamp, the archive's meta-version and the tag to agree. v0.0.1 was cut on a tree whose number happened to be right; the next one would have cost a second campaign to discover the rule. The number moves to forgefirm-release.inc, which carries it and nothing else, and the manifest leaves that file out of the layer content hash exactly as it leaves out the component pin files (FORGEFIRM_MANIFEST_VERSION_SUFFIX, and the same list in scripts/manifest-from-tree.py, which computes the identity on a workstation and must agree byte for byte). release.sh reads the number from the new file. The version is metadata, not platform content, and this only makes the manifest say what it already meant: the version string was already outside the identity hash, and it was the file carrying it that defeated that. Nothing is weakened. release.sh still requires the number to equal the rootfs stamp, the .fw meta-version and the release tag, and image.health still compares the stamp on the running machine with the manifest's. Proven: the tree manifest is byte-identical across a bump from 0.0.1 to 0.0.2 (identity a64e51b8e5ecca0af683d4f0 either way, the meta-forgefirm layer hash unchanged), where before the two differed. bitbake resolves FORGEFIRM_RELEASE=0.0.1 and FORGEFIRM_VERSION_STRING=v0.0.1 for the release image through the new require, and the dev image still overrides the string with its build timestamp.
19 lines
959 B
PHP
19 lines
959 B
PHP
# The release version, and nothing else.
|
|
#
|
|
# This file is metadata, not platform content: the image manifest leaves
|
|
# it out of the layer content hash the way it leaves out the component
|
|
# pin files (forgefirm-image-manifest.bbclass,
|
|
# FORGEFIRM_MANIFEST_VERSION_SUFFIX). A version bump therefore changes
|
|
# the version and invalidates nothing, so the number can be set at the
|
|
# moment a release is cut rather than before the campaign that authorizes
|
|
# it. Setting it inside forgefirm-image.bb instead would hash as layer
|
|
# content and invalidate every acceptance result, which is what it did
|
|
# until v0.0.1.
|
|
#
|
|
# Nothing else belongs here. The version is still proven end to end:
|
|
# scripts/release.sh reads FORGEFIRM_RELEASE from this file and requires
|
|
# it to equal the rootfs stamp, the .fw meta-version and the release tag,
|
|
# and the acceptance test image.health compares the stamp on the running
|
|
# machine with the manifest's.
|
|
FORGEFIRM_RELEASE ?= "0.0.1"
|