Skip to content

Add CI checks and store candidate builds - #1

Merged
sljeff merged 6 commits into
mainfrom
codex/secure-flutter-ci
Jul 29, 2026
Merged

Add CI checks and store candidate builds#1
sljeff merged 6 commits into
mainfrom
codex/secure-flutter-ci

Conversation

@sljeff

@sljeff sljeff commented Jul 29, 2026

Copy link
Copy Markdown
Owner

What changed

  • run Flutter analysis and tests on pull requests and main
  • compile Android and iOS release builds before merge without release credentials
  • allow maintainers to run the same checks manually on a selected branch
  • use synthetic Firebase and RevenueCat configuration for CI
  • load store configuration and signing credentials from Infisical
  • upload rc-* candidates to Play internal testing and TestFlight
  • commit the Gradle wrapper and Dart/CocoaPods lockfiles
  • pin Ruby and CocoaPods dependencies for reproducible iOS builds
  • pin Git dependencies to full commit SHAs
  • document local setup and the candidate release process

Store uploads only run for a tag that exactly matches the version in
pubspec.yaml and points to a commit on main. After testing, the same
AAB and IPA can be promoted without rebuilding them. GitHub does not keep
the build artifacts.

Testing

  • bash -n scripts/*.sh
  • shellcheck -x scripts/*.sh
  • actionlint .github/workflows/*.yml
  • flutter pub get --enforce-lockfile
  • flutter analyze --no-fatal-infos
  • flutter test
  • installed the checksummed Ruby bundle in an isolated Ruby 3.3.11 environment
  • built and verified an Android release AAB with a temporary CI key
  • built an unsigned iOS release app with synthetic configuration
  • archived, exported, and verified a signed iOS IPA using the release setup
  • built and verified a signed Android AAB using the release setup

No builds were uploaded to either store during testing. Creating the first
matching rc-* tag after merge will start the real uploads.

sljeff added 6 commits July 24, 2026 14:50
Run analysis, tests, and Android and iOS release builds on pull requests
and manual branch runs without using release credentials.

Use rc tags to build signed candidates with configuration and signing
credentials from Infisical, then upload them to Play internal testing and
TestFlight.

Check in dependency lockfiles and the Gradle wrapper, and document the
maintainer setup and candidate release process.
Resolve hosted runner image drift by locating sdkmanager through the Android
SDK root and installing CocoaPods from a checksummed Bundler lockfile.
Update Flutter plugin podspec checksums for the locked Ruby and CocoaPods
toolchain so deployment-mode installs match clean runners.
Pin Google Play uploads to the Anycast package and internal testing track so runtime configuration cannot redirect a release.\n\nEncode temporary Android signing values before loading them as Java properties, and exercise escape sequences in the CI signing password.

@sljeff sljeff left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The three review notes are addressed in c696fdd; details are in the thread replies.

Comment thread scripts/upload_play.sh Outdated
Comment thread scripts/upload_play.sh Outdated
Comment thread scripts/prepare_android_signing.sh Outdated
@sljeff
sljeff merged commit 61a04f0 into main Jul 29, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant