-
Notifications
You must be signed in to change notification settings - Fork 2.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Hold][No QA]Update to deploy HybridApp production iOS and Android using slow rollouts #52283
base: main
Are you sure you want to change the base?
Conversation
On hold for https://github.com/Expensify/Expensify/issues/442751 Once we have that rolling out, I think we can merge this and begin testing. |
@ Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
version_code: ENV["VERSION"].to_i, | ||
track: 'internal', | ||
track_promote_to: 'production', | ||
rollout: '0.01', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So when submitting for review, it will auto-rollout to 1% after approval?
}); | ||
|
||
try { | ||
// Insert an edit to get an edit ID |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure what this comment means, can you make it a bit clearer pls
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like were making a useless edit to grab the ID, but I'm not usure what it is we are editing.
|
||
// Check if the status is halted | ||
const HALTED = status === HALTED_STATUS; | ||
core.setOutput('HALTED', HALTED); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does setOutput
return from the current action flow?
repo: CONST.APP_REPO, | ||
}); | ||
|
||
const releaseDate = data.published_at?.split('T')[0]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you know if this is millis or formatted date? It doesn't matter but a comment here with the format might be useful in the future for people editing the file
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe ignore this actually, I see below it's a string that we pass into DATE
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Update Rollout Percentage with Fastlane | ||
if: ${{ steps.checkAndroidStatus.outputs.HALTED == 'false' }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we also return early if rollout is at 1
?
lane :complete_hybrid_rollout do | ||
productionVersionCode = google_play_track_version_codes(track: 'production') | ||
upload_to_play_store( | ||
package_name: "org.me.mobiexpensifyg", | ||
json_key: './android/app/android-fastlane-json-key.json', | ||
version_code: productionVersionCode, | ||
track: 'production', | ||
rollout: '1', | ||
skip_upload_apk: true, | ||
skip_upload_aab: true, | ||
skip_upload_metadata: true, | ||
skip_upload_changelogs: true, | ||
skip_upload_images: true, | ||
skip_upload_screenshots: true | ||
) | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we also skip this if rollout is already at 1 (perhaps we needed to halt releases for some reason and it got to 1 with the auto-rollout already)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking pretty good, lets try it! Documenting the Fastlane params is very helpful
Explanation of Change
Context: We currently do not have a way to automatically release HybridApp (Expensify aka OldApp) automatically to production. This historically has been done by hand when we determine we have enough to release in an ad-hoc manner. One reason for this was the standard process to preform a “slow rollout” by increasing the percentage of users who could update due to increased users and risk for fires on HybridApp/OldApp.
Problem: We are not keeping HybridApp up to date with New Expensify functionality, the current HybridApp release for production is already ~1 month old and there has been ~4,000 new commits since then.
Solution: Automate rollouts for HybridApp with GitHub Actions using our existing
deploy.yml
workflow with some additional logic to handle slow rollouts. At a high level I’d propose:Here is an example of the high level plan, if we did three production releases. Monday, Wednesday, and Friday.
9.0.48-2
on a slow rollout. Slow rollout is a automatic thing done by Apple that updates from 1% to 100% over a 7 day period.9.0.48-2
, but we have a new production release, so we’d put9.0.48-2
to 100% and start the slow rollout of9.0.49-2
.9.0.49-2
to 100% from 2% and start the rollout of9.0.50-8
.9.0.50-8
has been slow rolled out for 3 days, so it would be at 5%. If we release to production today then we would update it to 100%, otherwise it would bump to 10% tomorrow automatically by Apple.Fixed Issues
Related https://github.com/Expensify/Expensify/issues/195693
Tests
Offline tests
N/A
PR Author Checklist
### Fixed Issues
section aboveTests
sectionOffline steps
sectionQA steps
sectiontoggleReport
and notonIconClick
)myBool && <MyComponent />
.src/languages/*
files and using the translation methodSTYLE.md
) were followedAvatar
, I verified the components usingAvatar
are working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)
)Avatar
is modified, I verified thatAvatar
is working as expected in all cases)Design
label and/or tagged@Expensify/design
so the design team can review the changes.ScrollView
component to make it scrollable when more elements are added to the page.main
branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTest
steps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari
MacOS: Desktop