Wikimedia Apps/Team/Android/Release process

This page documents the technical release process for the Android team. The release engineer should remain cognizant of the detailed non-technical steps when creating and releasing to both beta and production.

Alpha releases
Alpha APKs are built automatically by Travis CI on GitHub. Simply download the APK from the "latest" release, which is updated with every merged pull request: https://github.com/wikimedia/apps-android-wikipedia/releases/tag/latest

Beta releases
 Announce on that a new beta build is in progress and that any merging should be paused until it's done. Prepare your workspace. Ideally you should checkout a fresh copy of the repo into an empty directory, to avoid any unintended artifacts from Android Studio, gradle, etc.  Increment the patch version code. Consider updating the minor number. Please notice that you may need to create the  branch before running the script.  Push the version increment patch.

 Create a Pull Request for it, and merge it. For cherry-pickin' hotfix releases:  Start the release notes Etherpad cooking. Here are some helpful commands to look through the commit history, while filtering out uninteresting commits:  Confirm the version-bump patch has merged, and update your local repo with it.</li> Perform the actual build of the beta, production, and partner flavors. When the script finishes, all of the built APKs and AABs will be placed in the  directory. You'll notice that each flavor of the build has a universal APK and a corresponding AAB, which an app "bundle". When distributing the APK manually (whether for a partner, user testing, etc.) always use the universal build. The AAB bundles are intended only for uploading to the Google Play Store. </li> Load the built APK onto the device and install/run it and see if everything functions as expected, as a sanity check. For bonus points, try it with a Kindle Fire device. For super bonus points, on one of the devices enable the "Don't keep activities" developer option, and make sure nothing breaks.</li> To install the APK programmatically onto multiple connected devices: </li> Do some light manual testing, including search, saved pages, reading lists, history, nearby, beta-only and prod-only features, light/dark/black themes, upgrade from a previous version, and new features and churn areas identified when generating release notes.</li> Go to the Google Play Store console, and select Testing and Closed testing to create a new Alpha release for the Wikipedia app with 100% rollout. Upload the four platform-specific (non-universal)  APKs to it, and use the release notes from the Etherpad.</li> Also in the Play Store console, create a new Production release for the Wikipedia Beta app with 100% rollout. Upload the four platform-specific (non-universal)  APKs to it, and use the release notes from the Etherpad.</li> Push the tags. </li> Upload the built APKs to releases.wikimedia.org. </li>  Upload the APKs to Google Drive (i.e. into a new folder accessible by QA and TSG). Sending apk URLs to QA and TSG </li> Review the Alpha pre-launch test results in the Play Store console. </li> Create a new "Upcoming" version of the app in the Amazon Appstore and upload the -amazon- universal APK to it.</li> Add the release to Mobile/Release_history under the Android section's "Release notes".</li> Optionally end email to, cc  , and bcc volunteer contributors. Don't forget to call out volunteers!</li> Send email to QA and/or TSG to start regression testing.</li> </ol>

Production releases
Production releases are simply promotions from Beta by the product owner. <ol> Go to the Google Play Store console and promote the current Alpha release to Production. (Optionally perform a staged rollout, i.e. less than 100% to begin, then ratchet up to 100% when completely ready.)</li> Go to the Amazon Appstore and hit the Submit button to submit the current "upcoming" version of the app for review and deployment.</li> <li>Send email to, cc  , and bcc volunteer contributors. Don't forget to call out volunteers!</li> </ol>

Post-release
<ol> <li>Rejoice</li> <li>Monitor for any new crashes in HockeyApp. Remember: since we have APKs for four different platforms, there are four different version codes organized by 10xxx, 20xxx, 30xxx, and 40xxx, with "xxx" being the actual versionCode of the APK. You should check all four of these in HockeyApp, although 10xxx and 20xxx should be the most important since these are the most widely used (armv7a and armv8a).</li> <li>Monitor for any new crashes in the Play Store console. These are much less likely than crashes in HockeyApp, since these crashes would imply a system-level crash before the app even loads. Nevertheless, they are possible and should be checked.</li> <li>Monitor the ANR rate in the Play Store, as well as the other performance metrics that the console provides. This can expose performance bottlenecks or UI slowdowns which should be investigated.</li> </ol>