deploy/compose.todo.yaml adds Todo's server at todo.halkyon.eu, a member of Learn's register, its database halkyon_todo in the instance's PostgreSQL, its image built as Train's. redeploy.sh and backup.sh go over every app server .env switches on (train, todo). Each compose file names its server to the register in a variable of its own (INSTANCE_MEMBER_TRAIN, INSTANCE_MEMBER_TODO), which halkyon_base adds to INSTANCE_MEMBERS, each address once, as a second compose file's default would have replaced Train's. apps/todo/release.dart configures the release tool for Todo's APK and snap: a key of its own (pinned once made; until then nothing is released), the F-Droid listing (Time, NonFreeNet), and the snap from apps/todo/snap/, which the tool builds in a clone of the repository at the tag with that folder in place of snap/, as snapcraft builds one recipe a folder and the root's is Learn's. What's new for 0.1.0 in English and German, now shown. Android's backup and transfer are off, as Train's (D53): the reminders scheduled keep their tasks' titles unsealed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
145 lines
5.7 KiB
YAML
145 lines
5.7 KiB
YAML
# Halkyon Todo's Linux app as a Snap (ADR 0033, step 5), built in LXD by the release
|
|
# tool (`dart run tool/release.dart todo`): snapcraft builds one recipe a folder, from
|
|
# its snap/snapcraft.yaml, and the root's snap/ is Learn's, so the tool builds this one
|
|
# in a clone of the repository at the release's tag with this folder in place of the
|
|
# clone's snap/ (`SnapRelease.projectPath`), but for snap/local/, which the recipes
|
|
# share. By hand, the same: in such a clone, `snapcraft pack`.
|
|
#
|
|
# It builds what is committed (the source is the clone's HEAD, the tag), never a
|
|
# working tree with its build caches, and always for todo.halkyon.eu. Flutter is
|
|
# pinned like the local and CI one (FLUTTER_VERSION in .forgejo/workflows/ci.yaml),
|
|
# spelled out as in Learn's recipe, which says why.
|
|
name: halkyon-todo
|
|
title: Halkyon Todo
|
|
base: core24
|
|
adopt-info: halkyon-todo # the version, from the app's pubspec.yaml
|
|
summary: Tasks and projects, sealed and synced between your devices
|
|
description: |
|
|
Halkyon Todo keeps your tasks: an Inbox for what comes up, projects with
|
|
sections, sub-tasks and labels, Today with what is overdue, and Upcoming as
|
|
an agenda that opens into the month. Tasks repeat (every day, every other
|
|
Tuesday, the first Monday of each month), have reminders, deadlines and
|
|
priorities, and are typed the quick way: "Call Anna tomorrow 9am #Home p1".
|
|
|
|
Each project shows as a list, a board or a calendar, grouped, sorted and
|
|
filtered as you set it, the same on every device. Tasks are dragged between
|
|
sections, days and hours.
|
|
|
|
Everything is sealed on your device with your account's keys before it
|
|
reaches the instance, which can't read it. You sign in with SimpleLogin, by
|
|
Proton, or with an email address, a password and an authenticator app. It
|
|
connects to todo.halkyon.eu, the project's instance, or to any other:
|
|
everything an instance needs is in the repository, to run your own. The app
|
|
is AGPL-3.0 and the server SSPL-1.0, so all of its code is public.
|
|
|
|
Questions and reports: support@halkyon.app
|
|
license: AGPL-3.0-or-later
|
|
source-code: https://code.halkyon.app/project-halkyon/halkyon
|
|
# The project's, not an instance's: the app works with any instance.
|
|
website: https://halkyon.app/todo
|
|
# No contact or issues, as Learn's (its recipe says why): the address is in the
|
|
# description.
|
|
# The app's icon with rounded corners, made by the repository's tool/app_icons.py; also
|
|
# the desktop file's.
|
|
icon: snap/gui/halkyon-todo.png
|
|
grade: stable
|
|
confinement: strict
|
|
platforms:
|
|
amd64:
|
|
|
|
apps:
|
|
halkyon-todo:
|
|
command: bin/halkyon_todo_flutter
|
|
# How the session is kept: see snap/local/secret-backend (Learn's, kept in the
|
|
# clone).
|
|
command-chain: [bin/secret-backend]
|
|
# GTK, WebKitGTK (the sign-in's page) and libsecret come from the GNOME runtime,
|
|
# the reminders' notifications through the desktop's own; files and the browser
|
|
# go through the desktop's portals.
|
|
extensions: [gnome]
|
|
plugs:
|
|
- network
|
|
# SimpleLogin's sign-in comes back on a loopback address the app listens on.
|
|
- network-bind
|
|
# Never connected by itself; whoever connects it by hand gets the keyring.
|
|
- password-manager-service
|
|
# As Learn's: the sync's connection ended at once when the network goes;
|
|
# not connected until the Store grants it.
|
|
- network-manager-observe
|
|
|
|
parts:
|
|
flutter:
|
|
plugin: nil
|
|
source: https://github.com/flutter/flutter.git
|
|
source-tag: '3.47.8'
|
|
source-depth: 1
|
|
build-packages:
|
|
- clang
|
|
- cmake
|
|
- curl
|
|
- git
|
|
- libgtk-3-dev
|
|
- lld
|
|
- llvm-18
|
|
- ninja-build
|
|
- pkg-config
|
|
- unzip
|
|
- xz-utils
|
|
- zip
|
|
override-build: |
|
|
mkdir -p "$CRAFT_PART_INSTALL/usr/libexec" "$CRAFT_PART_INSTALL/usr/bin"
|
|
cp -r "$CRAFT_PART_SRC" "$CRAFT_PART_INSTALL/usr/libexec/flutter"
|
|
ln -s ../libexec/flutter/bin/flutter "$CRAFT_PART_INSTALL/usr/bin/flutter"
|
|
ln -s ../libexec/flutter/bin/dart "$CRAFT_PART_INSTALL/usr/bin/dart"
|
|
"$CRAFT_PART_INSTALL/usr/bin/flutter" --disable-analytics
|
|
"$CRAFT_PART_INSTALL/usr/bin/flutter" precache --linux
|
|
# Needed to build, not in the Snap.
|
|
override-prime: ''
|
|
|
|
halkyon-todo:
|
|
after: [flutter]
|
|
plugin: nil
|
|
source: .
|
|
source-type: git
|
|
# sodium's build hook compiles libsodium with its configure script and make
|
|
# (ADR 0017), with the Flutter part's clang.
|
|
build-packages:
|
|
- make
|
|
override-build: |
|
|
set -eu
|
|
export PATH="$CRAFT_STAGE/usr/bin:$PATH"
|
|
cd apps/todo/halkyon_todo_flutter
|
|
craftctl set version="$(sed -n 's/^version: *\([^+]*\).*/\1/p' pubspec.yaml)"
|
|
flutter pub get --enforce-lockfile
|
|
flutter build linux --release \
|
|
--dart-define=SERVER_URL=https://todo.halkyon.eu/
|
|
mkdir -p "$CRAFT_PART_INSTALL/bin"
|
|
cp -r build/linux/x64/release/bundle/. "$CRAFT_PART_INSTALL/bin/"
|
|
|
|
secret-backend:
|
|
plugin: dump
|
|
source: snap/local
|
|
organize:
|
|
secret-backend: bin/secret-backend
|
|
|
|
# As Learn's: every file the GNOME runtime or the base has at the same path
|
|
# goes, so that nothing staged hides the runtime's own (Learn's recipe says
|
|
# what that broke there). Todo stages no package today; the part keeps a
|
|
# later one from doing so unnoticed.
|
|
cleanup:
|
|
after: [halkyon-todo, secret-backend]
|
|
plugin: nil
|
|
build-snaps: [core24, gnome-46-2404]
|
|
override-prime: |
|
|
set -eu
|
|
for snap in core24 gnome-46-2404; do
|
|
cd "/snap/$snap/current/usr"
|
|
find . \( -type f -o -type l \) -print0 |
|
|
while IFS= read -r -d '' path; do
|
|
case "$path" in */blas/* | */lapack/*) continue ;; esac
|
|
target="$CRAFT_PRIME/usr/$path"
|
|
if [ -L "$target" ] || [ -f "$target" ]; then
|
|
rm -f "$target"
|
|
fi
|
|
done
|
|
done
|