On 17/02/26 23:34, Jeremy Stanley wrote:
In your Step 2 simple change "Automation […] builds test versions of release artifacts and exercises them" to "Automation […] commits test versions of the release artifacts, exercises them creates a release artefact by `git-archive`-ing that commit", and in Step 4 have the automation push two tags (v1.2.3 and v1.2.3-release) instead of just one.

I think you're suggesting v1.2.3 would be the "clean" tag at the point on the original branch from which an ephemeral release branch is created, and then v1.2.3-release would be a "dirty" tag on the ephemeral release branch at the point after a commit containing generated files is merged?

This generated commit would still need to go through human review and approval before merging to the ephemeral branch, and then once merged the new v1.2.3-release tag request (auto-)proposed for review, reviewed and approved. I don't see a way to remove these checkpoints without allowing automation to merge unreviewed commits and push unreviewed tags.

I don't think merges are necessary. And the tags should be pushed only after they are reviewed, just like tarballs are published only after reviewing them. (I assume the tarballs are generated locally? and reviewed _before_ being published.)

Maybe the compromise you're hinting at is that because the generated files which get added/changed in release tarballs aren't being directly reviewed, and the orphaned v1.2.3-release tag is merely a representation of the corresponding tarball's contents within a Git working tree, any difference between the working tree at v1.2.3 and v1.2.3-release shouldn't need to be reviewed either?

This is more in line with what I was thinking.

Here is a step-by-step illustration of what I imagine the process could look like, illustrated with git --graph.

We start from a random point in time.

* 3eff283 (HEAD -> master) add color widget
* ce6ae4d revert hack
* fbc0a11 add docs
* 7f558c8 fix rendering
* 4960f2b new feature

The release manager says "ce6ae4d is a good candidate for v1.2", so it does all the testing that must be done and then tags it. (No changes from the current workflow.)

In the meantime other people have committed to the master branch.

* 3573730 (HEAD -> master) add configuration option
* 3eff283 add color widget
* ce6ae4d (tag: v1.2) revert hack
* fbc0a11 add docs
* 7f558c8 fix rendering
* 4960f2b new feature

Now the extra files (AUTHORS, etc) get generated by a script. The release manager (+ others) reviews and tests them. BUT, INSTEAD of putting them in a tarball, they are put in a new commit whose parent is v1.2 and this commit is tagged v1.2-release (technically, this can be done atomically and without a new branch, if your infra is able to manipulate Git objects directly).

* 3573730 (HEAD -> master) add configuration option
* 3eff283 add color widget
| * 701e9ab (tag: v1.2-release) Release version 1.2
|/
* ce6ae4d (tag: v1.2) revert hack
* fbc0a11 add docs
* 7f558c8 fix rendering
* 4960f2b new feature

(Obviously all these tags are signed, just like you do now.)

The tarball, if still needed, can be created by git-archive'ing the tag v1.2-release.

These release tags are not merged back into the main history. Nevertheless they may be the tag on top of which the Debian branches are created and merged.

After another release the repo history will look like this:

* f95ffb1 (HEAD -> master) update homepage
* 229d4dd remove old code
| * 8d9f2fc (tag: v1.3-release) Release version 1.3
|/
* dadc8e7 (tag: v1.3) improve wording
* 2bc4d91 fix date
* 3573730 add configuration option
* 3eff283 add color widget
| * 701e9ab (tag: v1.2-release) Release version 1.2
|/
* ce6ae4d (tag: v1.2) revert hack
* fbc0a11 add docs
* 7f558c8 fix rendering
* 4960f2b new feature

I do not see in this workflow any additional manual steps compared to what you already have. And it has the advantage of keeping Git as the main source of truth (the tarball being just a materialization of a single tag without its history). The disadvantage would be that the infra that does the release must be changed to produce the extra tag instead of tarball. But that is a one-time cost, not a recurring one.

Regards,

--
Gioele Barabucci

Reply via email to