ci: Flutter CI gate + signed release (APK / TestFlight) workflows - #1
Merged
Conversation
Add GitHub Actions for the openhealth/ Flutter app: - ci.yml: PR/main quality gate — pub get, dart format check, flutter analyze, flutter test --coverage, plus Android debug and iOS no-codesign build sanity checks (Flutter/Gradle cached). - release.yml: on v* tags / manual dispatch — signed Android APK+AAB attached to the GitHub Release, and signed iOS IPA uploaded to TestFlight via App Store Connect API key. Each job skips gracefully with a warning when its secrets are absent. - docs/RELEASING.md: required secrets, how to generate them (keystore, App Store Connect API key), and how to cut a release. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds GitHub Actions for the Flutter app in
openhealth/. Touches only.github/workflows/anddocs/RELEASING.md— no app code..github/workflows/ci.yml— PR quality gateRuns on every pull request and push to
main:flutter pub getdart format --output=none --set-exit-if-changed .flutter analyzeflutter test --coverage(uploadslcov.infoartifact)flutter build apk --debug(Ubuntu) andflutter build ios --no-codesign(macOS)Flutter + Gradle caching enabled; concurrency cancels superseded runs. Mirrors the commands developers run locally.
.github/workflows/release.yml— signed releasesTriggers on
v*tags (or manualworkflow_dispatch):ios/ExportOptions.plist, teamYLK778Z528).Each release job skips gracefully with a
::warning::if its secrets are missing, so the workflows merge now and activate automatically once secrets are added — no hard failure on a fresh repo.docs/RELEASING.mdExact secret list, how to generate each (keystore + App Store Connect API key), and how to cut a release (tag → workflow).
Secrets the founder must add (Settings → Secrets and variables → Actions)
Android (signed APK/AAB):
ANDROID_KEYSTORE_BASE64— base64 of the release keystore (.jks)ANDROID_KEYSTORE_PASSWORDANDROID_KEY_ALIASANDROID_KEY_PASSWORDiOS (TestFlight):
APPSTORE_API_KEY_IDAPPSTORE_API_ISSUER_IDAPPSTORE_API_KEY_BASE64— base64 of theAuthKey_XXXX.p8One-time follow-up (app-code, not in this PR)
openhealth/android/app/build.gradle.ktsstill signsreleasewith the debug keystore (itsTODO). To get a Play-uploadable signed build, it must loadandroid/key.properties(which the workflow writes) into areleasesigning config. The exact Kotlin block is documented indocs/RELEASING.md. Left to the app-code owner to avoid conflicts.Verification
actionlintclean (0 issues).openhealth/:flutter pub get,flutter analyze, anddart formatall run. (dart formatcurrently flagslib/main.dart— an app-code formatting fix owned by another agent; CI will correctly gate on it.)xcrun altoolrelease flow.🤖 Generated with Claude Code