From a5b03229919d8449c1de0caedb8b9d5f62b71a38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastian=20Czech?= Date: Thu, 23 Jan 2025 12:08:32 +0100 Subject: [PATCH] feat(xo-lite): add changelog to gh release description --- @xen-orchestra/lite/scripts/release.mjs | 28 +++++++++++++++++-------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/@xen-orchestra/lite/scripts/release.mjs b/@xen-orchestra/lite/scripts/release.mjs index 23271832e33..2fdaf77cd4b 100755 --- a/@xen-orchestra/lite/scripts/release.mjs +++ b/@xen-orchestra/lite/scripts/release.mjs @@ -138,6 +138,17 @@ const ghApiUploadReleaseAsset = async (releaseId, assetName, file) => { return JSON.parse(await res.text()) } +const getChangelogForVersion = async (version, changelogPath = './CHANGELOG.md') => { + const changelog = await fs.readFile(changelogPath, 'utf8') + const escapeRegex = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + const escapedVersion = escapeRegex(version) + + const versionRegex = new RegExp(`## \\*\\*${escapedVersion}\\*\\*.*?(?=\\n## \\*\\*|$)`, 's') + + const match = changelog.match(versionRegex) + return match ? match[0].trim() : undefined +} + // Validate args and assign defaults ------------------------------------------- const headSha = (await $`git rev-parse HEAD`).stdout.trim() @@ -331,22 +342,21 @@ if (ghRelease) { let release = (await ghApiCall('/releases')).find(release => release.tag_name === tag) - if (release !== undefined) { - if ( - await no( - `Release with tag ${tag} already exists on GitHub (${chalk.blue( - release.html_url - )}). Skip and proceed with upload?` - ) - ) { + if (release !== undefined && (await no('release already exists, continue?'))) { + stop() + } + if (release === undefined) { + const releaseNotes = await getChangelogForVersion(version) + + if (releaseNotes === undefined && (await no('changelog not found, continue?'))) { stop() } - } else { release = await ghApiCall('/releases', 'POST', { tag_name: tag, target_commitish: headSha, name: tag, draft: true, + body: releaseNotes, }) console.log(`Created GitHub release ${tag}: ${chalk.blue(release.html_url)}`)