-
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
6 changed files
with
320 additions
and
55 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
# GitHub Action Lint Release Notes | ||
|
||
## Description | ||
|
||
Github action that lints release notes. It generates release notes using semantic-release and posts them as a comment in | ||
a pull request with the changes that would be included in the next version of the codebase if the pull request is | ||
merged. It also will fail if there are breaking changes and no `v<major-version>.md` doc has been created. | ||
|
||
## Configuration | ||
|
||
### Step1: Set any [Semantic Release Configuration](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#configuration) in your repository. | ||
|
||
### Step2: [Add Secrets](https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets) in your repository for the [Semantic Release Authentication](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/ci-configuration.md#authentication) Environment Variables. | ||
|
||
### Step3: Add a [Workflow File](https://help.github.com/en/articles/workflow-syntax-for-github-actions) to your repository to create custom automated processes. | ||
|
||
## Usage | ||
|
||
```yaml | ||
name: Release notes preview | ||
|
||
on: | ||
# It's import that this runs on the push event, as semantic release will not run on pull_request events | ||
push: | ||
branches-ignore: | ||
- main | ||
|
||
jobs: | ||
lint-release-notes: | ||
name: Lint release notes | ||
steps: | ||
- uses: open-turo/actions-release/lint-release-notes@v2 | ||
with: | ||
github-token: ${{ secrets.GITHUB_TOKEN }} | ||
``` | ||
## Inputs | ||
| parameter | description | required | default | | ||
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------------------------------------- | | ||
| checkout-repo | Perform checkout as first step of action | `false` | true | | ||
| enforce-breaking-changes-docs | Ensure that an appropriate `v<major-version>.md` doc has been created if there are breaking changes in the PR. Fail if required and missing. | `false` | `true` | | ||
| extra-plugins | 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. | `false` | @open-turo/semantic-release-config@^1.4.0 | | ||
| github-token | GitHub token that can checkout the repository as well as create tags/releases against it. e.g. 'secrets.GITHUB_TOKEN' | `true` | | | ||
| semantic-version | Specify what version of semantic release to use | `false` | | | ||
|
||
## Outputs | ||
|
||
N/A | ||
|
||
## Runs | ||
|
||
This action is an `composite` action. | ||
|
||
## Notes | ||
|
||
- By default, this action will perform actions/checkout as its first step. |
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,166 @@ | ||
name: GitHub Action Release Notes Preview | ||
description: GitHub Action that publishes a new release. | ||
inputs: | ||
checkout-repo: | ||
required: false | ||
description: Perform checkout as first step of action | ||
default: "true" | ||
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 | ||
if: inputs.checkout-repo | ||
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@v2 | ||
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 | ||
echo "breaking change doc $file_path does not exist." | ||
breaking_changes_file_missing=true | ||
fi | ||
fi | ||
fi | ||
echo "Output: required=${breaking_changes_file_missing}" | ||
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 == 'true' && inputs.enforce-breaking-changes-docs == 'true' && steps.find-pull-request.outputs.number != '' | ||
with: | ||
issue-number: ${{ steps.find-pull-request.outputs.number }} | ||
body: | | ||
## 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 == 'true' && inputs.enforce-breaking-changes-docs == 'true' | ||
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``" && exit 1 |
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 |
---|---|---|
@@ -1,51 +1,5 @@ | ||
# GitHub Action Release Notes Preview | ||
# DEPRECATED!!!! GitHub Action Release Notes Preview | ||
|
||
## Description | ||
|
||
Github action that generates release notes using semantic-release and posts them as a comment in a pull request with the changes that would be included in the next version of the codebase if the pull request is merged. | ||
|
||
## Configuration | ||
|
||
### Step1: Set any [Semantic Release Configuration](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#configuration) in your repository. | ||
|
||
### Step2: [Add Secrets](https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets) in your repository for the [Semantic Release Authentication](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/ci-configuration.md#authentication) Environment Variables. | ||
|
||
### Step3: Add a [Workflow File](https://help.github.com/en/articles/workflow-syntax-for-github-actions) to your repository to create custom automated processes. | ||
|
||
## Usage | ||
|
||
```yaml | ||
name: Release notes preview | ||
|
||
on: | ||
# It's import that this runs on the push event, as semantic release will not run on pull_request events | ||
push: | ||
|
||
jobs: | ||
release-notes: | ||
name: Release notes preview | ||
steps: | ||
- uses: open-turo/actions-release/release-notes-preview@v1 | ||
with: | ||
github-token: ${{ secrets.GITHUB_TOKEN }} | ||
``` | ||
## Inputs | ||
| parameter | description | required | default | | ||
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------------------------------------- | | ||
| extra-plugins | 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. | `false` | @open-turo/semantic-release-config@^1.4.0 | | ||
| github-token | GitHub token that can checkout the repository as well as create tags/releases against it. e.g. 'secrets.GITHUB_TOKEN' | `true` | | | ||
| semantic-version | Specify what version of semantic release to use | `false` | | | ||
|
||
## Outputs | ||
|
||
N/A | ||
|
||
## Runs | ||
|
||
This action is an `composite` action. | ||
|
||
## Notes | ||
|
||
- By default, this action will perform actions/checkout as its first step. | ||
This has been deprecated and will be removed in the future. Please use `open-turo/actions-release/lint-release-notes@v1`. |
Oops, something went wrong.