Files

297 lines
11 KiB
Ruby

default_platform(:ios)
APP_ID = ENV["APP_ID"]
APP_IDENTIFIER_DEV = ENV["APP_IDENTIFIER_DEV"]
APP_IDENTIFIER_RELEASE = ENV["APP_IDENTIFIER_RELEASE"]
PROVISIONING_PROFILE_SPECIFIER_DEV = ENV["PROVISIONING_PROFILE_SPECIFIER_DEV"]
PROVISIONING_PROFILE_SPECIFIER_APPSTORE = ENV["PROVISIONING_PROFILE_SPECIFIER_APPSTORE"]
TEMP_KEYCHAIN_USER = ENV["TEMP_KEYCHAIN_USER"]
TEMP_KEYCHAIN_PASSWORD = ENV["TEMP_KEYCHAIN_PASSWORD"]
APPLE_ISSUER_ID = ENV["APPLE_ISSUER_ID"]
APPLE_KEY_ID = ENV["APPLE_KEY_ID"]
APPLE_KEY_CONTENT = ENV["APPLE_KEY_CONTENT"]
GIT_AUTHORIZATION = ENV["GIT_AUTHORIZATION"]
APP_CENTER_API_TOKEN = ENV["APP_CENTER_API_TOKEN"]
XCCONFIG_DEV_INFURA_PROJECT_ID = ENV["XCCONFIG_DEV_INFURA_PROJECT_ID"]
XCCONFIG_DEV_INFURA_PROJECT_SECRET = ENV["XCCONFIG_DEV_INFURA_PROJECT_SECRET"]
XCCONFIG_DEV_ETHERSCAN_API_KEY = ENV["XCCONFIG_DEV_ETHERSCAN_API_KEY"]
XCCONFIG_DEV_ARBISCAN_API_KEY = ENV["XCCONFIG_DEV_ARBISCAN_API_KEY"]
XCCONFIG_DEV_OPTIMISM_ETHERSCAN_API_KEY = ENV["XCCONFIG_DEV_OPTIMISM_ETHERSCAN_API_KEY"]
XCCONFIG_DEV_BSCSCAN_API_KEY = ENV["XCCONFIG_DEV_BSCSCAN_API_KEY"]
XCCONFIG_DEV_POLYGONSCAN_API_KEY = ENV["XCCONFIG_DEV_POLYGONSCAN_API_KEY"]
XCCONFIG_DEV_SNOWTRACE_API_KEY = ENV["XCCONFIG_DEV_SNOWTRACE_API_KEY"]
XCCONFIG_DEV_GNOSISSCAN_API_KEY = ENV["XCCONFIG_DEV_GNOSISSCAN_API_KEY"]
XCCONFIG_DEV_FTMSCAN_API_KEY = ENV["XCCONFIG_DEV_FTMSCAN_API_KEY"]
XCCONFIG_DEV_DEFIYIELD_API_KEY = ENV["XCCONFIG_DEV_DEFIYIELD_API_KEY"]
XCCONFIG_DEV_TWITTER_BEARER_TOKEN = ENV["XCCONFIG_DEV_TWITTER_BEARER_TOKEN"]
XCCONFIG_DEV_HS_PROVIDER_API_KEY = ENV["XCCONFIG_DEV_HS_PROVIDER_API_KEY"]
XCCONFIG_DEV_WALLET_CONNECT_V2_PROJECT_KEY = ENV["XCCONFIG_DEV_WALLET_CONNECT_V2_PROJECT_KEY"]
XCCONFIG_DEV_OPEN_SEA_API_KEY = ENV["XCCONFIG_DEV_OPEN_SEA_API_KEY"]
XCCONFIG_DEV_TRONGRID_API_KEY = ENV["XCCONFIG_DEV_TRONGRID_API_KEY"]
XCCONFIG_PROD_INFURA_PROJECT_ID = ENV["XCCONFIG_PROD_INFURA_PROJECT_ID"]
XCCONFIG_PROD_INFURA_PROJECT_SECRET = ENV["XCCONFIG_PROD_INFURA_PROJECT_SECRET"]
XCCONFIG_PROD_ETHERSCAN_API_KEY = ENV["XCCONFIG_PROD_ETHERSCAN_API_KEY"]
XCCONFIG_PROD_ARBISCAN_API_KEY = ENV["XCCONFIG_PROD_ARBISCAN_API_KEY"]
XCCONFIG_PROD_OPTIMISM_ETHERSCAN_API_KEY = ENV["XCCONFIG_PROD_OPTIMISM_ETHERSCAN_API_KEY"]
XCCONFIG_PROD_BSCSCAN_API_KEY = ENV["XCCONFIG_PROD_BSCSCAN_API_KEY"]
XCCONFIG_PROD_POLYGONSCAN_API_KEY = ENV["XCCONFIG_PROD_POLYGONSCAN_API_KEY"]
XCCONFIG_PROD_SNOWTRACE_API_KEY = ENV["XCCONFIG_PROD_SNOWTRACE_API_KEY"]
XCCONFIG_PROD_GNOSISSCAN_API_KEY = ENV["XCCONFIG_PROD_GNOSISSCAN_API_KEY"]
XCCONFIG_PROD_FTMSCAN_API_KEY = ENV["XCCONFIG_PROD_FTMSCAN_API_KEY"]
XCCONFIG_PROD_DEFIYIELD_API_KEY = ENV["XCCONFIG_PROD_DEFIYIELD_API_KEY"]
XCCONFIG_PROD_TWITTER_BEARER_TOKEN = ENV["XCCONFIG_PROD_TWITTER_BEARER_TOKEN"]
XCCONFIG_PROD_HS_PROVIDER_API_KEY = ENV["XCCONFIG_PROD_HS_PROVIDER_API_KEY"]
XCCONFIG_PROD_WALLET_CONNECT_V2_PROJECT_KEY = ENV["XCCONFIG_PROD_WALLET_CONNECT_V2_PROJECT_KEY"]
XCCONFIG_PROD_OPEN_SEA_API_KEY = ENV["XCCONFIG_PROD_OPEN_SEA_API_KEY"]
XCCONFIG_PROD_TRONGRID_API_KEY = ENV["XCCONFIG_PROD_TRONGRID_API_KEY"]
def delete_temp_keychain(name)
delete_keychain(
name: name
) if File.exist? File.expand_path("~/Library/Keychains/#{name}-db")
end
def create_temp_keychain(name, password)
create_keychain(
name: name,
password: password,
unlock: false,
timeout: 0
)
end
def ensure_temp_keychain(name, password)
delete_temp_keychain(name)
create_temp_keychain(name, password)
end
def app_store_api_key
app_store_connect_api_key(
key_id: APPLE_KEY_ID,
issuer_id: APPLE_ISSUER_ID,
key_content: APPLE_KEY_CONTENT,
duration: 1200,
in_house: false
)
end
def update_dev_xcconfig(name, new_value)
update_xcconfig_value(
path: './UnstoppableWallet/UnstoppableWallet/Configuration/Development.xcconfig',
name: name,
value: new_value
)
end
def update_prod_xcconfig(name, new_value)
update_xcconfig_value(
path: './UnstoppableWallet/UnstoppableWallet/Configuration/Production.xcconfig',
name: name,
value: new_value
)
end
def prepare_environment
sh("cp ../UnstoppableWallet/UnstoppableWallet/Configuration/Development.template.xcconfig ../UnstoppableWallet/UnstoppableWallet/Configuration/Development.xcconfig")
sh("cp ../UnstoppableWallet/UnstoppableWallet/Configuration/Production.template.xcconfig ../UnstoppableWallet/UnstoppableWallet/Configuration/Production.xcconfig")
increment_build_number(
build_number: ENV['BUILD_NUMBER'],
xcodeproj: "./UnstoppableWallet/UnstoppableWallet.xcodeproj"
)
end
def apply_dev_xcconfig
update_dev_xcconfig('infura_project_id', XCCONFIG_DEV_INFURA_PROJECT_ID)
update_dev_xcconfig('infura_project_secret', XCCONFIG_DEV_INFURA_PROJECT_SECRET)
update_dev_xcconfig('etherscan_api_key', XCCONFIG_DEV_ETHERSCAN_API_KEY)
update_dev_xcconfig('optimism_etherscan_api_key', XCCONFIG_DEV_OPTIMISM_ETHERSCAN_API_KEY)
update_dev_xcconfig('arbiscan_api_key', XCCONFIG_DEV_ARBISCAN_API_KEY)
update_dev_xcconfig('bscscan_api_key', XCCONFIG_DEV_BSCSCAN_API_KEY)
update_dev_xcconfig('polygonscan_api_key', XCCONFIG_DEV_POLYGONSCAN_API_KEY)
update_dev_xcconfig('snowtrace_api_key', XCCONFIG_DEV_SNOWTRACE_API_KEY)
update_dev_xcconfig('gnosisscan_api_key', XCCONFIG_DEV_GNOSISSCAN_API_KEY)
update_dev_xcconfig('ftmscan_api_key', XCCONFIG_DEV_FTMSCAN_API_KEY)
update_dev_xcconfig('defiyield_api_key', XCCONFIG_DEV_DEFIYIELD_API_KEY)
update_dev_xcconfig('twitter_bearer_token', XCCONFIG_DEV_TWITTER_BEARER_TOKEN)
update_dev_xcconfig('hs_provider_api_key', XCCONFIG_DEV_HS_PROVIDER_API_KEY)
update_dev_xcconfig('wallet_connect_v2_project_key', XCCONFIG_DEV_WALLET_CONNECT_V2_PROJECT_KEY)
update_dev_xcconfig('open_sea_api_key', XCCONFIG_DEV_OPEN_SEA_API_KEY)
update_dev_xcconfig('trongrid_api_key', XCCONFIG_DEV_TRONGRID_API_KEY)
end
def apply_prod_xcconfig
update_prod_xcconfig('infura_project_id', XCCONFIG_PROD_INFURA_PROJECT_ID)
update_prod_xcconfig('infura_project_secret', XCCONFIG_PROD_INFURA_PROJECT_SECRET)
update_prod_xcconfig('etherscan_api_key', XCCONFIG_PROD_ETHERSCAN_API_KEY)
update_prod_xcconfig('arbiscan_api_key', XCCONFIG_PROD_ARBISCAN_API_KEY)
update_prod_xcconfig('optimism_etherscan_api_key', XCCONFIG_PROD_OPTIMISM_ETHERSCAN_API_KEY)
update_prod_xcconfig('bscscan_api_key', XCCONFIG_PROD_BSCSCAN_API_KEY)
update_prod_xcconfig('polygonscan_api_key', XCCONFIG_PROD_POLYGONSCAN_API_KEY)
update_prod_xcconfig('snowtrace_api_key', XCCONFIG_PROD_SNOWTRACE_API_KEY)
update_prod_xcconfig('gnosisscan_api_key', XCCONFIG_PROD_GNOSISSCAN_API_KEY)
update_prod_xcconfig('ftmscan_api_key', XCCONFIG_PROD_FTMSCAN_API_KEY)
update_prod_xcconfig('defiyield_api_key', XCCONFIG_PROD_DEFIYIELD_API_KEY)
update_prod_xcconfig('twitter_bearer_token', XCCONFIG_PROD_TWITTER_BEARER_TOKEN)
update_prod_xcconfig('hs_provider_api_key', XCCONFIG_PROD_HS_PROVIDER_API_KEY)
update_prod_xcconfig('wallet_connect_v2_project_key', XCCONFIG_PROD_WALLET_CONNECT_V2_PROJECT_KEY)
update_prod_xcconfig('open_sea_api_key', XCCONFIG_PROD_OPEN_SEA_API_KEY)
update_prod_xcconfig('trongrid_api_key', XCCONFIG_PROD_TRONGRID_API_KEY)
end
def force_update_devices(type, username)
match(
type: type,
username: username,
team_id: "HC4MCAXJ66",
app_identifier: "io.horizontalsystems.bank-wallet,io.horizontalsystems.bank-wallet.dev",
force_for_new_devices: true
)
end
platform :ios do
lane :dev do
keychain_name = TEMP_KEYCHAIN_USER
keychain_password = TEMP_KEYCHAIN_PASSWORD
ensure_temp_keychain(keychain_name, keychain_password)
api_key = app_store_api_key
prepare_environment
apply_dev_xcconfig
match(
type: 'adhoc',
app_identifier: "#{APP_IDENTIFIER_DEV}",
git_basic_authorization: Base64.strict_encode64(GIT_AUTHORIZATION),
readonly: true,
keychain_name: keychain_name,
keychain_password: keychain_password,
api_key: api_key
)
gym(
workspace: "UnstoppableWallet/UnstoppableWallet.xcworkspace",
scheme: "Development",
export_method: "ad-hoc",
clean: true,
export_options: {
compileBitcode: false,
provisioningProfiles: {
APP_ID => PROVISIONING_PROFILE_SPECIFIER_DEV
},
iCloudContainerEnvironment: "Development"
}
)
appcenter_upload(
api_token: APP_CENTER_API_TOKEN,
owner_name: "Horizontal-Systems",
owner_type: "organization",
app_name: "Unstoppable",
notify_testers: true,
release_notes: last_git_commit[:message]
)
delete_temp_keychain(keychain_name)
end
lane :release do
keychain_name = TEMP_KEYCHAIN_USER
keychain_password = TEMP_KEYCHAIN_PASSWORD
ensure_temp_keychain(keychain_name, keychain_password)
api_key = app_store_api_key
prepare_environment
apply_prod_xcconfig
match(
type: 'appstore',
app_identifier: "#{APP_IDENTIFIER_RELEASE}",
git_basic_authorization: Base64.strict_encode64(GIT_AUTHORIZATION),
readonly: true,
keychain_name: keychain_name,
keychain_password: keychain_password,
api_key: api_key
)
gym(
workspace: "UnstoppableWallet/UnstoppableWallet.xcworkspace",
scheme: "Production",
export_method: "app-store",
clean: true,
export_options: {
compileBitcode: false,
provisioningProfiles: {
APP_ID => PROVISIONING_PROFILE_SPECIFIER_APPSTORE
},
iCloudContainerEnvironment: "Production"
}
)
pilot(
apple_id: "#{APP_ID}",
app_identifier: "#{APP_IDENTIFIER_RELEASE}",
skip_waiting_for_build_processing: true,
skip_submission: true,
distribute_external: false,
notify_external_testers: false
)
delete_temp_keychain(keychain_name)
end
lane :new_device do |options|
force_update_devices("development", options[:username])
force_update_devices("adhoc", options[:username])
end
lane :match_readonly do
match(
type: "development",
readonly: true,
app_identifier: ["io.horizontalsystems.bank-wallet", "io.horizontalsystems.bank-wallet.dev"]
)
match(
type: "adhoc",
readonly: true,
app_identifier: ["io.horizontalsystems.bank-wallet", "io.horizontalsystems.bank-wallet.dev"]
)
match(
type: "appstore",
readonly: true,
app_identifier: ["io.horizontalsystems.bank-wallet"]
)
end
lane :match_generate do |options|
match(
type: "development",
username: options[:username],
team_id: "HC4MCAXJ66",
app_identifier: ["io.horizontalsystems.bank-wallet", "io.horizontalsystems.bank-wallet.dev"]
)
match(
type: "adhoc",
username: options[:username],
team_id: "HC4MCAXJ66",
app_identifier: ["io.horizontalsystems.bank-wallet", "io.horizontalsystems.bank-wallet.dev"]
)
match(
type: "appstore",
username: options[:username],
team_id: "HC4MCAXJ66",
app_identifier: ["io.horizontalsystems.bank-wallet"]
)
end
end