From 86019e0ff6ad86b955b91b4c3ea4bb6bea9bdb90 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Fri, 21 Jun 2024 11:07:36 +0200 Subject: [PATCH] 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 --- package.json | 9 ++++++++- scripts/extract-latest-release-notes.js | 21 ++++++++++++++------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 021157895..92fdaa6a6 100644 --- a/package.json +++ b/package.json @@ -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": [ diff --git a/scripts/extract-latest-release-notes.js b/scripts/extract-latest-release-notes.js index daa34eda3..45e888540 100644 --- a/scripts/extract-latest-release-notes.js +++ b/scripts/extract-latest-release-notes.js @@ -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'));