Distribute TestFlight builds to all beta groups automatically

This commit is contained in:
Arkadiusz Fal
2026-07-19 20:12:32 +02:00
parent 65b2f985ef
commit 8f29b15fee
2 changed files with 21 additions and 5 deletions

View File

@@ -49,7 +49,6 @@ env:
GIT_AUTHORIZATION: ${{ secrets.GIT_AUTHORIZATION }} GIT_AUTHORIZATION: ${{ secrets.GIT_AUTHORIZATION }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
CERTIFICATES_GIT_URL: ${{ secrets.CERTIFICATES_GIT_URL }} CERTIFICATES_GIT_URL: ${{ secrets.CERTIFICATES_GIT_URL }}
TESTFLIGHT_EXTERNAL_GROUPS: ${{ secrets.TESTFLIGHT_EXTERNAL_GROUPS }}
jobs: jobs:
determine_build_number: determine_build_number:

View File

@@ -10,7 +10,6 @@ TEMP_KEYCHAIN_USER = ENV['TEMP_KEYCHAIN_USER']
TEMP_KEYCHAIN_PASSWORD = ENV['TEMP_KEYCHAIN_PASSWORD'] TEMP_KEYCHAIN_PASSWORD = ENV['TEMP_KEYCHAIN_PASSWORD']
DEVELOPER_APP_IDENTIFIER = ENV['DEVELOPER_APP_IDENTIFIER'] DEVELOPER_APP_IDENTIFIER = ENV['DEVELOPER_APP_IDENTIFIER']
GIT_AUTHORIZATION = ENV['GIT_AUTHORIZATION'] GIT_AUTHORIZATION = ENV['GIT_AUTHORIZATION']
TESTFLIGHT_EXTERNAL_GROUPS = ENV['TESTFLIGHT_EXTERNAL_GROUPS']
XCODEPROJ = "#{APP_NAME}.xcodeproj" XCODEPROJ = "#{APP_NAME}.xcodeproj"
SCHEME = APP_NAME SCHEME = APP_NAME
@@ -35,6 +34,18 @@ def ensure_temp_keychain(name, password)
create_temp_keychain(name, password) create_temp_keychain(name, password)
end end
# Beta groups are managed in App Store Connect; fetching them at upload time
# means new groups get builds without touching CI config.
def all_testflight_group_names(api_key)
Spaceship::ConnectAPI.token = Spaceship::ConnectAPI::Token.from(hash: api_key)
app = Spaceship::ConnectAPI::App.find(DEVELOPER_APP_IDENTIFIER)
UI.user_error!("App #{DEVELOPER_APP_IDENTIFIER} not found on App Store Connect") if app.nil?
groups = app.get_beta_groups.map(&:name)
UI.user_error!("No TestFlight beta groups found for #{DEVELOPER_APP_IDENTIFIER}") if groups.empty?
UI.message("Distributing build to TestFlight groups: #{groups.join(', ')}")
groups
end
add_extra_platforms(platforms: [:tvos]) add_extra_platforms(platforms: [:tvos])
before_all do before_all do
@@ -148,7 +159,9 @@ platform :ios do
upload_to_testflight( upload_to_testflight(
api_key: api_key, api_key: api_key,
ipa: lane_context[SharedValues::IPA_OUTPUT_PATH], ipa: lane_context[SharedValues::IPA_OUTPUT_PATH],
changelog: changelog changelog: changelog,
distribute_external: true,
groups: all_testflight_group_names(api_key)
) )
end end
end end
@@ -220,7 +233,9 @@ platform :tvos do
upload_to_testflight( upload_to_testflight(
api_key: api_key, api_key: api_key,
ipa: lane_context[SharedValues::IPA_OUTPUT_PATH], ipa: lane_context[SharedValues::IPA_OUTPUT_PATH],
changelog: changelog changelog: changelog,
distribute_external: true,
groups: all_testflight_group_names(api_key)
) )
end end
end end
@@ -284,7 +299,9 @@ platform :mac do
upload_to_testflight( upload_to_testflight(
api_key: api_key, api_key: api_key,
pkg: lane_context[SharedValues::PKG_OUTPUT_PATH], pkg: lane_context[SharedValues::PKG_OUTPUT_PATH],
changelog: changelog changelog: changelog,
distribute_external: true,
groups: all_testflight_group_names(api_key)
) )
end end