Repository navigation
Replies: 3 comments 11 replies
|
I think this follows even for the docker images, or maybe especially for them. So, it isn't just constrained to the source tarball and compose files. Rather, it should be that you can produce absolutely everything from that source tarball. |
|
I opened a draft PR for this, it's just a take at getting Claude to do it: #8812. To be completely clear: I'm not doing this because it's somehow a Mentor's job to do it, or that you might expect a Mentor to handle things like this. Quite to the contrary, it is the incubating project's burden to deal with making releases compliant with ASF policies. I'm just doing it (as a contributor) because I think it's an interesting problem that I hadn't fully grasped before, and one I will also have to solve in AsterixDB. So, Texera can be the guinea pig ;) I would also appreciate any help with it, if someone likewise finds the topic interesting. Some of the things I don't quite understand yet, like how purportedly an image which installs something using a package manager is indeed deterministic. I can see how that could be true, but I can also see how it wouldn't be true. |
|
OK, I looked a bit more at #8812 and I understand it somewhat now. |
Uh oh!
There was an error while loading. Please reload this page.
Background
While moving our release signing to a policy-compliant setup (see PJ's mail on
dev@, "signing key used for create-release-candidate.yml"), one precondition of
the ASF automated-signing policy is that all signed artifacts can be built
reproducibly — bit-for-bit — so anyone can independently rebuild them and
byte-compare against what CI produced. That is what makes a machine's signature
auditable: if what you built and what CI built are identical, the signature
attests to verifiable bytes.
(Policy: https://infra.apache.org/release-signing.html#automated-release-signing)
Where Texera stands
Good news first: both voted artifacts (the source tarball and the
docker-compose bundle) are repackagings of committed files — nothing is
compiled and no dependencies are resolved at build time — so this is far
easier for us than for projects shipping binaries. (Transitive dependencies
only come into play for the docker images, which are convenience binaries
outside the signed set.)
Today the artifacts are not reproducible, purely for packaging-metadata
reasons:
tar -czfpicks up filesystem file ordering and the runner's uid/gid,.env) carry freshmtimes.
Demonstration — same commit (release/v1.3 tip), the current packaging run
twice:
versus a one-step
git archive --format=tar.gz, run twice:Proposal
This looks fixable with a small, contained change:
git archive(deterministic byconstruction — git tree order, commit-time mtimes, no gzip timestamp).
(
--sort=name --owner=0 --group=0 --mtime=@<commit-ts>) plusgzip -n.verify-reproduciblescript so anyone can rebuild both artifacts from atag and byte-compare against the staged ones — this becomes the policy's
"validate on trusted hardware" step before promotion.
difference, so reproducibility stays enforced.
Scope note: this covers the voted artifacts. Docker images are convenience
binaries outside the signed set; making them reproducible is a much bigger
topic and not required by the policy for our case.
Happy to put up the PR if this sounds right — feedback welcome.
All reactions