Appearance
Release Scripts
The scripts/release/ directory contains automated release pipelines for the server, Ariadne, Theseus, and Keryx.
Server Release (release/server.ts)
Interactive pipeline that tests, bumps the version, builds, and pushes a tagged release.
bash
bun commit # interactive (prompts for type + message)
bun commit patch # prompts for message only
bun commit patch "Fix important bug" # runs directly
bun commit --vm patch "Fix bug" # also runs the VM test suite on VirtualBox before uploadPipeline:
- Prompt for bump type (major / minor / patch) and commit message
- With
--vm: check the VirtualBox VM starts, accepts the login and cansudo - Run server tests (
bun test) - With
--full: run E2E frontend tests (Playwright) - Run contract tests (
scripts/test/contracts.ts) - Bump
VERSIONandBUILD_DATEinserver/src/server.ts - Build (frontend + embeds + Linux binaries via
scripts/build/server.sh), including the binary smoke test - With
--vm: run the VM test suite on VirtualBox against the new offline bundle (server.sh --vm-test) - Upload docs, website, binaries and installer artifacts (part of
server.sh) - Git commit, tag (
vX.Y.Z), and push
If any step fails, the pipeline aborts before the git commit — a broken build never gets tagged. With --vm, a failing VM suite also stops the build before anything is uploaded.
Ariadne Release (release/ariadne.ts)
Interactive pipeline for Ariadne app releases.
bash
bun release:ariadne # interactive
bun release:ariadne patch # prompts for message only
bun release:ariadne patch "Fix navigation bug" # runs directlyPipeline:
- Prompt for bump type and commit message
- Run server tests
- Run contract tests
- Run Flutter analyze
- Run Flutter tests
- Bump
versionandbuildinariadne/pubspec.yaml - Signed Android AAB (fails closed without
key.properties+ keystore) - Signed iOS IPA (macOS; fails closed without
ExportOptions.plist) - Git commit, tag (
ariadne-vX.Y.Z), and push - Print Internal upload checklist (Play Internal + TestFlight Internal)
Missing signing files abort the pipeline. Debug signing is never used for store artifacts.
Theseus Release (release/theseus.ts)
bash
bun release:theseus
bun release:theseus patch "Internal track"Requires THESEUS_UNLOCK_HASH, THESEUS_OPS_SERVER_URL, and THESEUS_OPS_SUBSCRIBE_AUTH from NAS / Apple Passwords (not git). Upload to Play Internal and TestFlight Internal only. Where each value is and how to load it: Theseus release.
Keryx Release (release/keryx.ts and release/keryx-commit.ts)
bash
bun keryx # bump, signed AAB+IPA, commit, tag, push
bun run release:keryx # rebuild current pubspec (no git)Signed artifacts are copied to releases/keryx.aab and releases/Keryx.ipa (same gitignored layout as Ariadne / Theseus). Store upload stays manual.
Lab deploy (deploy.ts)
bash
bun run lab:deployBuilds web --release, generates embeds, rsyncs runtime trees only (config/, lib/, server/, web/build/, web/src/lib/contracts.ts) to con.ssh:/home/thomas/websites/safecall-lab.sourcectl.com, remote bun install in lib/ and server/, restarts safecall-lab.service. Never overwrites config/main.config.json, server/db/, or server/maps/. Packet: lab-server.md.
Version Sources
- Server version:
const VERSIONinserver/src/server.ts - Ariadne version:
version:field inariadne/pubspec.yaml - Theseus version:
version:field intheseus/pubspec.yaml - Keryx version:
version:field inkeryx/pubspec.yaml - Semantic versioning (
MAJOR.MINOR.PATCH)