Make a release
The workflow .forgejo/workflows/release.yaml releases the head of main on
the 8th of each month, one week after update.yaml opens the pull requests of
the npins update. Merge these pull requests before that day. The workflow
pushes a signed tag YYYY.MM and makes a release of the forge for it. The
notes of the release are the titles of the pull requests since the previous
release, and a link that tells how to get the SBOM of a node
(.forgejo/workflows/release-notes.sh). SECURITY.md tells the
release scheme and which releases get fixes.
To make a release out of schedule, for example for a fix of a vulnerability,
merge the fix into main, then start the workflow release on main in
"Actions" on the forge. The tag is then YYYY.MM.1, YYYY.MM.2, and so on.
When the head of main is a release already, the workflow makes no tag. When
a run fails after the push of the tag, start the workflow again: it makes the
missing release of the forge.
Set up the signing key
Do these steps one time, and again when you replace the key:
-
Make an SSH key without a passphrase, on a computer that you trust:
ssh-keygen -t ed25519 -N "" -C "Fediversity release" -f release-signing-key -
Add the contents of
release-signing-key(the private key) as the secretRELEASE_SIGNING_KEYof the repository: "Settings", "Actions", "Secrets". Then delete the file, or keep it in a password manager. -
Select an account of the forge for the releases. Use an account that has no write access to the repository: the forge also accepts the key for SSH access as that account. The account of the releases is
fediversity-release. Addrelease-signing-key.pubto the SSH keys of that account, and verify the key: the forge shows a token, which you sign with the private key. -
Add the public key to
.forgejo/workflows/release-allowed-signers, on the first line, with an email address of that account. The address<login>@noreply.git.fediversity.euis applicable:<login>@noreply.git.fediversity.eu namespaces="git" ssh-ed25519 AAAA...Merge this change into
main. The workflow uses that email address as the tagger, thus the forge shows the tags as verified. When you replace a key, keep the old key on a different line withvalid-before="<YYYYMMDD>".
The workflow also needs the "Releases" unit of the repository: "Settings", "Units", "Releases".