Release process
⚠️ This page is a draft

TODO
- Automate Android release process
- Fix Android: encrypt keystore, remove access with personal account
- Automate build number increment
- Automate tag, release and changelog
Workflows
iOS Release process native-deploy-ios.yml
Android Release process is not automated yet, see ENG-504
Typical release process
Prepare release
-
Extract Jira tickets from commit messages using latest release's date (https://github.com/asset-reality/frontend/releases). The list might not contain all the changes, verify on Jira.
sh scripts/extract_jira_tickets.sh 2024-11-21 packages/native -
The Release Manager (RM) should manually create a new release branch (ie:
release/app/1.6.0) -
Set new release version on iOS (ie: bump to
1.6.0)yarn workspace native deploy:ios:increment_version:minor -
Set new release version on Android (ie: bump to
1.6.0)yarn workspace native deploy:android:increment_version:minor -
Push changes to the release branch
Build and distribute
- The workflow native-deploy-ios.yml builds and distributes iOS builds via CI when merging on release branches (
release/*). Android needs to be built from local machine. - Pushing any change to the release branch builds and deploys release candidate builds.
- ⚠️ The workflow native-deploy-ios.yml is currently broken, see ENG-1309 Fix build and deploy iOS workflow. RM needs to build and deploy from local machine (see instructions below).
Test
- Test and verify all the tickets included in the release
- Run regression testing on iOS and Android devices
- When test passed, RM should make the Testflight build available for "Asset reality testers" group

- RM should share a message in Slack with the major changes and link to the APK file

Create release on AppStore
-
Create new draft release on AppStore Connect. ⚠️ The version is hardcoded now, on CI we should use the branch name (ie:
release/1.6.0)yarn workspace native deploy:ios:draft:release -
RM should manually select the release candidate build and submit it for review.


Create release on Play store
-
Play store RM should create the new release, select the build, save and submit it for review.


Finish release
- When AppStore and Play store approved the releases, the RM can publish the app to the stores and finally close the release
- ⚠️We don't have a strict process to close the release yet
- Merge release branch to
main(squash commit) - Merge
maintoproduction(we will probably get rid ofproductionbranch soon) - Tag release with commit hash
git tag -a app/1.6.0 <hash> -m "Tag app/1.6.0"
git push --tags- Create Github release and add autogenerated changelog

Build and deploy from local machine
-
Ensure the local machine is properly setup (see getting-started.md)
-
Ensure the local machine has ssh access to Github
-
Define env vars on local machine (Request access to those secrets on Dashlane)
export MATCH_PASSWORD=*******export APPSTORE_AUTHKEY=*******export MATCH_PRIVATE_KEY=*******
-
Ensure the env vars are properly set
echo $MATCH_PASSWORDecho $APPSTORE_AUTHKEYecho $MATCH_PRIVATE_KEY
-
The machine is now setup. Follow the instructions below to build and distribute.
iOS
-
Manually increment the build number
yarn workspace native deploy:increment_build -
Decrypt the iOS auth key
yarn workspace native deploy:ios:decrypt_secret -
Build and distribute to Testflight
yarn workspace native deploy:ios -
Use the
dry_runparameter to build without distribution (just for testing)yarn workspace native deploy:ios dry_run:true
Android
- ⚠️ Credentials are hardcoded in the Fastfile (eventually we will run
yarn workspace native deploy:android:decrypt_secret) - Build and distribute to Play store
yarn workspace native deploy:android - Use the
dry_runparameter to build without distribution (just for testing)yarn workspace native deploy:android dry_run:true - The script uploads the build to Play Store internal track.
- Open internal testing section

- Select the build and open the Downloads section
- Download the universal APK

- Upload the APK on Google Drive AR Share adn share with Asset Reality group
