From a1d4f26236a823203d4263e4f4323efbbf98ab2b Mon Sep 17 00:00:00 2001 From: Szymon Dziedzic Date: Fri, 21 Feb 2025 14:49:32 +0100 Subject: [PATCH] [eas-cli] skip creation of testflight group when there are already exisitng testflight groups + allow to opt out of the behavior by setting env var (#2856) * [eas-cli] skip creation of testflight group when there are already exisitng testflight groups + allow to opt out of the behavior by setting env var * rename env var * add changelog --- CHANGELOG.md | 1 + .../ios/appstore/ensureTestFlightGroup.ts | 43 +++++++++++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44cde5f6c2..fc11746cd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ This is the log of notable changes to EAS CLI and related packages. - Narrow amount of data queried for basic update channel operations. ([#2901](https://github.com/expo/eas-cli/pull/2901) by [@wschurman](https://github.com/wschurman)) - Fix `eas fingerprint:compare` description. ([#2908](https://github.com/expo/eas-cli/pull/2908) by [@quinlanj](https://github.com/quinlanj)) +- Skip auto-creation of TestFlight group when there are already exisitng TestFlight groups and allow to opt out of the behavior by setting `EAS_NO_AUTO_TESTFLIGHT_SETUP` env var. ([#2856](https://github.com/expo/eas-cli/pull/2856) by [@szdziedzic](https://github.com/szdziedzic)) ## [15.0.10](https://github.com/expo/eas-cli/releases/tag/v15.0.10) - 2025-02-11 diff --git a/packages/eas-cli/src/credentials/ios/appstore/ensureTestFlightGroup.ts b/packages/eas-cli/src/credentials/ios/appstore/ensureTestFlightGroup.ts index ec6ea485cb..02692cfca4 100644 --- a/packages/eas-cli/src/credentials/ios/appstore/ensureTestFlightGroup.ts +++ b/packages/eas-cli/src/credentials/ios/appstore/ensureTestFlightGroup.ts @@ -13,20 +13,40 @@ const AUTO_GROUP_NAME = 'Team (Expo)'; * This allows users to instantly access their builds from TestFlight after it finishes processing. */ export async function ensureTestFlightGroupExistsAsync(app: App): Promise { - const group = await ensureInternalGroupAsync(app); - const users = await User.getAsync(app.context); - const admins = users.filter(user => user.attributes.roles?.includes(UserRole.ADMIN)); - - await addAllUsersToInternalGroupAsync(group, admins); -} + if (process.env.EAS_NO_AUTO_TESTFLIGHT_SETUP) { + Log.debug('EAS_NO_AUTO_TESTFLIGHT_SETUP is set, skipping TestFlight setup'); + return; + } -async function ensureInternalGroupAsync(app: App): Promise { const groups = await app.getBetaGroupsAsync({ query: { includes: ['betaTesters'], }, }); + if (groups.length > 0) { + Log.debug(`Found ${groups.length} TestFlight groups`); + Log.debug('Skipping creating a new TestFlight group'); + return; + } + + const group = await ensureInternalGroupAsync({ + app, + groups, + }); + const users = await User.getAsync(app.context); + const admins = users.filter(user => user.attributes.roles?.includes(UserRole.ADMIN)); + + await addAllUsersToInternalGroupAsync(group, admins); +} + +async function ensureInternalGroupAsync({ + groups, + app, +}: { + groups: BetaGroup[]; + app: App; +}): Promise { let betaGroup = groups.find(group => group.attributes.name === AUTO_GROUP_NAME); if (!betaGroup) { const spinner = ora().start('Creating TestFlight group...'); @@ -74,7 +94,14 @@ async function ensureInternalGroupAsync(app: App): Promise { }) ) { await BetaGroup.deleteAsync(app.context, { id: betaGroup.id }); - return await ensureInternalGroupAsync(app); + return await ensureInternalGroupAsync({ + app, + groups: await app.getBetaGroupsAsync({ + query: { + includes: ['betaTesters'], + }, + }), + }); } }