GeezerVison is showing github.com — Create `changetool` script for validating change-notes by mario-campos · Pull Request #4113 · github/codeql-action
Conversation
This PR introduces a distinct NPM package/script under scripts/changetool for the purpose of validating change-notes (and eventually, in a subsequent PR, merging change-notes into CHANGELOG.md).
Presently, this script has only one command, validate (executed as npm --workspace changetool start validate), which accepts path(s) to change-note files to be validated. Any flaws in the change-notes are described in the output, and the command will exit with 1.
$ npm --workspace changetool start validate package.json
> [email protected] start
> tsx index.ts validate package.json
package.json: invalid filename; must match pattern YYYY-MM-DD-id.md
package.json: invalid category; must be one of: breaking, feature, improvement, securityFix, fix, unship, deprecation, knownIssue, misc
package.json: invalid Markdown; content must be a single unordered list with hyphen bullets and no other Markdown elements
Risk assessment
For internal use only. Please select the risk level of this change:
- Low risk: Changes are fully under feature flags, or have been fully tested and validated in pre-production environments and are highly observable, or are documentation or test only.
Which use cases does this change impact?
Workflow types:
Products:
Environments:
- Testing/None - This change does not impact any CodeQL workflows in production.
How did/will you validate this change?
- Unit tests - I am depending on unit test coverage (i.e. tests in
.test.ts files).
If something goes wrong after this change is released, what are the mitigation and rollback strategies?
- Development/testing only - This change cannot cause any failures in production.
How will you know if something goes wrong after this change is released?
Are there any special considerations for merging or releasing this change?
- No special considerations - This change can be merged at any time.
Merge / deployment checklist
- Confirm this change is backwards compatible with existing workflows.
- Consider adding a changelog entry for this change.
- Confirm the readme and docs have been updated if necessary.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Adds a standalone TypeScript CLI for validating change-note files.
Changes:
- Validates filenames, categories, and Markdown structure.
- Adds unit tests and package configuration.
- Integrates changetool testing and linting into CI.
Show a summary per file
| File |
Description |
scripts/changetool/index.ts |
Implements CLI dispatch and exit codes. |
scripts/changetool/cli/validate.ts |
Implements change-note validation. |
scripts/changetool/cli/validate.test.ts |
Tests validation behavior. |
scripts/changetool/package.json |
Defines scripts and dependencies. |
scripts/changetool/package-lock.json |
Locks package dependencies. |
scripts/changetool/tsconfig.json |
Configures TypeScript compilation. |
eslint.config.mjs |
Adds changetool lint configuration. |
.github/workflows/pr-checks.yml |
Adds a dedicated test job. |
Review details
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Files not reviewed (1)
- scripts/changetool/package-lock.json: Generated file
- Files reviewed: 7/8 changed files
- Comments generated: 7
- Review effort level: Balanced
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
`.every()` short-circuits on the first `false`
Apparently, the `in` operator will check inherited properties too.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice, just a couple of minor package.json suggestions:
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
mbg
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mario-campos @henrymercer Obviously a late comment, but I am wondering about the motivation for moving this to a separate project in scripts/changetool? I don't see the reasoning explained here, but wouldn't it have kept things simpler to have it in pr-checks along with the other changelog related code?
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Sep 9, 2026
Reviewers
mbg
mbg left review comments
Uh oh!
There was an error while loading. Please reload this page.
Assignees
No one assigned
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
|