123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /* eslint-disable no-continue */
- import { createWriteStream, mkdirSync } from 'node:fs'
- import { spawnSync } from 'node:child_process'
- import prompts from 'prompts'
- import { TARGET_BRANCH } from './config.js'
- function maxSemverness (a, b) {
- if (a === 'major' || b === 'major') return 'major'
- if (a === 'premajor' || b === 'premajor') return 'premajor'
- if (a === 'minor' || b === 'minor') return 'minor'
- if (a === 'preminor' || b === 'preminor') return 'preminor'
- if (a === 'prepatch' || b === 'prepatch') return 'prepatch'
- if (a === 'prepatch' || b === 'prerelease') return 'prerelease'
- return 'patch'
- }
- export default async function pickSemverness (
- spawnOptions,
- LAST_RELEASE_COMMIT,
- releaseFileUrl,
- packagesList,
- ) {
- mkdirSync(new URL('.', releaseFileUrl), { recursive: true })
- const releaseFile = createWriteStream(releaseFileUrl)
- releaseFile.write('releases:\n')
- let uppySemverness
- for await (const workspaceInfo of packagesList) {
- const { location, name } = JSON.parse(workspaceInfo)
- if (!name.startsWith('@uppy/')) continue
- const { stdout } = spawnSync(
- 'git',
- [
- '--no-pager',
- 'log',
- '--format=- %s',
- `${LAST_RELEASE_COMMIT}..`,
- '--',
- location,
- ],
- spawnOptions,
- )
- if (stdout.length === 0) {
- console.log(`No commits since last release for ${name}, skipping.`)
- continue
- }
- console.log('\n')
- console.log('-'.repeat(20))
- console.log(name)
- console.log(
- `\nHere are the commits that landed on ${name} since previous release:\n${stdout}\n`,
- )
- console.log(
- `Check the web UI at https://github.com/transloadit/uppy/tree/${TARGET_BRANCH}/${encodeURI(
- location,
- )}.`,
- )
- const response = await prompts({
- type: 'select',
- name: 'value',
- message: `What should be the semverness of next ${name} release?`,
- choices: [
- { title: 'Pre-release', value: 'prerelease' },
- { title: 'Skip this package', value: '' },
- { title: 'Patch', value: 'patch' },
- { title: 'Minor', value: 'minor' },
- { title: 'Major', value: 'major' },
- ],
- initial: 2,
- })
- if (!response.value) {
- console.log('Skipping.')
- continue
- }
- releaseFile.write(` ${JSON.stringify(name)}: ${response.value}\n`)
- uppySemverness = maxSemverness(uppySemverness, response.value)
- }
- if (uppySemverness == null) throw new Error('No package to release, aborting.')
- releaseFile.write(` "uppy": ${uppySemverness}\n`)
- releaseFile.close()
- }
|