feat: add release-pr update chores as scripts to package.json (#4793)

* feat: add release-pr update chores as scripts to package.json

* fix: use all instead of api

* docs: update usage comment for extract-latest-release-node.js
This commit is contained in:
Marc Pichler 2024-06-21 11:07:36 +02:00 committed by GitHub
parent 0608f40557
commit 86019e0ff6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 8 deletions

View File

@ -59,7 +59,14 @@
"_github:draft_release:all": "npm run _github:draft_release:api && _github:draft_release:experimental && _github:draft_release:stable",
"_github:draft_release:api": "node scripts/extract-latest-release-notes.js ./api/CHANGELOG.md && VERSION=$(node scripts/get-version.js ./api/package.json | grep -oP '^\\d+\\.\\d+\\.\\d+$') && gh release create --draft --notes-file ./.tmp/release-notes.md --target main --title api/v$VERSION api/v$VERSION",
"_github:draft_release:experimental": "node scripts/extract-latest-release-notes.js ./experimental/CHANGELOG.md && VERSION=$(node scripts/get-version.js ./experimental/packages/ | grep -oP '^\\d+\\.\\d+\\.\\d+$') && gh release create --draft --notes-file ./.tmp/release-notes.md --target main --title experimental/v$VERSION experimental/v$VERSION",
"_github:draft_release:stable": "node scripts/extract-latest-release-notes.js ./CHANGELOG.md && VERSION=$(node scripts/get-version.js ./packages/ | grep -oP '^\\d+\\.\\d+\\.\\d+$') && gh release create --draft --notes-file ./.tmp/release-notes.md --target main --title v$VERSION v$VERSION"
"_github:draft_release:stable": "node scripts/extract-latest-release-notes.js ./CHANGELOG.md && VERSION=$(node scripts/get-version.js ./packages/ | grep -oP '^\\d+\\.\\d+\\.\\d+$') && gh release create --draft --notes-file ./.tmp/release-notes.md --target main --title v$VERSION v$VERSION",
"_github:update_release_pr_body_from_file": "gh pr edit $RELEASE_PR_OWNER:release/next-version --body-file ./.tmp/release-notes.md",
"_github:update_release_pr_body:all": "node scripts/extract-latest-release-notes.js api/CHANGELOG.md ./CHANGELOG.md experimental/CHANGELOG.md && npm run _github:update_release_pr_body_from_file",
"_github:update_release_pr_body:stable": "node scripts/extract-latest-release-notes.js ./CHANGELOG.md experimental/CHANGELOG.md && npm run _github:update_release_pr_body_from_file",
"_github:update_release_pr_body:experimental": "node scripts/extract-latest-release-notes.js experimental/CHANGELOG.md && npm run _github:update_release_pr_body_from_file",
"_verify_release_kind": "echo $RELEASE_KIND | grep -oP '^(all|sdk|experimental):(minor|patch)$'",
"_verify_release_remote": "git remote get-url $RELEASE_PR_REMOTE",
"_github:update_release_branch": "npm run _verify_release_kind && npm run _verify_release_remote && (git checkout main && git pull upstream main && git branch -D release/next-version; git checkout -b release/next-version && npm run prepare_release:$RELEASE_KIND && git commit -am \"chore: prepare release\" && git push $RELEASE_PR_REMOTE --force release/next-version)"
},
"repository": "open-telemetry/opentelemetry-js",
"keywords": [

View File

@ -1,23 +1,30 @@
/**
* This extracts the latest (non-"Unreleased") notes from a CHANGELOG.md and saves them to `./.tmp/release-notes.md`
* This extracts the latest (non-"Unreleased") notes from CHANGELOG.md files and saves them to `./.tmp/release-notes.md`.
* Concatenates the output when multiple paths are passed as arguments.
*
* Usage (from project root):
* - node scripts/extract-latest-release-notes.js [PATH TO CHANGELOG]
* - node scripts/extract-latest-release-notes.js [PATH TO CHANGELOG]...
* Examples:
* - node scripts/extract-latest-release-notes.js ./packages/CHANGELOG.md
* - node scripts/extract-latest-release-notes.js ./experimental/CHANGELOG.md
* - node scripts/extract-latest-release-notes.js ./api/CHANGELOG.md ./packages/CHANGELOG.md ./experimental/CHANGELOG.md
*/
const fs = require('fs');
const changelog = fs.readFileSync(process.argv[2]).toString();
// Matches everything from the first entry at h2 ('##') followed by a space and a non-prerelease semver version
// until the next entry at h2.
const firstReleaseNoteEntryExp = /^## \d+\.\d+\.\d\n.*?(?=^## )/ms;
function extractLatestChangelog(changelogPath) {
const changelog = fs.readFileSync(changelogPath).toString();
// Matches everything from the first entry at h2 ('##') followed by a space and a non-prerelease semver version
// until the next entry at h2.
const firstReleaseNoteEntryExp = /^## \d+\.\d+\.\d\n.*?(?=^## )/ms;
return changelog.match(firstReleaseNoteEntryExp)[0];
}
fs.mkdirSync('./.tmp/', {
recursive: true
});
const notesFile = './.tmp/release-notes.md'
fs.writeFileSync(notesFile, changelog.match(firstReleaseNoteEntryExp)[0]);
const changelogFilePaths = process.argv.slice(2);
fs.writeFileSync(notesFile, changelogFilePaths.map(filePath => extractLatestChangelog(filePath)).join('\n'));