sigh/lib/sigh/runner.rb in fastlane-2.161.0 vs sigh/lib/sigh/runner.rb in fastlane-2.162.0
- old
+ new
@@ -15,15 +15,20 @@
def run
FastlaneCore::PrintTable.print_values(config: Sigh.config,
hide_keys: [:output_path],
title: "Summary for sigh #{Fastlane::VERSION}")
- # Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
- # Prompts select team if multiple teams and none specified
- UI.message("Starting login with user '#{Sigh.config[:username]}'")
- Spaceship::ConnectAPI.login(Sigh.config[:username], nil, use_portal: true, use_tunes: false)
- UI.message("Successfully logged in")
+ if api_token
+ UI.message("Creating authorization token for App Store Connect API")
+ Spaceship::ConnectAPI.token = api_token
+ else
+ # Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
+ # Prompts select team if multiple teams and none specified
+ UI.message("Starting login with user '#{Sigh.config[:username]}'")
+ Spaceship::ConnectAPI.login(Sigh.config[:username], nil, use_portal: true, use_tunes: false)
+ UI.message("Successfully logged in")
+ end
profiles = [] if Sigh.config[:skip_fetch_profiles]
profiles ||= fetch_profiles # download the profile if it's there
if profiles.count > 0
@@ -52,10 +57,16 @@
end
return download_profile(profile)
end
+ def api_token
+ @api_token ||= Spaceship::ConnectAPI::Token.create(Sigh.config[:api_key]) if Sigh.config[:api_key]
+ @api_token ||= Spaceship::ConnectAPI::Token.from_json_file(Sigh.config[:api_key_path]) if Sigh.config[:api_key_path]
+ return @api_token
+ end
+
# The kind of provisioning profile we're interested in
def profile_type
return @profile_type if @profile_type
case Sigh.config[:platform]
@@ -188,69 +199,99 @@
profiles = filtered
end
profiles
end
+ def fetch_certificates(certificate_types)
+ filter = {
+ certificateType: certificate_types.join(',')
+ }
+ return Spaceship::ConnectAPI::Certificate.all(filter: filter)
+ end
+
def certificates_for_profile_and_platform
+ types = []
+
case Sigh.config[:platform].to_s
when 'ios', 'tvos'
if profile_type == Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_DEVELOPMENT || profile_type == Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_DEVELOPMENT
- certificates = Spaceship.certificate.development.all +
- Spaceship.certificate.apple_development.all
+ types = [
+ Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPMENT,
+ Spaceship::ConnectAPI::Certificate::CertificateType::IOS_DEVELOPMENT
+ ]
elsif profile_type == Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_INHOUSE || profile_type == Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_INHOUSE
# Enterprise accounts don't have access to Apple Distribution certificates
- certificates = Spaceship.certificate.in_house.all
+ types = [
+ Spaceship::ConnectAPI::Certificate::CertificateType::IOS_DISTRIBUTION
+ ]
# handles case where the desired certificate type is adhoc but the account is an enterprise account
# the apple dev portal api has a weird quirk in it where if you query for distribution certificates
# for enterprise accounts, you get nothing back even if they exist.
- elsif (profile_type == Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_ADHOC || profile_type == Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_ADHOC) && Spaceship.client && Spaceship.client.in_house?
+ elsif (profile_type == Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_ADHOC || profile_type == Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_ADHOC) && Spaceship::ConnectAPI.client && Spaceship::ConnectAPI.client.in_house?
# Enterprise accounts don't have access to Apple Distribution certificates
- certificates = Spaceship.certificate.in_house.all
+ types = [
+ Spaceship::ConnectAPI::Certificate::CertificateType::IOS_DISTRIBUTION
+ ]
else
- # Ad hoc or App Store
- certificates = Spaceship.certificate.production.all +
- Spaceship.certificate.apple_distribution.all
+ types = [
+ Spaceship::ConnectAPI::Certificate::CertificateType::DISTRIBUTION,
+ Spaceship::ConnectAPI::Certificate::CertificateType::IOS_DISTRIBUTION
+ ]
end
when 'macos', 'catalyst'
if profile_type == Spaceship::ConnectAPI::Profile::ProfileType::MAC_APP_DEVELOPMENT || profile_type == Spaceship::ConnectAPI::Profile::ProfileType::MAC_CATALYST_APP_DEVELOPMENT
- certificates = Spaceship.certificate.mac_development.all +
- Spaceship.certificate.apple_development.all
+ types = [
+ Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPMENT,
+ Spaceship::ConnectAPI::Certificate::CertificateType::MAC_APP_DEVELOPMENT
+ ]
elsif profile_type == Spaceship::ConnectAPI::Profile::ProfileType::MAC_APP_STORE || profile_type == Spaceship::ConnectAPI::Profile::ProfileType::MAC_CATALYST_APP_STORE
- certificates = Spaceship.certificate.mac_app_distribution.all +
- Spaceship.certificate.apple_distribution.all
+ types = [
+ Spaceship::ConnectAPI::Certificate::CertificateType::DISTRIBUTION,
+ Spaceship::ConnectAPI::Certificate::CertificateType::MAC_APP_DISTRIBUTION
+ ]
elsif profile_type == Spaceship::ConnectAPI::Profile::ProfileType::MAC_APP_DIRECT || profile_type == Spaceship::ConnectAPI::Profile::ProfileType::MAC_CATALYST_APP_DIRECT
- certificates = Spaceship.certificate.developer_id_application.all
+ types = [
+ Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_APPLICATION
+ ]
else
- certificates = Spaceship.certificate.mac_app_distribution.all +
- Spaceship.certificate.apple_distribution.all
+ types = [
+ Spaceship::ConnectAPI::Certificate::CertificateType::DISTRIBUTION,
+ Spaceship::ConnectAPI::Certificate::CertificateType::MAC_APP_DISTRIBUTION
+ ]
end
end
- certificates
+ fetch_certificates(types)
end
def devices_to_use
# Only use devices if development or adhoc
return [] if !Sigh.config[:development] && !Sigh.config[:adhoc]
- device_class = case Sigh.config[:platform].to_s
- when 'ios'
- [
- Spaceship::ConnectAPI::Device::DeviceClass::APPLE_WATCH,
- Spaceship::ConnectAPI::Device::DeviceClass::IPAD,
- Spaceship::ConnectAPI::Device::DeviceClass::IPHONE,
- Spaceship::ConnectAPI::Device::DeviceClass::IPOD
- ].join(",")
- when 'tvos'
- Spaceship::ConnectAPI::Device::DeviceClass::APPLE_TV
- when 'macos', 'catalyst'
- Spaceship::ConnectAPI::Device::DeviceClass::MAC
- end
+ device_classes = case Sigh.config[:platform].to_s
+ when 'ios'
+ [
+ Spaceship::ConnectAPI::Device::DeviceClass::APPLE_WATCH,
+ Spaceship::ConnectAPI::Device::DeviceClass::IPAD,
+ Spaceship::ConnectAPI::Device::DeviceClass::IPHONE,
+ Spaceship::ConnectAPI::Device::DeviceClass::IPOD
+ ]
+ when 'tvos'
+ [Spaceship::ConnectAPI::Device::DeviceClass::APPLE_TV]
+ when 'macos', 'catalyst'
+ [Spaceship::ConnectAPI::Device::DeviceClass::MAC]
+ end
- filter = { deviceClass: device_class }
- return Spaceship::ConnectAPI::Device.all(filter: filter)
+ if api_token
+ return Spaceship::ConnectAPI::Device.all.select do |device|
+ device_classes.include?(device.device_class)
+ end
+ else
+ filter = { deviceClass: device_classes.join(",") }
+ return Spaceship::ConnectAPI::Device.all(filter: filter)
+ end
end
# Certificate to use based on the current distribution mode
def certificates_to_use
certificates = certificates_for_profile_and_platform
@@ -271,10 +312,11 @@
# verify certificates
if Helper.mac?
unless Sigh.config[:skip_certificate_verification]
certificates = certificates.find_all do |c|
file = Tempfile.new('cert')
- file.write(c.download_raw)
+ raw_data = Base64.decode64(c.certificate_content)
+ file.write(raw_data)
file.close
FastlaneCore::CertChecker.installed?(file.path)
end
end