A patch release; the release tool refuses to build with another Flutter than CI tests with. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
65 lines
3.5 KiB
Markdown
65 lines
3.5 KiB
Markdown
# Halkyon
|
|
|
|
Halkyon's apps and the packages they share, in one repository. Each app is a Flutter app
|
|
for Linux, Windows, macOS, Android and iOS with a [Serverpod](https://serverpod.dev)
|
|
server of its own, offline-first, and anyone may run an instance of it: the apps, the
|
|
servers and everything needed to host an instance are published.
|
|
|
|
| App | What it is | Where |
|
|
|---|---|---|
|
|
| Halkyon Learn | Creating, sharing and studying study material, flashcards scheduled with FSRS | [`apps/learn/`](apps/learn/README.md), at learn.halkyon.eu |
|
|
| Halkyon Todo | To-dos; for now a shell on the shared packages: sign-in, instances, the account | [`apps/todo/`](apps/todo/) |
|
|
| Halkyon Train | Running, cycling and rowing (ADR 0030); for now a shell on the shared packages | [`apps/train/`](apps/train/) |
|
|
|
|
Halkyon Meditate is to follow.
|
|
|
|
## Layout
|
|
|
|
- `apps/<app>/`: each app's server, generated client and Flutter app.
|
|
- `packages/`: what the apps share, taken by path:
|
|
[`halkyon_ui`](packages/halkyon_ui/README.md) (the look: theme, bundled Noto Sans,
|
|
layout, shared widgets), [`halkyon_app`](packages/halkyon_app/README.md) (instances,
|
|
signing in, each person's data and its sync),
|
|
[`halkyon_base`](packages/halkyon_base_server/README.md) (what every server has, as a
|
|
Serverpod module with its generated client `halkyon_base_client`: signing in, the
|
|
account and its deletion, the pruning, the instance's basics),
|
|
[`halkyon_core`](packages/halkyon_core/README.md) (low-level primitives) and
|
|
[`halkyon_interop`](packages/halkyon_interop/README.md) (contracts between apps).
|
|
- `deploy/`: what runs an instance (Docker Compose: Caddy, the server, PostgreSQL),
|
|
learn.halkyon.eu's today.
|
|
- `tool/`: the checks, the pre-push hook and the release scripts. `docs/adr/`: the
|
|
decisions and their reasons.
|
|
|
|
One pub workspace holds every package: one `pubspec.lock`, one version of each dependency.
|
|
[Melos](https://melos.invertase.dev) runs scripts across them.
|
|
|
|
## Getting started
|
|
|
|
- **Flutter v3.47.8**, the version CI uses (`FLUTTER_VERSION` in
|
|
`.forgejo/workflows/ci.yaml`), with each platform you build for set up by Flutter's own
|
|
guides; what an app needs beyond that is in its README.
|
|
- **The Serverpod CLI v4.0.4**: `dart install serverpod_cli@4.0.4`. Pass
|
|
`--no-analytics` to every call; otherwise it reports the commands run to Serverpod.
|
|
- **A C++ compiler**, for `flutter test` too: a dependency of Learn's compiles MeCab as
|
|
it builds.
|
|
|
|
```sh
|
|
flutter pub get # every package of the workspace
|
|
dart run melos list # the packages
|
|
ln -s ../../tool/pre-push .git/hooks/pre-push # the checks before every push
|
|
dart run tool/check.dart # format, analysis, every package's tests
|
|
```
|
|
|
|
`dart run tool/check.dart --changed-since=origin/main` tests only what changed since
|
|
`main` and what depends on it; `dart run melos run test:flutter --scope=<package>` one
|
|
package's Flutter tests. Each server's tests start an embedded PostgreSQL (no Docker) and
|
|
need test passwords in the server's git-ignored `config/passwords.yaml` (the module's
|
|
README and each app's say which). How the code is organised and the rules it follows are
|
|
in [`AGENTS.md`](AGENTS.md) and each app's own.
|
|
|
|
## Licences
|
|
|
|
The servers and the server module are under the Server Side Public License 1.0, the apps,
|
|
the client packages and the other shared packages under the GNU Affero General Public
|
|
License 3.0 or later. [`LICENSE.md`](LICENSE.md) says
|
|
which covers what, [`CONTRIBUTING.md`](CONTRIBUTING.md) how to contribute.
|