UNPKG

@elora-cloud/elora-cli

Version:
125 lines (122 loc) 4.39 kB
import { dirname, join, isAbsolute } from 'node:path'; import { fileURLToPath } from 'node:url'; import findpkg from 'find-package-json'; import prompts from 'prompts'; import releaseIt from 'release-it'; import { isMonorepoProject, setPublishRegistry, setPublishTag, isMonorepo } from '../../common/index.mjs'; import { CWD } from '../../common/constant.mjs'; import { errorConsole } from '../../common/logger.mjs'; const __dirname = dirname(fileURLToPath(import.meta.url)); let PLUGIN_PATH = join(__dirname, './elora-cli-release-plugin.mjs'); if (isAbsolute(PLUGIN_PATH)) { PLUGIN_PATH = `file://${PLUGIN_PATH}`; } async function release(command) { await isMonorepoProject(); if (command.registry) { // 配置了registry setPublishRegistry(command.registry); } let increment; let preRelease = false; const includes = ['beta', 'alpha', 'rc', 'next']; const excludes = ['patch', 'minor', 'major']; const p = findpkg(CWD); const pkg = p.next().value; const v = pkg?.version; const name = pkg?.name; if (!pkg || !v || !name) { throw new Error('获取package.json失败'); } const splitIndex = !name.includes('/') ? 1 : name.indexOf('/') + 1; const myName = name.startsWith('@') ? name.slice(splitIndex) : name; if (!command.tag) { const response = await prompts({ type: 'select', name: 'tag', message: '请选择要发布的版本', choices: [ { title: '小版本', value: 'patch', description: '用于小版本更新', }, { title: '中版本', value: 'minor', description: '用于中版本更新', }, { title: '大版本', value: 'major', description: '用于大版本更新', }, { title: '内测版本', value: 'alpha', description: '用于发布内部版本,bug多,不稳定,不断添加新功能', }, { title: '公测版本', value: 'beta', description: '用于发布公测版本的包,比alpha版本稳定,不断添加新功能', }, { title: '候选版本', value: 'rc', description: '用于发布候选版本的包,基本不添加新功能,修复完bug即可进入正式版', }, { title: '前瞻版本', value: 'next', description: '用于发布候选版本的包,基本不添加新功能,修复完bug即可进入正式版', }, ], }); increment = response.tag; if (includes.includes(response.tag)) { increment = v.includes(response.tag) ? undefined : 'patch'; preRelease = response.tag; command.tag = response.tag; } } else { if (!excludes.includes(command.tag)) { increment = v.includes(command.tag) ? undefined : 'patch'; preRelease = command.tag; } } if (command.tag) { setPublishTag(command.tag); } // eslint-disable-next-line no-template-curly-in-string const tagName = isMonorepo() ? `${myName}-v` + '${version}' : 'v${version}'; // eslint-disable-next-line no-template-curly-in-string const commitMessage = isMonorepo() ? `release(${myName}): ` + '${version}' : 'release: ${version}'; try { await releaseIt({ plugins: { [PLUGIN_PATH]: {}, }, npm: { publish: false, versionArgs: ['--workspaces-update=false'], }, increment, preRelease, git: { tagName, commitMessage, }, }); } catch (e) { if (e.message.includes('Working dir must be clean')) { errorConsole('请先合并或者提交代码'); } else { console.log(e); } } } export { release };