feat: Improved pipeline efficiency and adapted to new credentials template

This commit is contained in:
Malo Léon 2023-05-15 17:00:23 +02:00
parent b67a267ca5
commit e003011b9a
3 changed files with 102 additions and 46 deletions

View File

@ -21,8 +21,20 @@ module Fastlane
creds = Helper::IosCdHelper.parseIosCredentials('.')
UI.message("👉🏼 Credentials parsed.")
# Ensure temporary keychain exists
Helper::IosCdHelper.ensure_temp_keychain(creds['temp_keychain_user'], creds['temp_keychain_password'])
# Delete keychain if existing
if File.exist?(File.expand_path("~/Library/Keychains/#{name}-db"))
other_action.delete_keychain(
name: creds['temp_keychain_user'].to_s
)
end
# Create keychain to store certifs
other_action.create_keychain(
name: creds['temp_keychain_user'].to_s,
password: creds['temp_keychain_password'].to_s,
unlock: false,
timeout: 0
)
UI.message("👉🏼 New keychain created")
# Obtain App Store Connect API key
@ -33,17 +45,16 @@ module Fastlane
duration: 1200,
in_house: false
)
UI.message("👉🏼 API Key formated")
last_testflight_build_number =
other_action.latest_testflight_build_number(
api_key: api_key,
team_id: "118579280",
team_name: "Jagger & Lewis",
team_id: creds['team_id'].to_s,
team_name: creds['team_name'].to_s,
platform: 'ios',
app_identifier: creds['developer_app_identifier'].to_s,
username: "leonmalo@sfr.fr"
username: creds['username'].to_s
) + 1
# Increment build number for latest TestFlight build
@ -72,13 +83,13 @@ module Fastlane
type: 'appstore',
app_identifier: creds['app_identifier_extensions'],
git_basic_authorization: Base64.strict_encode64(ENV["GIT_AUTHORIZATION"]),
keychain_name: creds['temp_keychain_user'],
keychain_password: creds['temp_keychain_password'],
git_url: creds['git_url'],
username: "leonmalo@sfr.fr",
team_id: "118579280",
team_name: "Jagger & Lewis",
git_url: "https://github.com/JaggerLewis/jl2022_cert.git",
keychain_name: creds['temp_keychain_user'].to_s,
keychain_password: creds['temp_keychain_password'].to_s,
git_url: creds['git_url'].to_s,
username: creds['username'].to_s,
team_id: creds['team_id'].to_s,
team_name: creds['team_name'].to_s,
git_url: creds['git_url'].to_s,
storage_mode: "git"
)
UI.message("👉🏼 App signed")
@ -88,7 +99,6 @@ module Fastlane
other_action.gym(
configuration: "Release",
workspace: "Runner.xcworkspace",
scheme: "your_schema",
export_method: "app-store",
export_options: {
provisioningProfiles: creds['provisioning_profiles']
@ -99,9 +109,6 @@ module Fastlane
# Upload build to App Store Connect using Pilot
other_action.pilot(
api_key: api_key,
username: "leonmalo@sfr.fr",
team_id: "118579280",
team_name: "Jagger & Lewis",
apple_id: creds['developer_app_id'].to_s,
app_identifier: creds['developer_app_identifier'].to_s,
skip_waiting_for_build_processing: true,
@ -110,9 +117,13 @@ module Fastlane
notify_external_testers: false,
ipa: "./Runner.ipa"
)
UI.message("👉🏼 App uploaded")
other_action.deleteTemp_keychain
# Delete keychain if existing
if File.exist?(File.expand_path("~/Library/Keychains/#{name}-db"))
other_action.delete_keychain(
name: creds['temp_keychain_user']
)
end
end
def self.description

View File

@ -0,0 +1,71 @@
require 'fastlane/action'
require_relative '../helper/ios_cd_helper'
module Fastlane
module Actions
class PromoteAction < Action
def self.run(params)
UI.message("⌛️ Promoting to Store in external test..")
# Decrypt the keys archive and Extract the keys archive
Helper::IosCdHelper.decrypt_ios_keys('.')
UI.message("👉🏼 Credentials decrypted.")
# Retrieve credentials
creds = Helper::IosCdHelper.parseIosCredentials('.')
UI.message("👉🏼 Credentials parsed.")
# Obtain App Store Connect API key
api_key = other_action.app_store_connect_api_key(
key_id: creds['apple_key_id'].to_s,
issuer_id: creds['apple_issuer_id'].to_s,
key_content: creds['apple_key_content'].to_s,
duration: 1200,
in_house: false
)
UI.message("👉🏼 API Key formated")
# Upload build to App Store Connect using Pilot
other_action.pilot(
api_key: api_key,
apple_id: creds['developer_app_id'].to_s,
app_identifier: creds['developer_app_identifier'].to_s,
skip_waiting_for_build_processing: false,
distribute_only: true,
skip_submission: true,
distribute_external: true,
notify_external_testers: true,
groups: [
"Bêta externe",
],
app_platform:'ios',
)
end
def self.description
"Testflight and AppStore deployment plugin for Fastlane, simplifying the build and deployment porcess to internal, external, and production channels, and promoting builds for testing."
end
def self.authors
["SAS Wyatt Studio"]
end
def self.return_value
end
def self.details
"The Fastlane Testflight / Appstore deloyment action streamlines the build and deployment to internal, external and production channels. Allow you to promote builds on testflight beta tests."
end
def self.available_options
[]
end
def self.is_supported?(platform)
[:ios].include?(platform)
end
end
end
end

View File

@ -5,31 +5,6 @@ require 'fastlane_core/ui/ui'
module Fastlane
module Helper
class IosCdHelper
# Define method to delete temporary keychain
def self.delete_temp_keychain(name)
if File.exist?(File.expand_path("~/Library/Keychains/#{name}-db"))
Actions::DeleteKeychainAction.run(
name: name
)
end
end
# Define method to create temporary keychain
def self.create_temp_keychain(name, password)
Actions::CreateKeychainAction.run(
name: name,
password: password,
unlock: false,
timeout: 0
)
end
# Define method to ensure that temporary keychain exists
def self.ensure_temp_keychain(name, password)
delete_temp_keychain(name)
create_temp_keychain(name, password)
end
# Check if a parameter is set or not
def self.is_set(variable)
str_variable = variable
@ -40,8 +15,7 @@ module Fastlane
# Decrypts ios credentials
def self.decrypt_ios_keys(ios_directory)
# Define the GPG command with options
# gpg_command = "gpg --quiet --batch --yes --decrypt --passphrase=#{ENV['IOS_KEYS_SECRET_PASSPHRASE']} \
gpg_command = "gpg --quiet --batch --yes --decrypt --passphrase=toto1234 \
gpg_command = "gpg --quiet --batch --yes --decrypt --passphrase=#{ENV['IOS_KEYS_SECRET_PASSPHRASE']} \
--output #{ios_directory}/ios_keys.zip #{ios_directory}/ios_keys.zip.gpg"
# Execute the GPG command using system