diff --git a/package.json b/package.json index 4253ac7a..7a54e552 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@gitmars/monorepo", "description": "这是一个git工作流工具", - "version": "7.0.0-beta.19", + "version": "7.0.0-beta.20", "packageManager": "pnpm@9.0.6", "main": "index.js", "files": [ diff --git a/packages/api/package.json b/packages/api/package.json index 95e57fce..f0fe0bc5 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,7 +1,7 @@ { "name": "@gitmars/api", "description": "gitmars api", - "version": "7.0.0-beta.19", + "version": "7.0.0-beta.20", "private": false, "main": "./dist/index.cjs.js", "module": "./dist/index.esm-bundler.js", diff --git a/packages/build/package.json b/packages/build/package.json index acdc4558..5839fb0c 100644 --- a/packages/build/package.json +++ b/packages/build/package.json @@ -1,7 +1,7 @@ { "name": "@gitmars/build", "description": "gitmars build", - "version": "7.0.0-beta.19", + "version": "7.0.0-beta.20", "private": false, "main": "./dist/index.cjs.js", "module": "./dist/index.esm-bundler.js", diff --git a/packages/build/src/buildConfig.ts b/packages/build/src/buildConfig.ts index d0214cf5..c31a98ec 100644 --- a/packages/build/src/buildConfig.ts +++ b/packages/build/src/buildConfig.ts @@ -3,10 +3,17 @@ import apollo from 'node-apollo' import sh from 'shelljs' import request from '@jssj/request' import chalk from 'chalk' +import to from 'await-to-done' import { CACHE_PATH, isCacheExpired, updateCacheTime } from '@gitmars/cache' import { debug, isFileExist, removeFile, writeFile } from '@gitmars/utils' import { getConfig } from '@gitmars/git' -import type { ApolloConfigType, GitmarsConfigApisBuildConfigType, GitmarsConfigType } from './types' +import type { + ApolloBranchList, + ApolloConfigProjectType, + ApolloConfigType, + GitmarsConfigApisBuildConfigType, + GitmarsConfigType +} from './types' import lang from './lang' const { t } = lang @@ -35,7 +42,7 @@ function getNamespace(params: GitmarsConfigApisBuildConfigType['params'] = {}): * * @returns buildConfig - Return the configuration object */ -export async function getBuildConfig(): Promise { +export async function getBuildConfig(): Promise { const config = getConfig() as GitmarsConfigType const { apis = {} } = config let NS, _buildConfig @@ -49,7 +56,7 @@ export async function getBuildConfig(): Promise { } else { sh.echo(chalk.red(t('Please configure apollo or buildConfigApi'))) process.exit(0) - return null + return } const BUILD_CONFIG_TIME_NAME = `buildConfigTime-${NS}` @@ -76,7 +83,7 @@ export async function getBuildConfig(): Promise { try { apolloConfig = JSON.parse(config.apolloConfig) } catch { - return null + return } } else { apolloConfig = config.apolloConfig @@ -89,6 +96,25 @@ export async function getBuildConfig(): Promise { return _buildConfig } +/** + * 读取项目配置 + * + * @param projectName - project name + * @param env - env type, ApolloBranchList + * @param config - build config, not required + * @returns buildConfig - Return the configuration object + */ +export async function getProjectOption( + projectName: string, + env: ApolloBranchList, + config?: ApolloConfigType +): Promise { + if (!config) { + ;[, config] = await to(getBuildConfig().then(res => res || undefined)) + } + return config?.[env]?.list?.find(item => item.name === projectName) +} + export function cleanBuildConfig() { removeFile([ { diff --git a/packages/build/src/index.default.ts b/packages/build/src/index.default.ts index 1f63fcda..7a1cbd5d 100644 --- a/packages/build/src/index.default.ts +++ b/packages/build/src/index.default.ts @@ -1,11 +1,12 @@ import runJenkins from './runJenkins' -import { cleanBuildConfig, getBuildConfig } from './buildConfig' +import { cleanBuildConfig, getBuildConfig, getProjectOption } from './buildConfig' export type { RunJenkinsOptionType } from './runJenkins' export type * from './types' export default { version: '__VERSION__', getBuildConfig, + getProjectOption, cleanBuildConfig, runJenkins } diff --git a/packages/build/src/index.ts b/packages/build/src/index.ts index f4f567e2..20a0bc88 100644 --- a/packages/build/src/index.ts +++ b/packages/build/src/index.ts @@ -1,5 +1,5 @@ export { default as runJenkins } from './runJenkins' -export { cleanBuildConfig, getBuildConfig } from './buildConfig' +export { cleanBuildConfig, getBuildConfig, getProjectOption } from './buildConfig' export { default } from './index.default' export type * from './index.default' diff --git a/packages/cache/package.json b/packages/cache/package.json index dddf8ad4..63db1d0e 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,7 +1,7 @@ { "name": "@gitmars/cache", "description": "gitmars cache", - "version": "7.0.0-beta.19", + "version": "7.0.0-beta.20", "private": false, "main": "./dist/index.cjs.js", "module": "./dist/index.esm-bundler.js", diff --git a/packages/core/package.json b/packages/core/package.json index 2ba2f7b7..842bac51 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@gitmars/core", "description": "gitmars核心程序", - "version": "7.0.0-beta.19", + "version": "7.0.0-beta.20", "private": false, "main": "./dist/index.cjs.js", "module": "./dist/index.esm-bundler.js", diff --git a/packages/docs/package.json b/packages/docs/package.json index 43c157fc..91e9e26b 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -1,7 +1,7 @@ { "name": "@gitmars/docs", "description": "gitmars文档库", - "version": "7.0.0-beta.19", + "version": "7.0.0-beta.20", "private": false, "files": [ "dist", diff --git a/packages/git/package.json b/packages/git/package.json index c41bd324..4bc3d670 100644 --- a/packages/git/package.json +++ b/packages/git/package.json @@ -1,7 +1,7 @@ { "name": "@gitmars/git", "description": "gitmars git", - "version": "7.0.0-beta.19", + "version": "7.0.0-beta.20", "private": false, "main": "./dist/index.cjs.js", "module": "./dist/index.esm-bundler.js", diff --git a/packages/gitmars/package.json b/packages/gitmars/package.json index 0ad251ec..bc70e0fa 100644 --- a/packages/gitmars/package.json +++ b/packages/gitmars/package.json @@ -2,7 +2,7 @@ "name": "gitmars", "description": "这是一个git工作流工具", "type": "module", - "version": "7.0.0-beta.19", + "version": "7.0.0-beta.20", "private": false, "bin": { "gitm": "lib/gitm.mjs" diff --git a/packages/gitmars/src/gitm-build-mp.ts b/packages/gitmars/src/gitm-build-mp.ts index cb6779fa..4aa3896c 100755 --- a/packages/gitmars/src/gitm-build-mp.ts +++ b/packages/gitmars/src/gitm-build-mp.ts @@ -6,8 +6,8 @@ import chalk from 'chalk' import to from 'await-to-done' import { createArgs } from '@gitmars/utils' import { getGitConfig, getIsGitProject } from '@gitmars/git' -import { getBuildConfig, runJenkins } from '@gitmars/build' -import type { ApolloBranchList, ApolloConfigProjectType } from '@gitmars/build' +import { getBuildConfig, getProjectOption, runJenkins } from '@gitmars/build' +import type { ApolloBranchList } from '@gitmars/build' import type { GitmarsOptionOptionsType } from './types' import lang from './common/local' import buildMpConfig from './conf/build-mp' @@ -54,8 +54,6 @@ program.action(async (project: string, opt: GitmBuildMpOption): Promise => mini_program = opt.miniprogram || data.mini_program, description = opt.description || data.description - const buildConfig = await getBuildConfig() - if (!project) { if (getIsGitProject()) project = getGitConfig().appName else @@ -90,10 +88,9 @@ program.action(async (project: string, opt: GitmBuildMpOption): Promise => ) } + const [, buildConfig] = await to(getBuildConfig()) + const projectOption = await getProjectOption(project, env!, buildConfig) if (!app) { - const projectOption = buildConfig?.[env!].list.find( - (item: ApolloConfigProjectType) => item.name === project - ) if (!buildConfig) { ;[, app] = await to( input({ @@ -101,7 +98,7 @@ program.action(async (project: string, opt: GitmBuildMpOption): Promise => transformer: val => val.trim() }) ) - } else if (projectOption && projectOption.apps) { + } else if (projectOption?.apps) { ;[, app] = await to( select({ message: t('Select the miniprogram to build'), diff --git a/packages/gitmars/src/gitm-build.ts b/packages/gitmars/src/gitm-build.ts index 32d6a275..2853e0ca 100755 --- a/packages/gitmars/src/gitm-build.ts +++ b/packages/gitmars/src/gitm-build.ts @@ -6,8 +6,8 @@ import chalk from 'chalk' import to from 'await-to-done' import { createArgs } from '@gitmars/utils' import { getGitConfig, getIsGitProject } from '@gitmars/git' -import { getBuildConfig, runJenkins } from '@gitmars/build' -import type { ApolloBranchList, ApolloConfigProjectType } from '@gitmars/build' +import { getBuildConfig, getProjectOption, runJenkins } from '@gitmars/build' +import type { ApolloBranchList } from '@gitmars/build' import type { GitmarsOptionOptionsType } from './types' import lang from './common/local' import buildConfig from './conf/build' @@ -43,8 +43,6 @@ program.action(async (project: string, opt: GitmBuildOption): Promise => { app = opt.app, _confirm = opt.confirm - const buildConfig = await getBuildConfig() - if (!project) { if (getIsGitProject()) project = getGitConfig().appName else @@ -79,10 +77,9 @@ program.action(async (project: string, opt: GitmBuildOption): Promise => { ) } + const [, buildConfig] = await to(getBuildConfig()) + const projectOption = await getProjectOption(project, env!, buildConfig) if (!app) { - const projectOption = buildConfig?.[env!].list.find( - (item: ApolloConfigProjectType) => item.name === project - ) if (!buildConfig) { ;[, app] = await to( input({ @@ -90,7 +87,7 @@ program.action(async (project: string, opt: GitmBuildOption): Promise => { transformer: val => val.trim() }) ) - } else if (projectOption && projectOption.apps) { + } else if (projectOption?.apps) { ;[, app] = await to( select({ message: t('Select the miniprogram to build'), diff --git a/packages/go/package.json b/packages/go/package.json index c5b63642..dcbf7a51 100644 --- a/packages/go/package.json +++ b/packages/go/package.json @@ -1,7 +1,7 @@ { "name": "@gitmars/go", "description": "gitmars go", - "version": "7.0.0-beta.19", + "version": "7.0.0-beta.20", "private": false, "main": "./dist/index.cjs.js", "module": "./dist/index.esm-bundler.js", diff --git a/packages/hook/package.json b/packages/hook/package.json index a5c8d300..8a06e79b 100644 --- a/packages/hook/package.json +++ b/packages/hook/package.json @@ -1,7 +1,7 @@ { "name": "@gitmars/hook", "description": "gitmars hook", - "version": "7.0.0-beta.19", + "version": "7.0.0-beta.20", "private": false, "main": "./dist/index.cjs.js", "module": "./dist/index.esm-bundler.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index d9c74d1d..ed7ce5d9 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,7 +1,7 @@ { "name": "@gitmars/utils", "description": "gitmars utils", - "version": "7.0.0-beta.19", + "version": "7.0.0-beta.20", "private": false, "main": "./dist/index.cjs.js", "module": "./dist/index.esm-bundler.js", diff --git a/scripts/publish.ts b/scripts/publish.ts index 36d2d9ed..3bce587f 100644 --- a/scripts/publish.ts +++ b/scripts/publish.ts @@ -1,6 +1,7 @@ import { execSync } from 'child_process' import { join, sep } from 'path' import consola from 'consola' +import { clone } from 'js-cool' import { readJSONSync, writeJSONSync } from '@node-kit/extra.fs' import { version } from '../package.json' import { packages } from '../build/packages' @@ -12,6 +13,7 @@ export const ROOT = join(__dirname, '..') export const PACKAGE = join(ROOT, 'packages') const REGISTRY_URL = 'https://registry.npmjs.org' +const jsonMap: Record = {} let command = `npm --registry=${REGISTRY_URL} publish --access public` if (IS_DRY_RUN) command += ' --dry-run' @@ -23,45 +25,59 @@ else if (IS_TEST) { process.exit(0) } +transformPkgJson() + for (const { name, pkgName } of packages) { const dirName = name.replace(/\./g, sep) const cwd = name === 'monorepo' ? ROOT : join(PACKAGE, dirName) - const PKG_FILE = join(cwd, 'package.json') - const pkgJson = readJSONSync(PKG_FILE)! - const newPkgJson = JSON.parse(JSON.stringify(pkgJson)) - for (const { pkgName: pkg } of packages) { - if ( - pkg in ((newPkgJson.dependencies as Record) || {}) && - newPkgJson.dependencies[pkg].includes('workspace') - ) { - newPkgJson.dependencies[pkg] = version - } - if ( - pkg in ((newPkgJson.devDependencies as Record) || {}) && - newPkgJson.devDependencies[pkg].includes('workspace') - ) { - newPkgJson.devDependencies[pkg] = version - } - if ( - pkg in ((newPkgJson.peerDependencies as Record) || {}) && - newPkgJson.peerDependencies[pkg].includes('workspace') - ) { - newPkgJson.peerDependencies[pkg] = version - } - } - writeJSONSync(PKG_FILE, newPkgJson, { - encoding: 'utf8' - }) execSync(command, { stdio: 'inherit', cwd }) - writeJSONSync(PKG_FILE, pkgJson, { - encoding: 'utf8' - }) - execSync(`npx prettier --write ${PKG_FILE}`, { - stdio: 'inherit', - cwd: ROOT - }) consola.success(`Published ${pkgName}`) } + +transformPkgJson(true) + +function transformPkgJson(isFallback = false) { + for (const { name } of packages) { + const dirName = name.replace(/\./g, sep) + const cwd = name === 'monorepo' ? ROOT : join(PACKAGE, dirName) + const PKG_FILE = join(cwd, 'package.json') + if (!isFallback) { + jsonMap[name] = readJSONSync(PKG_FILE)! + const newPkgJson = clone(jsonMap[name]) + for (const { pkgName: pkg } of packages) { + if ( + pkg in ((newPkgJson.dependencies as Record) || {}) && + newPkgJson.dependencies[pkg].includes('workspace') + ) { + newPkgJson.dependencies[pkg] = version + } + if ( + pkg in ((newPkgJson.devDependencies as Record) || {}) && + newPkgJson.devDependencies[pkg].includes('workspace') + ) { + newPkgJson.devDependencies[pkg] = version + } + if ( + pkg in ((newPkgJson.peerDependencies as Record) || {}) && + newPkgJson.peerDependencies[pkg].includes('workspace') + ) { + newPkgJson.peerDependencies[pkg] = version + } + } + writeJSONSync(PKG_FILE, newPkgJson, { + encoding: 'utf8' + }) + } else { + writeJSONSync(PKG_FILE, jsonMap[name], { + encoding: 'utf8' + }) + } + execSync(`npx prettier --write ${PKG_FILE}`, { + stdio: 'inherit', + cwd: ROOT + }) + } +}