xdripswift/fastlane/Fastfile

246 lines
7.0 KiB
Ruby

# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
default_platform(:ios)
TEAMID = ENV["TEAMID"]
GH_PAT = ENV["GH_PAT"]
GITHUB_WORKSPACE = ENV["GITHUB_WORKSPACE"]
GITHUB_REPOSITORY_OWNER = ENV["GITHUB_REPOSITORY_OWNER"]
FASTLANE_KEY_ID = ENV["FASTLANE_KEY_ID"]
FASTLANE_ISSUER_ID = ENV["FASTLANE_ISSUER_ID"]
FASTLANE_KEY = ENV["FASTLANE_KEY"]
DEVICE_NAME = ENV["DEVICE_NAME"]
DEVICE_ID = ENV["DEVICE_ID"]
ENV["FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT"] = "120"
platform :ios do
desc "Build Xdrip4iOS"
lane :build_xdrip4ios do
setup_ci if ENV['CI']
update_project_team(
path: "#{GITHUB_WORKSPACE}/xdrip.xcodeproj",
teamid: "#{TEAMID}"
)
api_key = app_store_connect_api_key(
key_id: "#{FASTLANE_KEY_ID}",
issuer_id: "#{FASTLANE_ISSUER_ID}",
key_content: "#{FASTLANE_KEY}"
)
previous_build_number = latest_testflight_build_number(
app_identifier: "com.#{TEAMID}.xdripswift",
api_key: api_key,
)
current_build_number = previous_build_number + 1
increment_build_number(
xcodeproj: "#{GITHUB_WORKSPACE}/xdrip.xcodeproj",
build_number: current_build_number
)
match(
type: "appstore",
git_basic_authorization: Base64.strict_encode64("#{GITHUB_REPOSITORY_OWNER}:#{GH_PAT}"),
app_identifier: [
"com.#{TEAMID}.xdripswift",
"com.#{TEAMID}.xdripswift.xDripWidget",
"com.#{TEAMID}.xdripswift.watchkitapp",
"com.#{TEAMID}.xdripswift.watchkitapp.xDripWatchComplication"
]
)
previous_build_number = latest_testflight_build_number(
app_identifier: "com.#{TEAMID}.xdripswift",
api_key: api_key,
)
current_build_number = previous_build_number + 1
increment_build_number(
xcodeproj: "#{GITHUB_WORKSPACE}/xdrip.xcodeproj",
build_number: current_build_number
)
mapping = Actions.lane_context[
SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING
]
update_code_signing_settings(
path: "#{GITHUB_WORKSPACE}/xdrip.xcodeproj",
profile_name: mapping["com.#{TEAMID}.xdripswift"],
code_sign_identity: "iPhone Distribution",
targets: ["xdrip"]
)
update_code_signing_settings(
path: "#{GITHUB_WORKSPACE}/xdrip.xcodeproj",
profile_name: mapping["com.#{TEAMID}.xdripswift.xDripWidget"],
code_sign_identity: "iPhone Distribution",
targets: ["xDrip Widget Extension"]
)
update_code_signing_settings(
path: "#{GITHUB_WORKSPACE}/xdrip.xcodeproj",
profile_name: mapping["com.#{TEAMID}.xdripswift.watchkitapp"],
code_sign_identity: "iPhone Distribution",
targets: ["xDrip Watch App"]
)
update_code_signing_settings(
path: "#{GITHUB_WORKSPACE}/xdrip.xcodeproj",
profile_name: mapping["com.#{TEAMID}.xdripswift.watchkitapp.xDripWatchComplication"],
code_sign_identity: "iPhone Distribution",
targets: ["xDrip Watch Complication Extension"]
)
gym(
export_method: "app-store",
scheme: "xdrip",
output_name: "Xdrip4iOS.ipa",
configuration: "Release",
destination: 'generic/platform=iOS',
buildlog_path: 'buildlog'
)
copy_artifacts(
target_path: "artifacts",
artifacts: ["*.mobileprovision", "*.ipa", "*.dSYM.zip"]
)
end
desc "Push to TestFlight"
lane :release do
api_key = app_store_connect_api_key(
key_id: "#{FASTLANE_KEY_ID}",
issuer_id: "#{FASTLANE_ISSUER_ID}",
key_content: "#{FASTLANE_KEY}"
)
upload_to_testflight(
api_key: api_key,
skip_submission: false,
ipa: "Xdrip4iOS.ipa",
skip_waiting_for_build_processing: true,
)
end
desc "Provision Identifiers and Certificates"
lane :identifiers do
setup_ci if ENV['CI']
ENV["MATCH_READONLY"] = false.to_s
app_store_connect_api_key(
key_id: "#{FASTLANE_KEY_ID}",
issuer_id: "#{FASTLANE_ISSUER_ID}",
key_content: "#{FASTLANE_KEY}"
)
def configure_bundle_id(name, identifier, capabilities)
bundle_id = Spaceship::ConnectAPI::BundleId.find(identifier) || Spaceship::ConnectAPI::BundleId.create(name: name, identifier: identifier)
capabilities.each { |capability|
bundle_id.create_capability(capability)
}
end
configure_bundle_id("xdrip", "com.#{TEAMID}.xdripswift", [
Spaceship::ConnectAPI::BundleIdCapability::Type::APP_GROUPS,
Spaceship::ConnectAPI::BundleIdCapability::Type::HEALTHKIT,
Spaceship::ConnectAPI::BundleIdCapability::Type::NFC_TAG_READING
])
configure_bundle_id("xDrip Widget Extension", "com.#{TEAMID}.xdripswift.xDripWidget", [
Spaceship::ConnectAPI::BundleIdCapability::Type::APP_GROUPS
])
configure_bundle_id("xDrip Watch App", "com.#{TEAMID}.xdripswift.watchkitapp", [
Spaceship::ConnectAPI::BundleIdCapability::Type::APP_GROUPS
])
configure_bundle_id("xDrip Watch Complication Extension", "com.#{TEAMID}.xdripswift.watchkitapp.xDripWatchComplication", [
Spaceship::ConnectAPI::BundleIdCapability::Type::APP_GROUPS
])
end
desc "Provision Certificates"
lane :certs do
setup_ci if ENV['CI']
ENV["MATCH_READONLY"] = false.to_s
app_store_connect_api_key(
key_id: "#{FASTLANE_KEY_ID}",
issuer_id: "#{FASTLANE_ISSUER_ID}",
key_content: "#{FASTLANE_KEY}"
)
match(
type: "appstore",
force: true,
git_basic_authorization: Base64.strict_encode64("#{GITHUB_REPOSITORY_OWNER}:#{GH_PAT}"),
app_identifier: [
"com.#{TEAMID}.xdripswift",
"com.#{TEAMID}.xdripswift.xDripWidget",
"com.#{TEAMID}.xdripswift.watchkitapp",
"com.#{TEAMID}.xdripswift.watchkitapp.xDripWatchComplication"
]
)
end
desc "Validate Secrets"
lane :validate_secrets do
setup_ci if ENV['CI']
ENV["MATCH_READONLY"] = true.to_s
app_store_connect_api_key(
key_id: "#{FASTLANE_KEY_ID}",
issuer_id: "#{FASTLANE_ISSUER_ID}",
key_content: "#{FASTLANE_KEY}"
)
def find_bundle_id(identifier)
bundle_id = Spaceship::ConnectAPI::BundleId.find(identifier)
end
find_bundle_id("com.#{TEAMID}.xdripswift")
match(
type: "appstore",
git_basic_authorization: Base64.strict_encode64("#{GITHUB_REPOSITORY_OWNER}:#{GH_PAT}"),
app_identifier: [],
)
end
desc "Nuke Certs"
lane :nuke_certs do
setup_ci if ENV['CI']
ENV["MATCH_READONLY"] = false.to_s
app_store_connect_api_key(
key_id: "#{FASTLANE_KEY_ID}",
issuer_id: "#{FASTLANE_ISSUER_ID}",
key_content: "#{FASTLANE_KEY}"
)
match_nuke(
type: "appstore",
team_id: "#{TEAMID}",
skip_confirmation: true,
git_basic_authorization: Base64.strict_encode64("#{GITHUB_REPOSITORY_OWNER}:#{GH_PAT}")
)
end
end