The release engineer responsibilities are, but not limited to:
- Own the entire release process (step-by-step).
- Provide visibility of the release, at all stages, to the wider audience (e.g. squad, tribe and iOS chapter lead) by:
- Tagging in the release Slack channel, anyone (Engineers, PMs, QAs) that is relevant to the release and to the issues that are raised during the release cycle.
- Adding in the release channel a daily note with the status of the release (QA and bug fixing progress).
- Collaborate with QA by:
- Providing visibility to potential blockers to the wider audience.
- Escalating abnormal influx of bugs, so the release, as a whole, can be reassessed.
- Making sure they can dedicate enough time for the release. In case this is not possible (due to other squad commitments), please inform the iOS chapter lead.
- General bug fixing for minor regressions and tasks, that are not related to significant changes made by squads for their own features. For more complex ones:
- Delegate the bug to the relevant squad/person.
- If the bug is too complex to be fixed within the release window, please toggle off the feature and inform the Product Manager.
- Bugs that aren't owned by any squad should be fixed by the release engineers. The support engineer(s) can help if additional help is needed.
The objective is to ship the release build as soon as possible whilst maintaining the quality bar and addressing every bug raised by QA.
When dealing with a particularly complicated bug (one that would require a rather significant effort to address) the release engineer should speak with Release Manager.
The bug's corresponding feature should be disabled altogether using its feature switch (if applicable). Such a bug would subsequently be handled by its respective squad.
Release duties have priority over regular squad duties. Please inform your squad of your unavailability before starting to work in the release with at least a sprint's notice. As with every other week, twenty percent of your work hours overall are to be allocated towards making the release a reality.
There are usually two release engineers working at any given time. It goes without saying that both engineers need to work together and that constant feedback is vital.
- To help expedite the release, any required feature flag changes should be done prior to the 2am cut-off on the Friday. If these are missed, a concession can be made so that the changes will be allowed to be made during the Friday. However, this should not be a regular occurrence as it requires intervention from the assigned release engineers to create new builds.
- The TestRail milestone should be created before its release is cut
It starts at the end of the sprint (typically when the new sprint starts on Monday)
-
Release branch is cut automatically on last Friday of the sprint during nightly builds. It will create and push release branch, create a release Slack channel, submit a new AppCenter build, and run UI tests.
- if, for any reason, the automatic cut didn't work, it can be triggered manually with
/stevenson release_cutoff target:Babylon version:4.1.0
from#ios-build
channel - If you're releasing another app (e.g. Telus), they typically go through the release process only after the main Babylon app has been signed off by QA.
- You should create the new branch from either
- the corresponding Babylon release branch that was recently already QA'd and signed off (e.g.
release/babylon/4.1.0
) - or the corresponding Babylon release tag that was already released (e.g.
babylon/4.1.0
) if the release branch hasn't been merged yet
- the corresponding Babylon release branch that was recently already QA'd and signed off (e.g.
- Name your new branch using the same
release/{appname}/{version}
convention (e.g.release/telus/4.1.0
) - To do this, run
/stevenson release_cutoff branch:release/babylon/4.1.0 version:4.1.0 target:Telus
(Note:branch
parameter is for the branch or release tag) - (you need to specify both the branch and the version so that the script don't bump the version to
4.2.0
by default when cutting the branch)
- You should create the new branch from either
If for some reason you need to do this process manually instead of using the lane, you can follow these manual steps
- Create the release branch (e.g.
release/babylon/4.1.0
) fromdevelop
and publish it - Create a release channel on Slack (e.g.
ios_release_4_1_0
) - Create a PR (e.g.
[CRP-XXX] Babylon Release 4.1.0
), assign the release engineers, and add theWIP
label - Trigger the App Center build from that branch using its command (e.g.
/appcenter Babylon branch:release/babylon/4.1.0
) in#ios-build
. - Trigger the full UI automation run by issuing the command
/stevenson ui_tests branch:release/babylon/4.1.0
in#ios-build
. - Run CRP
/crp ios release/babylon/4.1.0
in#ios-launchpad
, then edit the PR ticket title to update the[CRP-XXX]
with the actual CRP ticket number created by this command. If the bot returns errors, you can find more info about them in the CRP Bot documentation.
- if, for any reason, the automatic cut didn't work, it can be triggered manually with
-
Join the Slack channel e.g.
ios_release_4_1_0
) to discuss anything related to this release. -
Review UI test failures and, if necessary, tag the squads responsible for the failing lanes.
-
Bump the release version by triggering the Slack command (e.g.
/testflight Babylon version:4.1.0
) in#ios-build
(you can run the command every time you want to upload a new build).- This creates a TestFlight build (try to make one as early as possible so that you can catch issues like missing/expired certificates or profiles and any other production build errors early).
-
Create a new version in AppStoreConnect (login using your own account) / My Apps
- Navigate to the app you want to create a new version for
- On the sidebar click the
+
button next to the iOS App header - Input the new version number.
During this stage, the release manager has the following tasks:
- Ensure the CRP ticket is up-to-date
- The CRP ticket is created automatically for iOS during release cutoff (see details here)
- But they need to ensure all tickets have had their Fix Version field updated as expected (see the CRP report)
- They also need to manually complete the CRP ticket with some additional information (clinical risk, etc)
- Ask the
#ios-launchpad
channel for the expected release notes from each squad if they are releasing anything
It starts after the App Center build has been delivered and it can take several cycles
- Testers will then begin their work against the build that was just created.
- Any hotfix should target the
develop
branch first, then cherry-picked to the release branch. - The cherry-pick PRs need to be reviewed by the relevant squad or platform QA & one of the release engineers assigned to the release. This is to ensure visibility of the changes and the correct builds are available for validation.
- Bear in mind that two approvals from other engineers is not enough in this particular case.
- The issue for the hotfix has to visible on the release JIRA board. To ensure this, set the release number in the
Fix version
field in the hotfix's JIRA ticket.
It starts after all opened issues had been addressed and can take several cycles until QA's approval
- Trigger a new release build in the
#ios-build
channel (e.g./testflight Babylon version:4.1.0
) - Obtain the release notes from the Product Manager and update them in the AppStoreConnect.
- Babylon (UK): Be aware that the release notes have 2 localised versions: English UK (which contains references to the NHS) and another English (Australian by August/2019) for the other territories (the rest of the world). Paste the release notes on both if just one is provided in the
#ios-launchpad
. - Other apps: make sure you provide the release notes for all appropriate locales
- Babylon (UK): Be aware that the release notes have 2 localised versions: English UK (which contains references to the NHS) and another English (Australian by August/2019) for the other territories (the rest of the world). Paste the release notes on both if just one is provided in the
- Enable the new release version in TestFlight on AppStoreConnect.
- ❗️NOTE: Remember to submit compliance info for that build
- If you are asked about "Export Compliance Information" check what to do here
- Perform a quick exploratory test on the TestFlight build to make sure everything looks okay. (e.g. verifying that DigitalTwin Assets are visible and are not dropped due to Git LFS issues)
- By now, QA should have been notified that there is a new version in TestFlight.
It starts after QA has signed off a particular build and can take several cycles until Apple's approval
This process is now automated using the submit_for_review
lane. Just trigger the lane from the #ios-build
channel using /stevenson fastlane submit_for_review target:<target> build:<testflight_build>
.
If for some reason you need to do this process manually instead of using the lane, you can follow these manual steps
- Make sure Manually release this version is selected in
Version Release
. - Select Use phased release
- Select build to submit for review
- If you are asked about "Advertising Identifier (IDFA)" check what to do here
It starts after the app is accepted by Apple and final internal approval
Most of the steps for this phase have been automated using the finish_release
lane.
-
Press
Release this version
in App Store Connect -
Trigger the lane from the
#ios-build
channel using/stevenson fastlane finish_release target:<target>
.If for some reason you need to do this process manually instead of using the lane, you can follow these manual steps
- Create a tag named
{appname}/{version}
(e.g.babylon/4.1.0
) on the release commit and create a GitHub release for that new tag- Make sure you create separate tags (and GitHub releases) for each app released on the AppStore (eg. Babylon 4.1.0 and Telus 4.1.0 would each have their own
babylon/4.1.0
andtelus/4.1.0
tags) - Set the body of the GitHub release to the content of the Release Notes for the app
- Attach the zipped
xcarchive
as an artefact to the GitHub release (if you're using the automated release command, you can find the*.xcarchive.zip
in the Artifacts top section in the CI build).
- Make sure you create separate tags (and GitHub releases) for each app released on the AppStore (eg. Babylon 4.1.0 and Telus 4.1.0 would each have their own
- Create a tag named
-
Merge
release
branch back todevelop
:- Open the Release PR (PR from
release
branch targetingdevelop
) which has been automatically created. - Resolve the conflicts (if any).
- In case there are changes other than updates to app and build versions after merging the changes from
develop
, the release engineer should assign as reviewers all the engineers who worked on those changes and remove the ones automatically assigned. In current workflow every change integrated to release branch is supposed to be go intodevelop
soon after, so there shouldn't be any changes. Any differences might be a result of resolving conflicts, or a hotfix PR not being merged previously todevelop
. - Set the Merge label once all the required reviewers have approved it.
- Open the Release PR (PR from
-
Update this document if any steps during the release process have changed.
The hotfix is cut from the latest stable/hotfix release tag (e.g. 4.1.1
from 4.1.0
, or 4.1.2
from 4.1.1
).
-
Trigger manually with
/stevenson release_cutoff target:Babylon version:4.1.1 branch:babylon/4.1.0
from#ios-build
channel⚠️ Note:branch:
is using the name of the release tag, not the release branch, to ensure we cut from the point where the last release was pushed to the store and tagged.
If for some reason you need to do this process manually instead of using the lane, you can follow these manual steps
- Create the hotfix release branch (e.g.
release/babylon/4.1.1
) from the last released tag and publish it - Create a release channel on Slack (e.g.
ios_release_4_1_1
) - Create a PR (e.g.
[CRP-XXX] Babylon Release 4.1.1
), assign the release engineers, and add theWIP
label - Trigger the App Center build from that branch using its command (e.g.
/appcenter Babylon branch:release/babylon/4.1.1
) in#ios-build
. - Trigger the full UI automation run by issuing the command
/stevenson ui_tests branch:release/babylon/4.1.1
in#ios-build
. - Run CRP
/crp ios release/babylon/4.1.1
in#ios-launchpad
⚠️ NOTE: Only run the CRP after the previous release has been finished. In order to run the CRP, the GitHub release/tab need to exist, otherwise it will include unrelated tickets.
-
Join the Slack channel (e.g.
ios_release_4_1_1
) to discuss anything related to this release. -
Bump the release version by triggering the Slack command (e.g.
/testflight Babylon version:4.1.1
) in#ios-build
(you can run the command every time you want to upload a new build).- This creates a TestFlight build (try to make one as early as possible so that you can catch issues like missing/expired certificates or profiles and any other production build errors early).
-
Create a new version in AppStoreConnect (login using your own account) / My Apps
-
On the sidebar click
+ Version or Platform
and selectiOS
. -
Input the new version number.
- Note: this can be only done after the previous release has been completed
During this stage, the release manager has the following tasks:
- Ensure the CRP ticket is up-to-date
- The CRP ticket is created automatically for iOS during release cutoff (see details here)
- But they need to ensure all tickets have had their Fix Version field updated as expected (see the CRP report)
- They also need to manually complete the CRP ticket with some additional information (clinical risk, etc)
- Ask the
#ios-launchpad
channel for the expected release notes from each squad if they are releasing anything.
The rest of the phases are the same as in the regular release.
At the moment SDK release is handled by the SDK squad itself. As a release engineer you don't have to worry about this section.
- Cut a release branch for the SDK from the app release branch, using the
release/sdk/{version}
naming convention (eg.release/sdk/0.5.0
) - The Release Manager should then create a CRP ticket by triggering its command (eg.
/crp ios branch:release/sdk/0.5.0
) in Slack- This will create the CRP ticket for the SDK, only including in the CHANGELOG field of the CRP the commits messages containing
[SDK-xxx]
or#SDK
– filtering out the other commits, that are considered app-only changes if not containing those tags - See here for more detailed documentation about the CRP
- See also the Internal SDK Release Process for more info.
- This will create the CRP ticket for the SDK, only including in the CHANGELOG field of the CRP the commits messages containing
- By now, our bot created PR with the name
SDK x.x.x [ci skip]
- assign yourself there and update the SDK changelogSDK/CHANGELOG.md
to add the release version and date on the branch mentioned in this PR.- this document will be distributed alongside the SDK and used to document changes to SDK consumers, so the list of changes here could be worded differently from the CHANGELOG used in the CRP ticket if necessary
- Trigger the App Center build from that branch using its command (eg.
/fastlane distribute_sdk version:0.5.0 branch:release/sdk/0.5.0
) in#ios-build
. - Update the Sample app to point to the latest SDK release and ensure it still compiles
For the most part, the US and Ascension flavors follow the same release process as the UK.
US release cycles are aligned with the UK's, and we currently work off of the UK release branches. However, the version numbers do not align across apps. For example, UK 4.15.0
corresponded with US 2.2.0
. But we do follow the same pattern, incrementing the minor version with each new release unless instructed otherwise. Release builds generated in the #ios-build
channel must specify the branch and the version number.
/testflight BabylonUS branch:release/babylon/4.15.0 version:2.2.0
/appcenter Ascension branch:release/babylon/4.15.0 version:1.5.0
- Generate a TestFlight build
- After the TestFlight build has processed (typically takes 1-3 hours), distribute it to the
QA
test group.- Note: The first TestFlight build with a new version number will need to be approved by Apple, which can take a day or two. That's why it's ideal to submit on Friday. The builds will typically be approved by Monday. After that, any new build with the same version number should be approved automatically.
- Generate an App Center build
Update tickets in the release board.
In the developer portal, create a new iOS version and update marketing content based on tickets in the release board. Monitor the current US and/or Ascension release channel for QA signoff (these channels are kept private). Once QA has signed off, submit to the App Store using the TestFlight build that was approved by QA.
If the app is rejected for not meeting the App Store guidelines, we have internal documentation available that contains responses to certain guideline failures. This should be updated everytime an app fails one of the guidelines. If an app has previously been rejected, then you should be able to re-use the previous message (It's worth checking with the release manager that the response does answer Apples questions though). Link to the document here
Tag the commit that the release build was generated from (e.g. babylonus/2.2.0
, ascension/1.5.0
). The release commit may not be the latest commit on the release branch because the UK is working off the same branch, fixing bugs (and mostly UI tests).
Note: Starting 4.18.0, we are no longer keeping track of the release effort in this App Release calendar section.
History of tracked effort for versions up to 4.17.0
The release process starts when the first build is provided to QA and ends when Apple has approved the app. Effort to release should be broken down by:
- Automated QA effort (e.g.
5h
) - Manual QA effort (e.g.
3h
) - Delta between the jira ticket being open and marked as
done
orwont fix
, for Engineering effort. (e.g.UA-8289: 1h30
). Consider only tickets that were raised during the release period, checking that their creation dates were after the release branch cut.- We have agreed to stop collecting time spent on tickets from engineers, so there is no need to record it.
- Total effort
Version | Release Engineer(s) | QA effort | Engineering effort | Total effort | Cut-off date | Release date |
---|---|---|---|---|---|---|
4.17.0 | Julien Ducret, Yuri Karabatov | Manual: 24h 30m |
N/A | Total 24h 30m | 14.02.2020 | 26.02.2020 |
4.16.0 | Joao Pereira, Witold Skibniewski | Manual: 23h 30m |
CNSMR-3413: 2h REFER-138: 2h CE-1139: 30m CNSMR-3416: 2h TC-65: 20h NRX-1223: 30m IOSP-553: 1.5h CE-1136: 4h CE-1038: 2h COREUS-4237: 1h AV-1466: 1h AV-1456: 1h |
Total 37h 30m | 31.01.2020 | 10.02.2020 |
4.15.0 | Adam Borek, Giorgos Tsiapaliokas | Manual: 23h 30m |
MS-857: 5m MS-838: 2h SDK-457: 6h SDK-461: 2h PAR-495: 10m MON-5871: 8h MON-5871: 2h MON-5968: 1h APPTS-2507: 3h TK-412: 30m IOSP-539: 15m CE-1101: 1h CE-1059: 3h AV-1398: 4h AV-1436: 4h AV-1437: 1h |
Total 61h 30 m | 17.01.2020 | 27.01.2020 |
4.14.1 | James Birtwell, Adrian Sliwa | Manual: 2h |
[REFER-133] - 6 : |
Total: 8h | 18.01.2020 | 20.01.2020 |
4.14.0 | James Birtwell, Adrian Sliwa | Manual: 28h |
[COREUS-3072] - 6 [NRX-1168] - 0.5 [MS-761] - 6.5 [IOSP-518] - 10min [CNSMR-3317] - 16 [CNSMR-3174] 0.5 [COREUS-3639] - 2 [AV-1409] - 1 [CE-1047] - 2 [CE-1054] - 6 [NRX-1167] - 6 [CNSMR-3353] - 2 [IOSP-528] [PRSCR-1613] - 3 |
Total: 85h 40min + ?? | 09.01.2020 | 17.01.2020 |
4.13.0 | Michal Kwiecien, Viorel Mihalache | Manual: 26h |
MS-741: 1h MS-742: 1h APPTS-2296: 1.5h APPTS-2288: 1.5h TK-324: 1h TK-325: 1h CE-1011: 5h NRX-1158: 1h CNSMR-3275: 1h PRSCR-1551 : 5h PRSCR-1545: 0.5h IDP-516 : 5h |
Total: 46h | 06.12.2019 | 16.12.2019 |
4.12.0 | Konrad Muchowicz, Danilo Aliberti | Manual: 24.5h |
IOSP-396: 0.5 MS-635: 0.25h CNSMR-3209, AV-1287, AV-1336, CNSMR-3210, AV-1304: 3h CNSMR-3204: 3h CNSMR-3212, PRSCR-1515: 3h GW-1149, PAR-418: 13h CNSMR-3205: 3h APPTS-2169, CE-976: 10h MON-5776, MON-5768: 2.5h MS-611: 4h IDP-471: 1h CE-922: 3h TK-271: 1h APPTS-2208: 2h PAT-444: 2.5h IOSP-432: 1h |
Total: 52.75h | 22.11.2019 | 3.12.2019 |
4.10.0 | Ilya Puchka, Yasuhiro Inami | Manual: 23.5h |
MS-353: 3h COREUS-2191: 8h MON-5641: 10h TK-132: 0.5h APPTS-1941, APPTS-2030, APPTS-2037: 30h PRSCR-1435: 1h AV-1228: 9h GW-1028: 0.5h NRX-1023: 10h CNSMR-3119: 8h CE-869: 8h MS-412: 1.5h MS-388: 1.5h MS-427: 6h GW-915: 8h CNSMR-3120: 5h IOSP-253: 2h IOSP-275: 2h |
Total: 137.5 | 25.10.2019 | 4.11.2019 |
4.9.1 | Michael Brown, Yuri Karabatov | Manual: 1h |
AV-1225: 1h |
Total: 2h | 22.10.2019 | 24.10.2019 |
4.9.0 | Michael Brown, Yuri Karabatov | Manual: 26h |
IOSP-200: 10m GW-990: 2h MS-304: 2h MON-5545: 30m AV-1181: 1h TES-481: 30m CE-846: 1h IOSP-15: 3h MS-315: 30m IOSP-221: 10m IOSP-209: 4h PRSCR-1405: 30m IOSP-233: 30m |
Total: 41h 50m | 14.10.2019 | 22.10.2019 |
4.8.0 | Giorgos Tsiapaliokas, Ben Henshall | Manual: 23h 00m |
MS-204: 60m MS-247: 15m MS-262: 30m MS-259: 5m MON-5431: 2h CNSMR-3029: 10m CE-795: 10m CE-799: 10m GW-888: 15m GW-957: 15m APPTS-1752: 6h GW-952: 8h AV-1154: 1h |
Total: 19h 53m | 30.09.2019 | 7.10.2019 |
4.7.0 | Joshua Simmons, Adrian Śliwa | Manual: 21h 55m |
AV-1098: 15m AV-1103: 30m GW-865: 1h GW-914: 1h GW-927: 1h GW-938: 1h GW-913: 12h CNSMR-2899: 1m TES-409: 30m APPTS-1637: 1h CNSMR-2881: 45m MON-5337: 15m CNSMR-2901: 30m |
Total: 41h 41m | 16.09.2019 | 23.09.2019 |
4.6.1 | Anders Ha, Michał Kwiecień |
Manual: 1h 15m |
APPTS-1646: 12h |
Total: 13h 15m | 09.09.2019 | 12.09.2019 |
4.6.0 | Anders Ha, Michał Kwiecień |
Manual: 24h 10m |
MN-705: 1h MS-99: 1h CNSMR-2772: 1h MS-98: 3h MS-102: 1h GW-805: 1h AV-1023: 0.5h CNSMR-2782: 1h MS-111: 2h CNSMR-2784: 2h GW-878: 1h CNSMR-2787: 2h CNSMR-2788: 1h MS-103: 0.5h PRSCR-1328: 3h PRSCR-1333: 0.5h CNSMR-2808: 0.5h CE-683: 2h AV-1041: 1h CNSMR-2563: 0.5h CNSMR-2813: 0.5h CNSMR-2814: 0.5h CNSMR-2824: 0.5h CNSMR-2480: 32h |
Total: 83h 10m | 02.09.2019 | 10.09.2019 |
4.5.0 | Chitra Kotwani Joao Pereira |
Automated Parallel: 1h 47m Serial: 8h 58m Manual: 14h 21m |
AV-886: 1h CE-615: 1h CE-617: 5h NRX-831: .5h CNSMR-2530: 1h CNSMR-2543: 4h CNSMR-2628: 1h CNSMR-2629: 8h CNSMR-2631: 4h CNSMR-2634: 2h CNSMR-2635: 2h CNSMR-2636: 4h CNSMR-2639:.5h CNSMR-2640: 4h CNSMR-2641:.5h CNSMR-2649:.5h CNSMR-2655:.5h CNSMR-2668: 1.5h CNSMR-2670: 1h CNSMR-2673:.5h CNSMR-2676: 1h CNSMR-2682: 6h CNSMR-2684: 1h CNSMR-2685: 2h CNSMR-2687:.5h CNSMR-2694: 1.5h CNSMR-2696: 4h MON-5082: 3h |
Total: 90h 36m | 19.08.2019 | 28.08.2019 |
4.4.0 | Danilo Aliberti Sergey Shulga |
Automated: Parallel execution: 1 hour 28 minutes Serial execution: 10 hours 15 minutes Manual: 22 Hours 45 Minutes |
CNSMR-2521: 5days , NRX-790: backend issue not resolved , CNSMR-2515: 19 hours , AV-910: 2days , CNSMR-2509: 1day , CNSMR-2506: 1day, 5hours , CNSMR-2503: 1day, 1hour 10minutes , CNSMR-2502: 6days and an hour , CNSMR-2506: 1day, 5hours |
Total: 18d 7h 10m | 05.08.2019 | 12.08.2019 |
4.3.0 | Julien Ducret Diego Petrucci |
Automated Parallel execution: 1h 54min Serial execution: 8h 41min Manual: 24h 50min |
CE-517: 30min CNSMR-2143: 2days CNSMR-2395: 0.5day CNSMR-2333: 30min CNSMR-2334: 30min MON-4916: 30min MON-4916: 30min MON-4964: 30min CE-512: 3hrs CNSMR-2363: 1hr 30min CNSMR-2338: 30min CNSMR-2337: 60min |
Total: 44h 01m | 22.07.2019 | 30.07.2019 |
4.2.0 | Viorel Mihalache Joshua Simmons |
Automated: 8h 41min Manual: 24h 30min |
AV-852: 3h CNSMR-2173: 2h NRX-724: 30min CNSMR-2147: 8h NCSMR-2167: 30min NRX-720: 30min CNSMR-2164: 30min CNSMR-2162: 30min AV-843: 30min |
Total: 49h 11m | 08.07.2019 | 15.07.2019 |
4.1.0 | Martin Nygren Adam Borek |
Automated: 8h 57min Manual: 24h 15min |
NRX-686 and NRX-687: 8h CNSMR-1947: 1.5h CNSMR-1952: 2h Other release duties: 9.5h |
Total: 54h25m | 24.06.2019 | 01.07.2019 |
4.0.1 | Ilya Puchka | Automated: - Manual: 1h 30min |
GW-668: 16h |
Total: 17h30m | 20.06.2019 | 21.06.2019 |
4.0.0 | Anders Ha Ilya Puchka |
Automated: 8h 21m Manual: 37h 00min |
AV-519: 17h NRX-649: 2h AV-677: 3h CNSMR-1811: 1h AV-704: 1.5h AV-701: 16h AV-737: 1.5h AV-736: 2.5h |
Total: 90h | 10.06.2019 | 18.06.2019 |
3.17.0 | Witold Skibniewski Viorel Mihalache Oprea |
Automated: 8h 15m Manual: 26h 45min |
CNSMR-1690: 1h |
Total: 36h | 28.05.2019 | 30.05.2019 |
3.16.0 | David Rodrigues Ben Henshall |
Automated: 6h 50m Manual: 19h 35min |
CNSMR-1556: 2h30m CNSMR-1537: 3h CNSMR-1525: 1h CNSMR-1438: 1h CNSMR-1437: 2h CNSMR-1555: 1h CNSMR-1540: 4h |
Total: 40h55m | 13.05.2019 | 16.05.2019 |
3.15.0 | Sergey Shulga Joao Pereira Michael Brown |
Automated: 7h 37m Manual: 24h 15 min |
CNSMR-1449: 1h CNSMR-1443: 12h CNSMR-1381: 2h CNSMR-1438: 30min CNSMR-1430: 30min CNSMR-1413: 20min CNSMR-1412: 20min CNSMR-1375: 20min CNSMR-1391: 15min |
Total: 49h07m | 29.04.2019 | 07.05.2019 |
3.14.0 | Giorgos Tsiapaliokas Yasuhiro Inami |
Automated: 07h28m Manual: 24h10m |
NRX-506: 2h NRX-495: 30m NRX-501: 30m CNSMR-1323: 30m |
Total: 35h08m | 15.04.2019 | 23.04.2019 |
3.13.0 | Anders Ha Viorel Mihalache |
Automated: 07h Manual: 19h |
CNSMR-1183: 3h CNSMR-1181: 2h |
Total: 31h | 1.04.2019 | 4.04.2019 |
3.12.0 | Ben Henshall Danilo Aliberti |
Automated: 07h16m Manual: 22h |
MON-4225: 3h |
Total: 32h16m | 18.03.2019 | 21.03.2019 |
3.11.0 | Adam Borek Ilya Puchka |
Automated: 07h17m Manual: 19h30m |
CNSMR-894: 6h CNSMR-913: 2h CE-262: 2h CE-261: 2h Expired certificates: 3h |
Total: 41h47m | 04.03.2019 | 11.03.2019 |
3.10.0 | Martin Nygren, Witold Skibniewski | Automated: 07h30m Manual: 28h |
CNSMR-814: 30m |
Total: 36h00m | 18.02.2019 | 21.02.2019 |
3.9.1 | Michael Brown | Automated: 04h00m Manual: 14h |
CNSMR-705: - 30m AV-312: - 30m |
Total: 19h00m | 11.02.2019 | 13.02.2019 |
3.9.0 | Michael Brown, Giorgos Tsiapaliokas | Automated: 07h25m Manual: 24h |
CNSMR-680: - 2h |
Total: 33h25m | 04.02.2019 | 08.02.2019 |
3.8.0 | Sergey Shulga, Diego Petrucci | Automated: 07h30m Manual: 33h |
CE-125: - 2h CNSMR-538: 1h AV-243: 1h CNSMR-556: 2h NRX-229: 1h NRX-232: - 1h CNSMR-554: 1h NRX-229: 5h NRX-232: 3h |
Total: 57h30m | 21.01.2019 | 24.01.2019 |
3.7.0 | Ben Henshall, David Rodrigues | Automated: 06h58m Manual: 32h |
MON-3855: 2h MON-3857: 1h AV-207: 1h NRX-190: 3h CNSMR-493: 3h CNSMR-477: 3h |
Total: 2d3h58mh | ||
3.6.0 | Viorel Mihalache, Ilya Puchka | Automated: 06h50m Manual: 32h |
CNSMR-388: 2h CNSMR-397: 1h CE-146: 2h NRX-150: 8h CNSMR-404: 1h NRX-149: 4h UA-8329: 3h UA-8431: 1h CNMSR-365: 1h CNSMR-324: 2h CNSMR-340: 3h CE-124: 2h |
Total: 2d20h50min | ||
3.5.0 | Wagner Truppel | Automated: 06h47 Manual: 28h |
CNSMR-82: 1h39m |
Total: 1d12h26m | ||
3.4.0 | Martin Nygren | Automated: 06h40 Manual: 32h |
UA-8385: 2h UA8381: 4h UA-8375 6h UA-8374 2h UA-8362 1h UA-8369 2h UA-8372 1h MON-3631 2h MON-3634 14h UA-8359 13h |
Total: 3d9h40min | ||
3.3.0 | David Rodrigues | Automated: 09h40 Manual: 14h |
UA-8268: 1h UA-8269: 1h30 UA-8252: 5h |
Total: 1d7h10min | ||
3.2.0 | Danilo Aliberti | Automated: 12h53 Manual: 10h |
UA-8166: 4h UA-8149: 2d UA-8187: 3h |
Total: 3d6h |
Version | Associated App Version | Release Engineer(s) | Engineering effort | Total effort | Cut-off date | Release date |
---|---|---|---|---|---|---|
1.0.0 | 4.8.0 | Giorgos Tsiapaliokas Ben Henshall |
Nothing outside of release notes / running release command 🕺 | 0h | 07.10.2019 | 07.10.2019 |
0.7.0 | 3.16.0 | David Rodrigues Ben Henshall |
CNSMR-1589: 3h (Involved a lot of waiting due to dependency on DevOps) Expired GitHub token issue: 2h |
4h30m | 17.05.2019 | 21.05.2019 |
If the release did not go as expected, request a meeting with the iOS team so that the reasons for this failure are analyzed and addressed in order to minimize similar problems in the future.