Skip to content

Commit

Permalink
Add PR changelog check
Browse files Browse the repository at this point in the history
  • Loading branch information
carbolymer committed Jun 23, 2023
1 parent 204b2a0 commit 68e6165
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions .github/workflows/check-pr-changelog.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: Check if PR changelog was filled correctly
on:
merge_group:
pull_request:

jobs:
check-changelog:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm install js-yaml@4.1.0
- name: Fail if PR description is not correct
uses: actions/github-script@v6
id: check-changelog
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const yaml = require('js-yaml');
const prDescription = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number
});
const changelogRegex = /# Changelog([\s\S]*?)(?=\n#[^#])/;
const changelogMatch = prDescription.data.body.match(changelogRegex);
const changelogContent = changelogMatch ? changelogMatch [1].trim() : '';
const yamlRegex = /```yaml([\s\S]*?)```/;
const yamlMatch = changelogContent.match(yamlRegex);
const yamlContent = yamlMatch ? yamlMatch[1].trim() : '';
changelog = yaml.load(yamlContent)[0]
let isCompatibilityValid = false;
const validCompatibilityValues = ['no-api-changes', 'compatible', 'breaking'];
if (Array.isArray(changelog.compatibility) && !!changelog.compatibility) {
isCompatibilityValid = changelog.compatibility.every(value => validCompatibilityValues.includes(value));
} else {
isCompatibilityValid = validCompatibilityValues.includes(changelog.compatibility);
}
if(!isCompatibilityValid) {
console.error(`PR changelog has invalid compatibility: ${changelog.compatibility}\nExpected one, or more of: ${validCompatibilityValues}`)
}
let isTypeValid = false;
const validTypeValues = ['feature', 'bugfix', 'test', 'maintenance'];;
if (Array.isArray(changelog.type) && !!changelog.type) {
isTypeValid = changelog.type.every(value => validTypeValues.includes(value));
} else {
isTypeValid = validTypeValues.includes(changelog.type);
}
if (!isTypeValid) {
console.error(`PR changelog has invalid type: ${changelog.type}\nExpected one, or more of: ${validTypeValues}`)
}
let isDescriptionValid = true;
if (changelog.description.trim() === '<insert-changelog-description-here>') {
console.error('PR changelog description has not been updated!')
isDescriptionValid = false;
} else if (!changelog.description.trim()) {
console.error('PR changelog description field is missing!')
isDescriptionValid = false;
}
if (!isCompatibilityValid || !isTypeValid || !isDescriptionValid) {
console.error('Failed PR changelog checks!');
process.exit(1);
}

0 comments on commit 68e6165

Please sign in to comment.