This project is a fastlane plugin. To get started with fastlane-plugin-changelog
, add it to your project by running:
fastlane add_plugin changelog
This plugin is inspired by and based on Keep a CHANGELOG project. Keep a CHANGELOG proposes a standardised format for keeping change log of your project repository in CHANGELOG.md
file. This file contains a curated, chronologically ordered list of notable changes for each version of a project in human readable format.
Since Keep a CHANGELOG project proposes a well-defined structure with sections (e.g.: [Unreleased]
, 0.3.0]
) and subsections (Added
, Changed
, Deprecated
, Removed
, Fixed
, Security
) it opens up an opportunity to automate reading from/writing to CHANGELOG.md
with fastlane
.
fastlane-plugin-changelog
consists of 3 actions enabling you to manipulate CHANGELOG.md
from fastlane
.
Reads the content of a section from your project's CHANGELOG.md
file. CHANGELOG.md
must follow structure proposed by Keep a CHANGELOG project.
read_changelog # Reads the Unreleased section from CHANGELOG.md in your project's folder
read_changelog(
changelog_path: './custom_folder/CHANGELOG.md', # Specify path to CHANGELOG.md
section_identifier: '[Unreleased]', # Specify what section to read
excluded_markdown_elements: ['-', '###'] # Specify which markdown elements should be excluded
)
Use the output of this action in conjunction with for example pilot
to upload your change log to TestFlight or with github_release
to create a new release on Github.
Updates section identifier of your project's CHANGELOG.md
file.
update_changelog(
section_identifier: '[Build 123]', # Specify what section to update
updated_section_identifier: 'Build 321' # Specify new section identifier
)
Stamps the Unreleased (see How can I minimize the effort required?) section with provided identifier in your project CHANGELOG.md
file and sets up a new Unreleased section above it.
Additionally, you can provide an optional git_tag
param, specifing git tag associated with this section. stamp_changelog
will then create a link to diff between this and previous section's tag on GitHub or Bitbucket. This will enable you to quickly get to comparison between two tags.
stamp_changelog(
section_identifier: 'Build XYZ', # Specify identifier to stamp the Unreleased section with
git_tag: 'bXYZ', # Specify reference to git tag associated with this section
stamp_date: true # Specify whether current date should be appended to stamped section line (default is `true`)
)
🤖 Moreover, if you are using danger-changelog plugin, you can leverage placeholder_line
string paramater. placeholder_line
string will be ignored when stamping an existing section and copied into [Unreleased]
section. This will help contributors to your project to see where changelog changes should be added (see feature request).
Emojifies the output of read_changelog
action. When you share changelog with the rest of your team on e.g.: Slack channel, it's nice to sprinkle your subsections with a bit of visuals so it immediately catches eyes of your teammates. emojify_changelog
uses the output of read_changelog
action to append an emoji to known subsections, for example:
Added:
- New awesome feature
Changed:
- Onboarding flow
Fixed:
- Fix Markdown links
Removed:
- User tracking
Work In Progress:
- Sales screen
Security:
- Enable SSL pinning
Deprecated:
- Obsolete contact screen
emojifies into:
*Added* 🎁:
• New awesome feature
*Changed* ↔️:
• Onboarding flow UI
*Fixed* ✅:
• Fix Markdown links
*Removed* 🚫:
• User tracking
*Work In Progress* 🚧:
• Sales screen
*Security* 🔒:
• Enable SSL pinning
*Deprecated* 💨:
• Obsolete contact screen
Example of use:
changelog = read_changelog # Read changelog
pilot(changelog: changelog) # Send binary and changelog to TestFlight
emojified_changelog = emojify_changelog # Emojify the output of `read_changelog` action
slack(message: "Hey team, we have a new build for you, which includes the following: #{emojified_changelog}") # share on Slack
NOTE: do not send emojified changelog to iTunes Connect as it cannot handle emojis.
As a developer you have to remember to keep your CHANGELOG.md up-to-date with whatever features, bug fixes etc. your repo contains and let fastlane
do the rest.
lane :beta do
build_number = get_build_number # Get build number
gym # Compile
changelog = read_changelog # Read changelog
pilot(changelog: changelog) # Send binary and changelog to TestFlight
stamp_changelog(section_identifier: "Build #{build_number}") # Stamp Unreleased section with newly released build number
end
For any other issues and feedback about this plugin, please submit it to this repository.
If you have trouble using plugins, check out the Plugins Troubleshooting doc in the main fastlane
repo.
For more information about how the fastlane
plugin system works, check out the Plugins documentation.
fastlane
is the easiest way to automate building and releasing your iOS and Android apps. To learn more, check out fastlane.tools.