From c8cc6ea1cc5f08a803e27cee10a3a680e67311ad Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Wed, 18 Oct 2023 21:29:26 -0400 Subject: [PATCH] chore(script): more prompts during publish --- scripts/lib/getPackageDetails.ts | 23 +++++++++++++++-------- scripts/release.ts | 32 +++++++++++++++++++++++--------- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/scripts/lib/getPackageDetails.ts b/scripts/lib/getPackageDetails.ts index 705384403..cfd4bd497 100644 --- a/scripts/lib/getPackageDetails.ts +++ b/scripts/lib/getPackageDetails.ts @@ -8,6 +8,7 @@ const git = simpleGit() const packagesDir = path.resolve(__dirname, '../../packages') export type PackageDetails = { + commitMessage: string name: string newCommits: number shortName: string @@ -43,6 +44,7 @@ export const getPackageDetails = async (): Promise => { }) return { + commitMessage: newCommits.latest?.message ?? '', name: packageJson.name as string, newCommits: newCommits.total, shortName: dirName, @@ -64,15 +66,20 @@ export const showPackageDetails = (details: PackageDetails[]) => { ${details .map((p) => { - const name = p?.newCommits ? chalk.bold.green(p?.shortName.padEnd(28)) : p?.shortName.padEnd(28) - const publishData = `${p?.publishedVersion} at ${p?.publishDate - .split(':') - .slice(0, 2) - .join(':') - .replace('T', ' ')}` - const newCommits = `${p?.newCommits ? `${chalk.bold.green(p?.newCommits)} new commits` : ''}` + const name = p?.newCommits + ? chalk.bold.green(p?.shortName.padEnd(28)) + : chalk.dim(p?.shortName.padEnd(28)) + const publishData = `${p?.publishedVersion.padEnd(8)}${p?.publishDate.split('T')[0]}` + const newCommits = p?.newCommits ? chalk.bold.green(`⇔${p?.newCommits} `) : ' ' + const commitMessage = p?.commitMessage + ? chalk.dim( + p.commitMessage.length < 57 + ? p.commitMessage + : p.commitMessage.substring(0, 60).concat('...'), + ) + : '' - return ` ${name}${publishData} ${newCommits}` + return ` ${name}${newCommits}${publishData} ${commitMessage}` }) .join('\n')} diff --git a/scripts/release.ts b/scripts/release.ts index 94fe34659..c1e054d49 100755 --- a/scripts/release.ts +++ b/scripts/release.ts @@ -17,6 +17,10 @@ async function main() { abort(`Invalid bump type: ${bump}.\n\nMust be one of: ${semver.RELEASE_TYPES.join(', ')}`) } + if (bump.startsWith('pre') && tag === 'latest') { + abort(`Prerelease bumps must have tag: beta or canary`) + } + const packageDetails = await getPackageDetails() showPackageDetails(packageDetails) @@ -63,7 +67,7 @@ async function main() { ${packagesToRelease .map((p) => { const { shortName, version } = packageMap[p] - return ` ${shortName.padEnd(24)} ${version} -> ${semver.inc(version, bump)}` + return ` ${shortName.padEnd(24)} ${version} -> ${semver.inc(version, bump, tag)}` }) .join('\n')} `) @@ -77,33 +81,43 @@ ${packagesToRelease const results: { name: string; success: boolean }[] = [] for (const pkg of packagesToRelease) { - const { packagePath, shortName } = packageMap[pkg] + const { packagePath, shortName, name: registryName } = packageMap[pkg] try { - console.log(chalk.bold(`\n\nPublishing ${shortName}...\n\n`)) + console.log(chalk.bold(`\n\nšŸš€ Publishing ${shortName}...\n\n`)) let npmVersionCmd = `npm --no-git-tag-version --prefix ${packagePath} version ${bump}` if (tag !== 'latest') { npmVersionCmd += ` --preid ${tag}` } execSync(npmVersionCmd, execOpts) - execSync(`git add ${packagePath}/package.json`, execOpts) const packageObj = await fse.readJson(`${packagePath}/package.json`) const newVersion = packageObj.version const tagName = `${shortName}/${newVersion}` - execSync(`git commit -m "chore(release): ${tagName} [skip ci]" `, execOpts) - execSync(`git tag -a ${tagName} -m "${tagName}"`, execOpts) + const shouldCommit = await confirm(`šŸ§‘ā€šŸ’» Commit Release?`) + if (shouldCommit) { + execSync(`git add ${packagePath}/package.json`, execOpts) + execSync(`git commit -m "chore(release): ${tagName} [skip ci]" `, execOpts) + } - if (pkg === 'payload') { - execSync(`git tag -a v${newVersion} -m "v${newVersion}"`, execOpts) + const shouldTag = await confirm(`šŸ·ļø Tag ${tagName}?`) + if (shouldTag) { + execSync(`git tag -a ${tagName} -m "${tagName}"`, execOpts) + + if (pkg === 'payload') { + execSync(`git tag -a v${newVersion} -m "v${newVersion}"`, execOpts) + } } let publishCmd = `pnpm publish -C ${packagePath} --no-git-checks` if (tag !== 'latest') { publishCmd += ` --tag ${tag}` } - execSync(publishCmd, execOpts) + const shouldPublish = await confirm(`🚢 Publish ${registryName}${chalk.yellow('@' + tag)}?`) + if (shouldPublish) { + execSync(publishCmd, execOpts) + } results.push({ name: shortName, success: true }) } catch (error) {