diff --git a/.github/workflows/dispatch-renderless-theme-publish-alpha.yml b/.github/workflows/dispatch-renderless-theme-publish-alpha.yml index b88b82d679..b4b2369a7d 100644 --- a/.github/workflows/dispatch-renderless-theme-publish-alpha.yml +++ b/.github/workflows/dispatch-renderless-theme-publish-alpha.yml @@ -30,10 +30,6 @@ jobs: throw new Error('请输入正确的包名称') } - if (!branchName.includes('release-3.')) { - throw new Error('请使用release-3.xx.xx分支发布正式包') - } - - name: CheckOut Code uses: actions/checkout@master with: @@ -85,7 +81,7 @@ jobs: run: pnpm build:runtime - name: Run Release alpha - run: pnpm release:alpha + run: pnpm release:alpha -u - name: Publish run: | diff --git a/.github/workflows/dispatch-ui-publish-alpha.yml b/.github/workflows/dispatch-ui-publish-alpha.yml index f38490ba17..aab01eea67 100644 --- a/.github/workflows/dispatch-ui-publish-alpha.yml +++ b/.github/workflows/dispatch-ui-publish-alpha.yml @@ -18,17 +18,6 @@ jobs: build: runs-on: windows-latest steps: - - name: Parse Components - id: parseComponents - uses: actions/github-script@v6 - with: - script: | - const branchName = `${{ github.ref_name }}` - - if (!branchName.includes('release-3.')) { - throw new Error('请使用release-3.xx.xx分支发布正式包') - } - - name: CheckOut Code uses: actions/checkout@master with: @@ -63,7 +52,7 @@ jobs: run: pnpm build:ui ${{ inputs.components }} - name: Run Release alpha - run: pnpm release:alpha + run: pnpm release:alpha -u - name: Publish run: | diff --git a/internals/cli/src/commands/release/releaseAlpha.ts b/internals/cli/src/commands/release/releaseAlpha.ts index 671fd1d8e7..91d650c764 100644 --- a/internals/cli/src/commands/release/releaseAlpha.ts +++ b/internals/cli/src/commands/release/releaseAlpha.ts @@ -1,11 +1,29 @@ import { pathFromPackages } from '../build/build-ui' import path from 'node:path' import fs from 'fs-extra' +import semver from 'semver' +import { execSync } from 'node:child_process' const excludeFiles = ['.png', '.gif', '.jpeg', '.jpg', '.ttf', 'node_modules'] +/** + * @param {string} packageName 包名 + * @param {string} version 原始版本号 + * @returns {string} 自动升级patch版本后的版本号 + */ +const getPatchVersion = (packageName: string, version: string): string => { + try { + // 防止测试仓库没有发布过该包,导致获取不到版本号 + const npmVersion = execSync(`npm v ${packageName} version`).toString('utf-8').replace(/\n/, '') + const updateVersion = version.startsWith('2.') ? `2${npmVersion.slice(1)}` : npmVersion + return semver.inc(updateVersion, 'patch') + } catch (error) { + return version + } +} + // 递归遍历所有的组件,然后依次修改文件内容 -const findAllpage = (packagesPath) => { +const findAllpage = (packagesPath, updateVersion) => { if (excludeFiles.some((item) => packagesPath.includes(item)) || !fs.existsSync(packagesPath)) { return } @@ -13,19 +31,25 @@ const findAllpage = (packagesPath) => { if (fs.statSync(packagesPath).isDirectory()) { // 循环递归查找子文件夹 fs.readdirSync(packagesPath).forEach((childPatch) => { - findAllpage(path.join(packagesPath, childPatch)) + findAllpage(path.join(packagesPath, childPatch), updateVersion) }) } else { const content = fs.readFileSync(packagesPath).toString('UTF-8' as BufferEncoding) - let result = content.replace(/@opentiny\/vue/g, '@opentinyvue/vue') + const result = content.replace(/@opentiny\/vue/g, '@opentinyvue/vue') - fs.writeFileSync(packagesPath, result) + if (packagesPath.endsWith('package.json') && updateVersion) { + const packageJSON = JSON.parse(result) + packageJSON.version = getPatchVersion(packageJSON.name, packageJSON.version) + fs.writeFileSync(packagesPath, JSON.stringify(packageJSON, null, 2) + '\n') + } else { + fs.writeFileSync(packagesPath, result) + } } } -export const releaseAlpha = () => { +export const releaseAlpha = ({ updateVersion }) => { const distLists = ['dist3/', 'dist2/', 'renderless/dist', 'theme/dist', 'theme-mobile/dist', 'theme-saas/dist'] distLists.forEach((item) => { - findAllpage(pathFromPackages(item)) + findAllpage(pathFromPackages(item), updateVersion) }) } diff --git a/internals/cli/src/index.ts b/internals/cli/src/index.ts index 1ff28b04d3..a45c7f7a0f 100644 --- a/internals/cli/src/index.ts +++ b/internals/cli/src/index.ts @@ -9,7 +9,11 @@ const program = new Command() program.command('release:aurora').description('转换为aurora的包').action(releaseAurora) -program.command('release:alpha').description('转换为组织名为@opentinyvue的包').action(releaseAlpha) +program + .command('release:alpha') + .description('转换为组织名为@opentinyvue的包') + .option('-u, --updateVersion', '是否自动升级patch版本号', false) + .action(releaseAlpha) program.command('create:icon-saas').description('同步生成 icon-saas').action(createIconSaas)