Skip to content

Production Release Checklist ​

There are two types of releases: store releases and OTA releases. For emergency bug fixes, use OTA Updates which don't require store review.

A store release is required when:

  • Native code changes - Updates to iOS or Android components
  • New features - Significant new functionality
  • Config changes - Any change to Doppler config will cause OTAs to no longer work, requiring an immediate store release

Follow Up Critical OTAs with a Store Release

OTA updates are lost when the app is reinstalled. If an OTA contains a critical fix, a store release should follow to ensure the fix persists for users who reinstall (which is common, as it's the typical advice given by ops to users with issues).

Store release ​

For more info on how the store release GitHub Action works, see Store Releases.

1. QA Sign-Off ​

  • [ ] QA team has tested and approved develop or feature branch for release
  • [ ] All critical bugs resolved
  • [ ] Regression testing completed
  • [ ] E2E tests passing
  • [ ] Jira release completed

2. Version Bump and Tagging (on main) ​

  • [ ] Merge into main and checkout main branch
  • [ ] Version number bumped in package.json and app.config.ts
  • [ ] Commit created with version bump 🏷️ v1.2.3
  • [ ] Git tag created: git tag 1.2.3
  • [ ] Tag pushed: git push origin 1.2.3

3. Automated Builds ​

  • [ ] GitHub workflows triggered automatically
  • [ ] Production builds created successfully (iOS & Android)
  • [ ] Production E2E builds created successfully

4. E2E Testing on Production Builds ​

  • [ ] QA runs E2E tests on production-e2e builds (you'll need to ask them in Slack)
  • [ ] All E2E tests passing
  • [ ] No critical issues found

5. App Store Preparation ​

  • [ ] Release notes written (by Emily) and reviewed
  • [ ] App store metadata updated if needed
  • [ ] Screenshots updated if UI changed
  • [ ] Privacy policy reviewed if permissions changed
  • [ ] Discussion about immediate / gradual release schedule

6. Store Submission ​

  • [ ] iOS app submitted to App Store Connect
  • [ ] Android app submitted to Google Play Console
  • [ ] Submission approved
  • [ ] Release

Review Timeline

  • iOS: Reviews typically take 24-48 hours
  • Android: Reviews typically take a few hours to 1 day

7. Post-Release Comms ​

  • [ ] Post a message in #engineer-app Slack channel:
🚀 Engineer app <version> has been released 🚀
<Jira release link>
<What's New text from the stores>
Summary:
- <non-technical bullet points for ops>

8. Post-Release Monitoring ​

  • [ ] Monitor Sentry for crash reports and errors
  • [ ] Track adoption rate and rollout progress

OTA release ​

Production OTAs push urgent fixes directly to users without requiring store review.

For more info on how the OTA GitHub Action works, see OTA Updates.

1. Pre-Release Verification ​

  • [ ] Fix has been tested on develop or feature branch
  • [ ] No native code changes included
  • [ ] No Doppler config changes since last store release
  • [ ] QA has approved the fix for production

2. Prepare Release ​

  • [ ] Merge the branch into main
  • [ ] Checkout main branch
  • [ ] Git tag created: git tag 1.2.3-1 (the -N suffix indicates an OTA)
  • [ ] Tag pushed: git push origin 1.2.3-1

WARNING

Do not bump the version number in the code - this will change the runtime fingerprint and the OTA will not apply to the latest store release.

3. Deploy ​

  • [ ] Observe the production OTA workflow in GitHub Actions triggered by the tag push
  • [ ] Verify update completes successfully
  • [ ] Confirm update is visible in EAS dashboard

4. Post-Release Comms ​

  • [ ] Post a message in #engineer-app Slack channel:
🔄 Engineer app OTA update released 🔄
<Jira ticket link>
Summary:
- <brief description of the fix>

5. Post-Release Verification ​

  • [ ] Monitor Sentry for any new errors

Plan a Follow-Up Store Release

Schedule a store release soon to ensure the fix persists for users who reinstall the app.