e57a53a92e
Final phase of the in-app update flow. release.yml on tag pushes fetches the APK that flutter.yml is attaching to the same release, drops it into client/ in the build context, and the Dockerfile's COPY client/ /app/client/ bakes it into the image. ### How it sequences flutter.yml and release.yml both trigger on tag pushes and run in parallel on different runners (flutter-ci vs go-ci). flutter.yml typically finishes APK build + release attachment in 2-5 min. release.yml polls the release page for up to 15 min for the APK to appear, then proceeds. If the APK never lands (flutter.yml failure, network hiccup), release.yml emits a warning and ships the image without the bundled APK — server returns 404 from /api/client/version, banner stays hidden, manual download from the release page still works. Graceful degradation, not a blocker. ### Repo shape - client/.gitkeep + client/README.md so the directory exists in git and the COPY in the Dockerfile always finds something to copy - .gitignore excludes client/minstrel.apk + .version so accidental commits don't bloat the repo - Dockerfile: COPY --chown=minstrel:minstrel client/ /app/client/ ### Why polling vs cross-workflow trigger Forgejo Actions' workflow_run support varies by runner version; the polling approach is universally compatible. If/when we standardize on a runner that handles workflow_run cleanly, the polling step can become a `needs:` dependency. Closes #397. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
60 lines
1.5 KiB
Plaintext
60 lines
1.5 KiB
Plaintext
# ---> Go
|
|
# If you prefer the allow list template instead of the deny list, see community template:
|
|
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
|
|
#
|
|
# Binaries for programs and plugins
|
|
*.exe
|
|
*.exe~
|
|
*.dll
|
|
*.so
|
|
*.dylib
|
|
|
|
# Test binary, built with `go test -c`
|
|
*.test
|
|
|
|
# Bundled Android APK + version sidecar (#397). Populated by CI for
|
|
# tag releases; never committed. README in client/ explains the flow.
|
|
client/minstrel.apk
|
|
client/minstrel.apk.version
|
|
|
|
# Output of the go coverage tool, specifically when used with LiteIDE
|
|
*.out
|
|
|
|
# Dependency directories (remove the comment below to include it)
|
|
# vendor/
|
|
|
|
# Go workspace file
|
|
go.work
|
|
go.work.sum
|
|
|
|
# env file
|
|
.env
|
|
|
|
|
|
# Superpowers brainstorming companion sessions
|
|
.superpowers/
|
|
|
|
# Agent-authored design specs and implementation plans (kept local; the
|
|
# canonical record lives in commit messages and the running code).
|
|
docs/superpowers/
|
|
|
|
# Per-machine Claude Code settings + remember-skill memory artifacts.
|
|
# Both are operator-scoped; the canonical project memory lives under
|
|
# ~/.claude/projects/ outside the repo.
|
|
.claude/
|
|
.remember/
|
|
|
|
# Flutter
|
|
flutter_client/.dart_tool/
|
|
flutter_client/.flutter-plugins
|
|
flutter_client/.flutter-plugins-dependencies
|
|
flutter_client/build/
|
|
flutter_client/.idea/
|
|
flutter_client/ios/Podfile.lock
|
|
flutter_client/ios/Pods/
|
|
flutter_client/android/.gradle/
|
|
flutter_client/android/app/build/
|
|
flutter_client/android/local.properties
|
|
flutter_client/android/key.properties
|
|
flutter_client/*.iml
|