tools: improve release proposal linter
PR-URL: https://github.com/nodejs/node/pull/58647 Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Tierney Cyren <hello@bnb.im> Reviewed-By: Xuguang Mei <meixuguang@gmail.com>
This commit is contained in:
parent
977b5ac7dd
commit
3a7f8efe60
@ -5,7 +5,8 @@
|
|||||||
//
|
//
|
||||||
// Example:
|
// Example:
|
||||||
// $ git log upstream/vXX.x...upstream/vX.X.X-proposal \
|
// $ git log upstream/vXX.x...upstream/vX.X.X-proposal \
|
||||||
// --format='{"prURL":"%(trailers:key=PR-URL,valueonly,separator=)","title":"%s","smallSha":"%h"}' \
|
// --reverse --format='{"prURL":"%(trailers:key=PR-URL,valueonly,separator=)","title":"%s","smallSha":"%h"}' \
|
||||||
|
// | sed 's/,"title":"Revert "\([^"]\+\)""/,"title":"Revert \\"\1\\""/g' \
|
||||||
// | ./lint-release-proposal-commit-list.mjs "path/to/CHANGELOG.md" "$(git rev-parse upstream/vX.X.X-proposal)"
|
// | ./lint-release-proposal-commit-list.mjs "path/to/CHANGELOG.md" "$(git rev-parse upstream/vX.X.X-proposal)"
|
||||||
|
|
||||||
const [,, CHANGELOG_PATH, RELEASE_COMMIT_SHA] = process.argv;
|
const [,, CHANGELOG_PATH, RELEASE_COMMIT_SHA] = process.argv;
|
||||||
@ -52,20 +53,33 @@ for await (const line of stdinLineByLine) {
|
|||||||
assert.notStrictEqual(lineStart, -1, `Cannot find ${smallSha} on the list`);
|
assert.notStrictEqual(lineStart, -1, `Cannot find ${smallSha} on the list`);
|
||||||
const lineEnd = commitList.indexOf('\n', lineStart + 1);
|
const lineEnd = commitList.indexOf('\n', lineStart + 1);
|
||||||
|
|
||||||
const colonIndex = title.indexOf(':');
|
|
||||||
const expectedCommitTitle = `${`**${title.slice(0, colonIndex)}`.replace('**Revert "', '_**Revert**_ "**')}**${title.slice(colonIndex)}`;
|
|
||||||
try {
|
try {
|
||||||
assert(commitList.lastIndexOf(`/${smallSha})] - ${expectedCommitTitle} (`, lineEnd) > lineStart, `Commit title doesn't match`);
|
const colonIndex = title.indexOf(':');
|
||||||
} catch (e) {
|
const expectedCommitTitle = `${`**${title.slice(0, colonIndex)}`.replace('**Revert "', '_**Revert**_ "**')}**${title.slice(colonIndex)}`;
|
||||||
if (e?.code === 'ERR_ASSERTION') {
|
try {
|
||||||
e.operator = 'includes';
|
assert(commitList.lastIndexOf(`/${smallSha})] - ${expectedCommitTitle} (`, lineEnd) > lineStart, `Changelog entry doesn't match for ${smallSha}`);
|
||||||
e.expected = expectedCommitTitle;
|
} catch (e) {
|
||||||
e.actual = commitList.slice(lineStart + 1, lineEnd);
|
if (e?.code === 'ERR_ASSERTION') {
|
||||||
|
e.operator = 'includes';
|
||||||
|
e.expected = expectedCommitTitle;
|
||||||
|
e.actual = commitList.slice(lineStart + 1, lineEnd);
|
||||||
|
}
|
||||||
|
throw e;
|
||||||
}
|
}
|
||||||
throw e;
|
assert.strictEqual(commitList.slice(lineEnd - prURL.length - 2, lineEnd), `(${prURL})`, `when checking ${smallSha} ${title}`);
|
||||||
}
|
|
||||||
assert.strictEqual(commitList.slice(lineEnd - prURL.length - 2, lineEnd), `(${prURL})`, `when checking ${smallSha} ${title}`);
|
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
if (e?.code !== 'ERR_ASSERTION') {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
let line = 1;
|
||||||
|
for (let i = 0; i < lineStart + commitListingStart; i = changelog.indexOf('\n', i + 1)) {
|
||||||
|
line++;
|
||||||
|
}
|
||||||
|
console.error(`::error file=${CHANGELOG_PATH},line=${line},title=Release proposal linter::${e.message}`);
|
||||||
|
console.error(e);
|
||||||
|
process.exitCode ||= 1;
|
||||||
|
}
|
||||||
expectedNumberOfCommitsLeft--;
|
expectedNumberOfCommitsLeft--;
|
||||||
console.log(prURL);
|
console.log(prURL);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user