Preview the semantic release notes that would result from merging a Github PR.
This semantic-release plugin will post a Github PR comment with a preview of the release that would result from merging.
npm install -D semantic-release semantic-release-github-prnpx semantic-release-github-prIt helps to think about semantic-release-github-pr as a variation on semantic-release's default behavior, using the latter's plugin system to modify some behaviors:
-
If a new release would result from running
semantic-release, instead of publishing a new release of a package, it posts a comment with the changelog to matching Github PRs. -
It posts a static message when there's no release (for clarity).
-
It cleans up any PR comments it previously made (to keep from flooding PRs or leaving outdated information).
A PR gets a comment if:
-
The PR's from branch matches the current branch (that this plugin is being run on).
To cover multiple CI scenarios (see below), either of:
- The PR's test merge commit matches the current branch's
gitHEAD. - The PR and the current branch have the same
gitHEAD.
- The PR's test merge commit matches the current branch's
-
The PR's base branch matches
master(default) unless otherwise configured via thebaseBranchoption.
It is assumed the user is already fully familiar with semantic-release and its workflow.
Github authentication must be configured, exactly the same as for semantic-relase's default @semantic-release/github plugin. PR comments will be posted by the associated GitHub user.
It's possible to configure the expected base branch when matching a PR via a baseBranch option set in the release config.
E.g., in a package.json release config:
{
"release": {
"baseBranch": "staging"
}
}This plugin is best used with a CI build process to fully automate the posting of comments in Github PRs. Ideally, it should run whenever a PR is opened/updated.
This plugin relies on semantic-release's dry-run feature. Unfortunately, that feature is gated by strict run-time checks, including one that ensures that the branch semantic-release runs on is in the release configuration. It depends on env-ci to enforce the checks in CI environments, which doesn't properly resolve the branch name when running in GitHub Actions, requiring a workaround:
- run: git checkout -b ${{ github.head_ref }}
- run: unset GITHUB_ACTIONS && npx semantic-release-github-prTo only run when necessary, we use the $TRAVIS_PULL_REQUEST environment variable to detect whether the build is a "pull request build".
after_success:
- "[[ $TRAVIS_PULL_REQUEST != 'false' ]] && npx semantic-release-github-pr || exit 0"To run only when necessary, we use the $CI_PULL_REQUEST environment variable to detect whether the build has a corresponding pull request.
Unfortunately, CircleCI only supports building on push, not when a PR is created. This limits the usefulness of the plugin somewhat, as a build will have to be triggered manually after a PR is opened for the changelog to post.
post:
- "[[ $CI_PULL_REQUEST != '' ]] && npx semantic-release-github-pr || exit 0"