Without a consistent signing key, each CI build was signed with the
ephemeral debug keystore from the Flutter container — causing Android
to reject updates with INSTALL_FAILED_UPDATE_INCOMPATIBLE.
Secrets stored in repo: RELEASE_KEYSTORE_BASE64, RELEASE_KEYSTORE_PASSWORD,
RELEASE_KEY_ALIAS. CI decodes the keystore and writes key.properties
before building so every release APK is signed identically.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
pubspec.yaml now holds a placeholder (0.0.0+0) that is never updated.
CI strips the v* tag to derive --build-name (e.g. 26.03.12) and
--build-number (e.g. 260312) and passes them to flutter build apk.
actions/checkout and actions/upload-artifact are JavaScript actions.
When container: is set, act runs them inside the container (not on the
host runner), but ghcr.io/cirruslabs/flutter:stable has no Node.js.
Replace both with equivalent shell commands:
- checkout: git clone + git checkout SHA
- artifact upload: curl to Forgejo API (best-effort, non-blocking)
The release APK attach step was already a pure shell step and is unchanged.
dev push → artifact named fabledapp-dev-<sha>
main push → artifact named fabledapp-<sha>
tag push → artifact + Forgejo Release
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Tag pushes (v*) now build the APK and create a Forgejo Release with
the APK attached as a downloadable asset, in addition to uploading the
workflow artifact. Requires RELEASE_TOKEN secret (write:repository scope).
To release: git tag v26.03.09 && git push origin v26.03.09
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CI skips on changes to platform dirs (ios, linux, macos, web, windows),
docs, and README. Build skips on test-only changes since tests don't
affect the release APK.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ci.yml: flutter analyze + flutter test on every push, runs in
ghcr.io/cirruslabs/flutter:stable container (includes Flutter, Dart,
Java, Android SDK)
build.yml: release APK build on main push, uploaded as workflow artifact
(downloadable from Forgejo Actions UI, retained 30 days)
No secrets required. Uses existing swarm-runner.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>