amplify-swift/fastlane/Fastfile

95 lines
2.7 KiB
Ruby

opt_out_usage
default_platform(:ios)
platform :ios do
before_all do
# Perform a fetch before inferring the next version
# to reduce race conditions with simultaneous pipelines attempting to create the same tag
sh('git', 'fetch', '--tags', '-f')
sh('git', 'fetch')
end
desc "Create a pre-release version by pushing a tag to GitHub"
lane :unstable do
next_version = calculate_next_canary_version
UI.message("Releasing unstable version: #{next_version}")
# Increment all specs and plists
increment_versions(version: next_version)
# Create tag and push to origin
add_tag(version: next_version)
end
desc "Create a release version by building and committing a changelog, pushing a tag to GitHub"
lane :release do
next_version, commits = calculate_next_release_version
UI.message("Releasing version: #{next_version}")
# Increment all specs and plists
increment_versions(version: next_version)
changelog = build_changelog(version: next_version, commits: commits)
# Commit and push
release_commit(version: next_version)
# Create tag and push to origin
add_tag(version: next_version)
post_release(version: next_version, changelog: changelog)
end
desc "Increment versions"
private_lane :increment_versions do |options|
version = options[:version].to_s
set_key_value(file: "AmplifyPlugins/Core/AWSPluginsCore/ServiceConfiguration/AmplifyAWSServiceConfiguration.swift", key: "amplifyVersion", value: version)
end
desc "Commit and push"
private_lane :release_commit do |options|
next_version = options[:version]
sh('git', 'config', '--global', 'user.email', ENV['GITHUB_EMAIL'])
sh('git', 'config', '--global', 'user.name', ENV['GITHUB_USER'])
commit_message = "chore: release #{next_version} [skip ci]"
sh('git', 'commit', '-am', commit_message)
# push to origin
sh('git', 'push', 'origin', 'release')
end
desc "Tag in git and push to GitHub"
private_lane :add_tag do |options|
next_version = options[:version]
next_tag = "v#{next_version}"
add_git_tag(tag: next_tag)
push_git_tags(tag: next_tag)
end
desc "Post-release"
private_lane :post_release do |options|
version = options[:version].to_s
changelog = options[:changelog]
tag = "v#{version}"
sh('bundle', 'exec', 'swift', 'package', 'update')
write_changelog(changelog: changelog, path: 'CHANGELOG.md')
commit_message = "chore: finalize release #{version} [skip ci]"
sh('git', 'commit', '-am', commit_message)
add_git_tag(tag: tag, force: true)
push_git_tags(tag: tag, force: true)
# push to origin
sh('git', 'push', 'origin', 'release')
sh('git', 'push', 'origin', 'release:main')
end
end