Skip to content

Commit

Permalink
build: up release script
Browse files Browse the repository at this point in the history
  • Loading branch information
posva committed Nov 29, 2024
1 parent 8ba83a0 commit 7f23474
Showing 1 changed file with 43 additions and 32 deletions.
75 changes: 43 additions & 32 deletions scripts/release.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,21 @@ Flags:
const EXPECTED_BRANCH = 'v2'
// this package will use tags like v1.0.0 while the rest will use the full package name like @pinia/[email protected]
const MAIN_PKG_NAME = 'pinia'
// whether the main package is at the root of the mono repo or this is not a mono repo
const IS_MAIN_PKG_ROOT = false
// array of folders of packages to release
const PKG_FOLDERS = [
// comment for multiline format
join(__dirname, '../packages/pinia'),
join(__dirname, '../packages/testing'),
join(__dirname, '../packages/nuxt'),
]
// files to add and commit after building a new version
const FILES_TO_COMMIT = [
// comment for multiline format
'packages/*/package.json',
'packages/*/CHANGELOG.md',
]

/**
* @type {typeof execa}
Expand All @@ -60,7 +75,7 @@ const run = (bin, args, opts = {}) =>
* @param args {string[]}
* @param opts {import('execa').Options}
*/
const dryRun = (bin, args, opts = {}) =>
const dryRun = async (bin, args, opts = {}) =>
console.log(chalk.blue(`[dry-run] ${bin} ${args.join(' ')}`), opts)
const runIfNotDry = isDryRun ? dryRun : run

Expand Down Expand Up @@ -112,13 +127,7 @@ async function main() {
}
}

const packagesFolders = [
join(__dirname, '../packages/pinia'),
join(__dirname, '../packages/testing'),
join(__dirname, '../packages/nuxt'),
]

const changedPackages = await getChangedPackages(...packagesFolders)
const changedPackages = await getChangedPackages(...PKG_FOLDERS)

if (!changedPackages.length) {
console.log(chalk.red(`No packages have changed since last release`))
Expand All @@ -129,24 +138,29 @@ async function main() {
console.log(`\n${chalk.bold.blue('This is a dry run')}\n`)
}

// allow to select which packages
const { pickedPackages } = await prompts({
type: 'multiselect',
name: 'pickedPackages',
message: 'What packages do you want to release?',
instructions: false,
min: 1,
choices: changedPackages.map((pkg) => ({
title: pkg.name,
value: pkg.name,
selected: true,
})),
})
let packagesToRelease = changedPackages

// if there are more than one package, ask which ones to release
if (packagesToRelease.length > 1) {
// allow to select which packages
const { pickedPackages } = await prompts({
type: 'multiselect',
name: 'pickedPackages',
message: 'What packages do you want to release?',
instructions: false,
min: 1,
choices: changedPackages.map((pkg) => ({
title: pkg.name,
value: pkg.name,
selected: true,
})),
})

// const packagesToRelease = changedPackages
const packagesToRelease = changedPackages.filter((pkg) =>
pickedPackages.includes(pkg.name)
)
// const packagesToRelease = changedPackages
packagesToRelease = changedPackages.filter((pkg) =>
pickedPackages.includes(pkg.name)
)
}

step(
`Ready to release ${packagesToRelease.map(({ name }) => chalk.bold.white(name)).join(', ')}`
Expand Down Expand Up @@ -271,8 +285,9 @@ async function main() {
changelogExists ? '1' : '0',
'--commit-path',
'.',
'--lerna-package',
pkg.name,
...(pkg.name === MAIN_PKG_NAME && IS_MAIN_PKG_ROOT
? []
: ['--lerna-package', pkg.name]),
...(pkg.name === MAIN_PKG_NAME
? []
: ['--tag-prefix', `${pkg.name}@`]),
Expand Down Expand Up @@ -312,11 +327,7 @@ async function main() {
const { stdout } = await run('git', ['diff'], { stdio: 'pipe' })
if (stdout) {
step('\nCommitting changes...')
await runIfNotDry('git', [
'add',
'packages/*/CHANGELOG.md',
'packages/*/package.json',
])
await runIfNotDry('git', ['add', ...FILES_TO_COMMIT])
await runIfNotDry('git', [
'commit',
'-m',
Expand Down

0 comments on commit 7f23474

Please sign in to comment.