Fastlane Fastfile #3
In the previous post we stopped at incrementing the build number. Now let's talk about the completion. The process is a bit big, but we'll go through it, step by step:
after_all do |lane|
# Sometimes I just want to test some stuff, so I don't want to post anything on slack
if lane == :test; clean; next; end
type = lane == :hockey_debug ? 'Debug' : 'Release'
# time = Time.now
slack_params = {
message: 'iOS App successfully released to Hockey!',
payload: {
# 'Date' => "#{t.year}-#{t.month}-#{t.day} #{t.hour}:#{t.min} (#{t.zone})",
# Because we increase the version after each build,
# but submit before the increase
'Build' => "#{build_number.to_i - 1}",
'Version' => version_number,
'Type' => type
},
default_payloads: [:git_branch, :git_author, :last_git_commit]
}
if release_lane lane
slack_params[:message] = 'iOS App successfully submitted to the App Store!'
commit_tag_and_update_release_branch
else
slack_params[:payload]['Download Link'] = "#{Actions.lane_context[Actions::SharedValues::HOCKEY_DOWNLOAD_LINK]}"
end
slack slack_params
clean
end
error do |lane, exception|
if release_lane(lane)
revert_version
end
clean
end
def clean
# Don't clear provisioning profiles, as we store them in git
clean_build_artifacts exclude_pattern: ".*\.mobileprovision"
end
def release_lane(lane)
lane.to_s.include? 'release'
end
def revert_version
Shenzhen::PlistBuddy.set plist, 'CFBundleShortVersionString', @previous_version
endAnd the flow would be: after the lane has finished, check if it was a debug lane or not, so we create a proper message and a download link for Debug and Beta builds, create the hash to be sent to Slack, do the required git changhes and clean all artifacts except the mobileprovision files. If the lane failed, revert the version and clean.
The git handling method looks like this:
def commit_tag_and_update_release_branch
Actions.sh 'git add .'
Actions.sh "git commit -am \"Version Bump to #{version_number}\""
Actions.sh "git tag -a #{version_number} -m \"Version #{version_number} submitted to the App Store\""
# Earlier we already set ensure_git_branch to development, unless we used the :release_quick_fix lane
# So we know we either are on the development branch, or on a quick-fix one, so it's safe to push and pull-request
Actions.sh "git push origin #{current_branch}:#{current_branch}"
Actions.sh "git pull-request -m \"Merging #{version_number}\" -b development -h release"
endIt commits the version bump we did earlier with increase_version, tags the commit with the version_number, pushes the branch and opens a pull request (with the help of hub, a command line wrapper for GitHub).
In the next and final post, Deliverfile.