feat: releases work out their version from the commits
tool/release.sh no longer takes a version: it works it out from the commits since the last release, following semantic versioning (feat raises the minor number, fix or perf the patch number, a breaking change the major number from 1.0 on and the minor one before; other types release nothing), or takes major, minor or patch as chosen. It shows the version and its commits and asks first, checks that CI is green on the newest commit with code, writes the version and a raised build number into the pubspec in a signed release commit with a signed tag, and pushes only once the APK and the snap passed their checks. The release notes list the features and fixes. A run that stopped after its release commit and tag carries on with them. Channels for now: the release on code.halkyon.app (APK, snap, checksums) and the F-Droid repository; the Snap Store upload is off until snap_store_channel names a channel. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
d149d4a5e3
commit
4d3d4d9592
1 changed files with 208 additions and 71 deletions
37
README.md
37
README.md
|
|
@ -110,31 +110,38 @@ the CI runner described in `deploy/runner/`, deploys only commits signed by a ke
|
|||
## Releases
|
||||
|
||||
Releases are published on [code.halkyon.app](https://code.halkyon.app/project-halkyon/halkyon_learn/releases),
|
||||
for Android also in the project's F-Droid repository
|
||||
with the APK and the snap, and the APK also in the project's F-Droid repository
|
||||
(`https://halkyon.app/fdroid/repo?fingerprint=E8082788756F6B7E682AA22FCEAD24B53E2A8B0912AD66D65E8C2D4F07BB94B0`,
|
||||
added in the F-Droid app as a repository), and for Linux in the Snap Store
|
||||
(`halkyon-learn`). Their builds connect to learn.halkyon.eu, the project's instance.
|
||||
added in the F-Droid app as a repository). The Snap Store (`halkyon-learn`) follows.
|
||||
Their builds connect to learn.halkyon.eu, the project's instance.
|
||||
|
||||
- **Checking a download:** `SHA256SUMS` lists the checksum of every file, signed with the
|
||||
maintainer's GPG key (`SHA256SUMS.asc`). The APK is signed with the app's key, whose
|
||||
certificate has the SHA-256
|
||||
`27:E2:43:FC:BD:C8:26:FF:98:AB:7D:BB:10:43:6C:98:C3:BE:A2:4B:2A:01:5E:94:E4:CF:C7:D1:FC:2A:00:6C`
|
||||
(`apksigner verify --print-certs` shows it).
|
||||
- **Versions** are `version` in `halkyon_learn_flutter/pubspec.yaml`,
|
||||
`<major>.<minor>.<patch>+<build>`. Every release raises the build number: Android only
|
||||
installs a higher one over an older, and the server tells apps below the build it
|
||||
supports to update.
|
||||
- **Versions** follow [semantic versioning](https://semver.org): `version` in
|
||||
`halkyon_learn_flutter/pubspec.yaml`, `<major>.<minor>.<patch>+<build>`. Since the last
|
||||
release, a commit typed `feat` raises the minor number, `fix` or `perf` the patch
|
||||
number, and a breaking one (`feat!:` or a `BREAKING CHANGE:` line) the major number from
|
||||
1.0 on, the minor one before; other commits release nothing by themselves. Every
|
||||
release raises the build number: Android only installs a higher one over an older, and
|
||||
the server tells apps below the build it supports to update.
|
||||
- **Making one** is for maintainers, on their own machine and never in CI:
|
||||
`tool/release.sh`, or `tool/release.sh minor` (or `major`, `patch`) to choose. It needs
|
||||
`main` clean, pushed and green in CI, the app's key, the F-Droid repository's key and
|
||||
a Forgejo token; its header says more. It shows the version and its commits and asks
|
||||
first, then writes the version into the pubspec in a signed release commit with a
|
||||
signed tag, builds the APK and the snap (`snap/snapcraft.yaml`, built in LXD; its icon
|
||||
comes from `tool/snap_icon.py`), checks both, signs the checksums, pushes, and
|
||||
publishes on code.halkyon.app and in the F-Droid repository; the Snap Store once it is
|
||||
switched on in the script. Besides Flutter and the Android SDK, it uses snapcraft with
|
||||
LXD, a JDK (keytool), GnuPG, curl, jq, unzip, squashfs-tools, rsync and fdroidserver.
|
||||
Release builds made without the app's key are signed with the debug key and can't
|
||||
update a released app.
|
||||
- **The F-Droid repository** is kept by `tool/fdroid_repo.sh` (fdroidserver v2.4.5,
|
||||
e.g. `pipx install fdroidserver==2.4.5`); its settings and the app's listing are in
|
||||
`tool/release/fdroid/`.
|
||||
- **Making one** is for maintainers, on their own machine and never in CI:
|
||||
`tool/release.sh vX.Y.Z`. Its header says what it needs (the signed tag, the app's
|
||||
key, a Forgejo token, `snapcraft login`). It builds the APK and the snap
|
||||
(`snap/snapcraft.yaml`, built in LXD; its icon comes from `tool/snap_icon.py`), checks
|
||||
both, signs the checksums and publishes everything. Besides Flutter and the Android
|
||||
SDK, it uses snapcraft with LXD, a JDK (keytool), GnuPG, curl, jq, unzip and
|
||||
squashfs-tools. Release builds made without the app's key are signed with the debug
|
||||
key and can't update a released app.
|
||||
|
||||
## More
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue