build(release): a Dart release tool for every app
tool/release.dart releases one app: `dart run tool/release.dart learn
[major | minor | patch] [--dry-run]`, each app configured in Dart beside
it (apps/learn/release.dart). Every step and check of tool/release.sh
is kept: the repository as pushed, resuming after a release commit and
tag, Flutter as CI pins it, the tools, the key and its certificate pin,
secrets asked for without echo and never written down, CI green on the
newest commit, the signed release commit and tag by a key deploys
accept, the APK built from a checkout of the tag and checked, the snap,
the signed checksums, pushing only after both builds passed, the
release on Forgejo, the F-Droid repository, the Snap Store once a
channel is set.
New: tags per app (learn-v0.19.0, Learn's v… counting as its
history); only commits touching the app decide its version (its folder,
the shared packages it uses by path, the root pubspec and lock, its
release files, where its packages were before the move); --dry-run
reads all of it, lists every step and the notes, and what a release
would refuse, changing nothing. The pure parts are tested in
test/release/. Learn releases build 21 with tool/release.sh, then
switches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 21:12:31 +02:00
|
|
|
// How Halkyon Learn is released (`dart run tool/release.dart learn`): the
|
|
|
|
|
// release tool's configuration of it, registered in tool/src/release/apps.dart.
|
|
|
|
|
import '../../tool/src/release/app_release.dart';
|
|
|
|
|
|
|
|
|
|
/// Halkyon Learn's releases: the APK and the snap, both connecting to
|
|
|
|
|
/// learn.halkyon.eu, the project's instance, published on code.halkyon.app,
|
2026-10-23 15:09:31 +02:00
|
|
|
/// in the project's F-Droid repository and in the Snap Store's edge channel.
|
build(release): a Dart release tool for every app
tool/release.dart releases one app: `dart run tool/release.dart learn
[major | minor | patch] [--dry-run]`, each app configured in Dart beside
it (apps/learn/release.dart). Every step and check of tool/release.sh
is kept: the repository as pushed, resuming after a release commit and
tag, Flutter as CI pins it, the tools, the key and its certificate pin,
secrets asked for without echo and never written down, CI green on the
newest commit, the signed release commit and tag by a key deploys
accept, the APK built from a checkout of the tag and checked, the snap,
the signed checksums, pushing only after both builds passed, the
release on Forgejo, the F-Droid repository, the Snap Store once a
channel is set.
New: tags per app (learn-v0.19.0, Learn's v… counting as its
history); only commits touching the app decide its version (its folder,
the shared packages it uses by path, the root pubspec and lock, its
release files, where its packages were before the move); --dry-run
reads all of it, lists every step and the notes, and what a release
would refuse, changing nothing. The pure parts are tested in
test/release/. Learn releases build 21 with tool/release.sh, then
switches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 21:12:31 +02:00
|
|
|
const learnRelease = AppRelease(
|
|
|
|
|
id: 'learn',
|
|
|
|
|
name: 'Halkyon Learn',
|
|
|
|
|
applicationId: 'app.halkyon.learn',
|
|
|
|
|
directory: 'apps/learn',
|
|
|
|
|
flutterPackage: 'apps/learn/halkyon_learn_flutter',
|
|
|
|
|
artifactName: 'halkyon-learn',
|
|
|
|
|
serverUrl: 'https://learn.halkyon.eu/',
|
|
|
|
|
forgejo: 'https://code.halkyon.app',
|
|
|
|
|
repository: 'project-halkyon/halkyon',
|
|
|
|
|
// A PKCS #12 keystore outside the repository (also in the maintainer's
|
|
|
|
|
// password manager): there is no Google Play, so it is the app's identity,
|
|
|
|
|
// and lost, installed apps can't be updated.
|
|
|
|
|
android: AndroidSigning(
|
|
|
|
|
certificateFile: 'tool/release/android-certificate.sha256',
|
|
|
|
|
keystoreVariable: 'HALKYON_ANDROID_KEYSTORE',
|
|
|
|
|
defaultKeystore: '.local/share/halkyon-learn/android-release.p12',
|
|
|
|
|
aliasVariable: 'HALKYON_ANDROID_KEY_ALIAS',
|
|
|
|
|
defaultAlias: 'halkyon-learn',
|
|
|
|
|
),
|
|
|
|
|
fdroid: FdroidListing(
|
|
|
|
|
script: 'tool/fdroid_repo.sh',
|
|
|
|
|
listing: 'tool/release/fdroid',
|
|
|
|
|
indexCertificateFile: 'tool/release/fdroid-index-certificate.sha256',
|
|
|
|
|
repositoryUrl: 'https://halkyon.app/fdroid/repo',
|
|
|
|
|
),
|
2026-10-23 15:09:31 +02:00
|
|
|
// To the Store's edge channel (since 23 Oct 2026, as v0.18.0 went there by
|
|
|
|
|
// hand): stable once the app leaves its early days.
|
build(release): a Dart release tool for every app
tool/release.dart releases one app: `dart run tool/release.dart learn
[major | minor | patch] [--dry-run]`, each app configured in Dart beside
it (apps/learn/release.dart). Every step and check of tool/release.sh
is kept: the repository as pushed, resuming after a release commit and
tag, Flutter as CI pins it, the tools, the key and its certificate pin,
secrets asked for without echo and never written down, CI green on the
newest commit, the signed release commit and tag by a key deploys
accept, the APK built from a checkout of the tag and checked, the snap,
the signed checksums, pushing only after both builds passed, the
release on Forgejo, the F-Droid repository, the Snap Store once a
channel is set.
New: tags per app (learn-v0.19.0, Learn's v… counting as its
history); only commits touching the app decide its version (its folder,
the shared packages it uses by path, the root pubspec and lock, its
release files, where its packages were before the move); --dry-run
reads all of it, lists every step and the notes, and what a release
would refuse, changing nothing. The pure parts are tested in
test/release/. Learn releases build 21 with tool/release.sh, then
switches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 21:12:31 +02:00
|
|
|
snap: SnapRelease(
|
|
|
|
|
name: 'halkyon-learn',
|
|
|
|
|
part: 'halkyon-learn',
|
|
|
|
|
directory: 'snap',
|
2026-10-23 15:09:31 +02:00
|
|
|
storeChannel: 'edge',
|
build(release): a Dart release tool for every app
tool/release.dart releases one app: `dart run tool/release.dart learn
[major | minor | patch] [--dry-run]`, each app configured in Dart beside
it (apps/learn/release.dart). Every step and check of tool/release.sh
is kept: the repository as pushed, resuming after a release commit and
tag, Flutter as CI pins it, the tools, the key and its certificate pin,
secrets asked for without echo and never written down, CI green on the
newest commit, the signed release commit and tag by a key deploys
accept, the APK built from a checkout of the tag and checked, the snap,
the signed checksums, pushing only after both builds passed, the
release on Forgejo, the F-Droid repository, the Snap Store once a
channel is set.
New: tags per app (learn-v0.19.0, Learn's v… counting as its
history); only commits touching the app decide its version (its folder,
the shared packages it uses by path, the root pubspec and lock, its
release files, where its packages were before the move); --dry-run
reads all of it, lists every step and the notes, and what a release
would refuse, changing nothing. The pure parts are tested in
test/release/. Learn releases build 21 with tool/release.sh, then
switches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 21:12:31 +02:00
|
|
|
),
|
|
|
|
|
// Learn's releases up to build 21 were tagged v0.18.0 and so on.
|
|
|
|
|
legacyTagPrefix: 'v',
|
|
|
|
|
// Its packages were at the repository's root until it moved into apps/learn
|
|
|
|
|
// (19 Oct 2026, ADR 0015).
|
|
|
|
|
formerPaths: [
|
|
|
|
|
'halkyon_learn_client',
|
|
|
|
|
'halkyon_learn_curator',
|
|
|
|
|
'halkyon_learn_flutter',
|
|
|
|
|
'halkyon_learn_server',
|
|
|
|
|
],
|
|
|
|
|
);
|