-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(release-notes-preview): add breaking changes doc check
This adds a new check that enforces that a breaking changes document has been created.
- Loading branch information
Showing
5 changed files
with
167 additions
and
83 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
name: GitHub Action Release Notes Preview | ||
description: GitHub Action that publishes a new release. | ||
inputs: | ||
github-token: | ||
required: true | ||
description: GitHub token that can checkout the repository as well as create tags/releases against it. e.g. 'secrets.GITHUB_TOKEN' | ||
default: ${{ github.token }} | ||
enforce-breaking-changes-docs: | ||
required: false | ||
description: Ensure that an appropriate `v<major-version>.md` doc has been created if there are breaking changes in the PR. | ||
default: "true" | ||
extra-plugins: | ||
required: false | ||
description: Extra plugins for pre-install. You can also specify specifying version range for the extra plugins if you prefer. Defaults to install @open-turo/semantic-release-config. | ||
default: | | ||
@open-turo/semantic-release-config | ||
semantic-version: | ||
required: false | ||
description: Specify what version of semantic release to use | ||
runs: | ||
using: composite | ||
steps: | ||
- uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 0 | ||
- name: Setup tools | ||
uses: open-turo/action-setup-tools@v1 | ||
with: | ||
node: 18.16.1 | ||
- uses: jwalton/gh-find-current-pr@v1 | ||
id: find-pull-request | ||
with: | ||
state: open | ||
- name: Generate release notes | ||
id: release-notes-preview | ||
uses: open-turo/actions-release/semantic-release@add-prerelease-support | ||
env: | ||
GITHUB_TOKEN: ${{ inputs.github-token }} | ||
with: | ||
branches: ${{ github.ref_name }} | ||
dry-run: true | ||
extra-plugins: ${{ inputs.extra-plugins }} | ||
semantic-version: ${{ inputs.semantic-version }} | ||
|
||
# Add release notes preview to PR | ||
- name: Check for release notes comment | ||
uses: peter-evans/find-comment@v2 | ||
id: fc-release-notes | ||
if: steps.find-pull-request.outputs.number != '' | ||
with: | ||
issue-number: ${{ steps.find-pull-request.outputs.number }} | ||
comment-author: "github-actions[bot]" | ||
body-includes: "<!-- release notes preview comment -->" | ||
- name: Delete previous release note | ||
if: steps.fc-release-notes.outputs.comment-id != '' | ||
uses: jungwinter/comment@v1 | ||
with: | ||
type: delete | ||
comment_id: ${{ steps.fc-release-notes.outputs.comment-id }} | ||
token: ${{ inputs.github-token }} | ||
- name: Comment release notes preview | ||
uses: peter-evans/create-or-update-comment@v1 | ||
if: steps.release-notes-preview.outputs.new-release-notes != '' && steps.find-pull-request.outputs.number != '' | ||
with: | ||
issue-number: ${{ steps.find-pull-request.outputs.number }} | ||
body: | | ||
## Release notes preview | ||
Below is a preview of the release notes if your PR gets merged. | ||
--- | ||
<!-- release notes preview comment --> | ||
${{ steps.release-notes-preview.outputs.new-release-notes }} | ||
- name: Create no release created | ||
uses: peter-evans/create-or-update-comment@v1 | ||
if: steps.release-notes-preview.outputs.new-release-notes == '' && steps.find-pull-request.outputs.number != '' | ||
with: | ||
issue-number: ${{ steps.find-pull-request.outputs.number }} | ||
body: | | ||
<!-- release notes preview comment --> | ||
## Release notes preview | ||
**_No_ new release will be created.** | ||
If you are expecting a release, you will need to either fix a bug or add a feature. | ||
Chores, CI, docs, refactoring, style and other changes will not trigger a release. | ||
# Ensure that a breaking changes doc has been created | ||
- name: Check for breaking changes comment | ||
uses: peter-evans/find-comment@v2 | ||
id: fc-breaking-changes | ||
if: steps.find-pull-request.outputs.number != '' | ||
with: | ||
issue-number: ${{ steps.find-pull-request.outputs.number }} | ||
comment-author: "github-actions[bot]" | ||
body-includes: "<!-- breaking changes comment -->" | ||
- name: Delete previous breaking changes comment | ||
if: steps.fc-breaking-changes.outputs.comment-id != '' | ||
uses: jungwinter/comment@v1 | ||
with: | ||
type: delete | ||
comment_id: ${{ steps.fc-breaking-changes.outputs.comment-id }} | ||
token: ${{ inputs.github-token }} | ||
- name: "Check File Existence" | ||
id: breaking-changes-file | ||
shell: bash | ||
run: | | ||
set -e | ||
breaking_changes_file_missing=false | ||
if [ "${{ steps.release-notes-preview.outputs.new-release-published }}" = "true" ]; then | ||
echo "new release published" | ||
if [ "${{ steps.release-notes-preview.outputs.new-release-type }}" = "major" ]; then | ||
echo "braking change" | ||
file_path="docs/breaking-changes/v${{ steps.release-notes-preview.outputs.new-release-major-version }}.md" | ||
# Check if the file exists | ||
if [ -e "$file_path" ]; then | ||
echo "breaking change doc $file_path exists." | ||
else | ||
breaking change doc "File $file_path does not exist." | ||
breaking_changes_file_missing=true | ||
fi | ||
fi | ||
fi | ||
echo "required=${breaking_changes_file_missing}" >> $GITHUB_OUTPUT | ||
- name: Comment missing breaking changes doc | ||
uses: peter-evans/create-or-update-comment@v1 | ||
if: steps.breaking-changes-file.outputs.required && inputs.enforce-breaking-changes-docs && steps.find-pull-request.outputs.number != '' | ||
with: | ||
issue-number: ${{ steps.find-pull-request.outputs.number }} | ||
body: | | ||
steps.breaking-changes-file.outputs.required = ${{ steps.breaking-changes-file.outputs.required }} | ||
## Error: missing breaking changes documentation | ||
This pull request contains breaking changes, but no documentation has been added to `docs/breaking-changes/v${{ steps.release-notes-preview.outputs.new-release-major-version }}.md`. | ||
<details> | ||
<summary>Instructions for creating breaking changes document:</summary> | ||
```shell | ||
mkdir -p docs/breaking-changes | ||
cat <<EOF > docs/breaking-changes/v${{ steps.release-notes-preview.outputs.new-release-major-version }}.md | ||
# Breaking changes in v${{ steps.release-notes-preview.outputs.new-release-major-version }} | ||
[//]: # "Brief description of current major version release scope" | ||
## Description of changes | ||
[//]: # "Elaborate and add context to help the developer understand the changes." | ||
## Upgrade instructions | ||
[//]: # "Required and suggested prerequisites, example code, etc." | ||
EOF | ||
``` | ||
</details> | ||
--- | ||
<!-- breaking changes comment --> | ||
- name: Fail if we are checking for the breaking changes doc and it is missing | ||
if: steps.breaking-changes-file.outputs.required && inputs.enforce-breaking-changes-docs | ||
shell: bash | ||
run: | | ||
echo "::error::Breaking changes document is missing. Expected: ``docs/breaking-changes/v${{ steps.release-notes-preview.outputs.new-release-major-version }}.md``" |
This file was deleted.
Oops, something went wrong.