Skip to content
Daniel edited this page Jun 24, 2020 · 9 revisions

The purpose of this page is to document JOSESwift's release automation. It should give maintainers an overview on how to release a new version of JOSESwift.

We heavily rely on Fastlane for automating our release process. The purpose of automating this process is to get rid of repetitive, error-prone tasks while promoting short release cycles.

TLDR

  1. πŸ€– bundle exec fastlane prepare type:<major|minor|patch>
  2. ⏳ Wait for approval on release pull request
  3. πŸš€ bundle exec fastlane release

Release Process

Releasing a new version of JOSESwift consists of two mostly automated parts:

  1. Release preparation
  2. Release

Release Preparation πŸ€– πŸ”§

This will bump the version number of the project, format Swift code, and run the tests. All changes will be committed and pushed to a release branch release/<x-x-x>.

  1. Checkout master and run bundle exec fastlane prepare type:<major|minor|patch> depending on the version increment you want to make. See Semantic Versioning for details.
  2. The lane will halt before it finishes and ask for your confirmation to continue. If you want to include any changes in the release, you can make them before you continue the lane. MAzbe double check the automatically updated CHANGELOG.md? Fastlane will automatically commit your changes to the release branch it created.

Release Pull Request πŸ€– πŸ™

If you have GitHub's CLI installed the prepare step outlined above will automatically create a pull request with the version number bump. Once the pull request has been approved, merge it and continue with the last step.

If you don't have GitHub's CLI installed, go to GitHub and create a pull request to merge the prepared release branch to master.

Release πŸ€– πŸš€

  1. Checkout master and make sure it is up-to-date with the remote.
  2. Run bundle exec fastlane release. This will tag the release and push the tag to GitHub. It will also push the updated podspec to the CocoaPods trunk.
Clone this wiki locally