Skip to content

Commit 872dbf4

Browse files
author
月满
committed
feat: 分离 git 和 publish 流程
1 parent 5f22741 commit 872dbf4

File tree

4 files changed

+116
-99
lines changed

4 files changed

+116
-99
lines changed

src/built-in-plugins/command-publish/plugin/index.ts

+9
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ pri.commands.registerCommand({
2121
semver: {
2222
description: 'Semver version: patch minor major',
2323
},
24+
commitOnly: {
25+
description: 'commit version update without publishing',
26+
},
27+
publishOnly: {
28+
description: 'publish without commit or any other git workflow',
29+
},
30+
branch: {
31+
description: 'branch name',
32+
},
2433
},
2534
action: async (options: PublishOption) => {
2635
const commandPublishModule = await import('./run-publish');

src/built-in-plugins/command-publish/plugin/interface.ts

+3
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,7 @@ export interface PublishOption {
44
skipLint?: boolean;
55
skipNpm?: boolean;
66
semver?: string;
7+
commitOnly?: boolean;
8+
publishOnly?: boolean;
9+
branch?: string;
710
}

src/built-in-plugins/command-publish/plugin/run-publish.ts

+91-78
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { getMonoAndNpmDepsOnce, DepMap } from '../../../utils/packages';
1818
import { ProjectConfig } from '../../../utils/define';
1919

2020
export const publish = async (options: PublishOption) => {
21-
const currentBranchName = await getCurrentBranchName();
21+
const currentBranchName = options.branch ? options.branch : await getCurrentBranchName();
2222
const isDevelopBranch = ['master', 'develop'].includes(currentBranchName);
2323

2424
switch (pri.sourceConfig.type) {
@@ -50,23 +50,24 @@ export const publish = async (options: PublishOption) => {
5050
type: 'confirm',
5151
},
5252
]);
53-
54-
await buildDeclaration();
53+
// eslint-disable-next-line no-unused-expressions
54+
!options.commitOnly && (await buildDeclaration());
5555

5656
if (installAllPrompt.installAll) {
5757
for (const eachPackage of depMonoPackages) {
5858
await publishByPackageName(eachPackage.name, options, depMap, isDevelopBranch, currentBranchName);
5959
}
6060
}
6161
} else {
62-
await buildDeclaration();
62+
// eslint-disable-next-line no-unused-expressions
63+
!options.commitOnly && (await buildDeclaration());
6364
}
6465

6566
await publishByPackageName(currentSelectedSourceType, options, depMap, isDevelopBranch, currentBranchName);
6667

6768
await fs.remove(path.join(pri.projectRootPath, tempPath.dir, declarationPath.dir));
68-
69-
await exec(`git push origin ${currentBranchName}`);
69+
// eslint-disable-next-line no-unused-expressions
70+
!options.publishOnly && (await exec(`git push origin ${currentBranchName}`));
7071
}
7172
break;
7273
}
@@ -115,7 +116,7 @@ async function publishByPackageName(
115116
logFatal(`No version found in ${sourceType} package.json`);
116117
}
117118

118-
if (!(await isWorkingTreeClean())) {
119+
if (!options.publishOnly && !(await isWorkingTreeClean())) {
119120
const inquirerInfo = await inquirer.prompt([
120121
{
121122
message: 'Working tree is not clean, your commit message:',
@@ -152,81 +153,85 @@ async function publishByPackageName(
152153
}
153154
}
154155

155-
logInfo('Check if npm package exist');
156-
157156
let versionResult: string = null;
158157

159-
try {
160-
const versionResultExec = execSync(
161-
`${targetConfig.npmClient} view ${targetPackageJson.name}@${targetPackageJson.version} version`,
162-
);
158+
if (options.tag !== 'beta' && isDevelopBranch) {
159+
logInfo('Check if npm package exist');
163160

164-
if (versionResultExec) {
165-
versionResult = versionResultExec.toString().trim();
166-
} else {
161+
try {
162+
const versionResultExec = execSync(
163+
`${targetConfig.npmClient} view ${targetPackageJson.name}@${targetPackageJson.version} version`,
164+
);
165+
166+
if (versionResultExec) {
167+
versionResult = versionResultExec.toString().trim();
168+
} else {
169+
versionResult = null;
170+
}
171+
} catch (error) {
172+
// Throw error means not exist
167173
versionResult = null;
168174
}
169-
} catch (error) {
170-
// Throw error means not exist
171-
versionResult = null;
172175
}
173176

174177
// Publish beta version if branch is not master or develop
175-
if (options.tag === 'beta' || !isDevelopBranch) {
176-
targetPackageJson.version = (semver.inc as any)(
177-
targetPackageJson.version,
178-
'prerelease',
179-
currentBranchName
180-
.replace(/\//g, '')
181-
.replace(/\./g, '')
182-
.replace(/_/g, ''),
183-
);
184-
185-
await fs.outputFile(path.join(targetRoot, 'package.json'), `${JSON.stringify(targetPackageJson, null, 2)}\n`);
186-
187-
if (!(await isWorkingTreeClean())) {
188-
await exec(`git add -A; git commit -m "upgrade ${sourceType} version to ${targetPackageJson.version}" -n`, {
189-
cwd: pri.projectRootPath,
190-
});
191-
}
192-
} else if (versionResult) {
193-
if (!options.semver) {
194-
const versionPrompt = await inquirer.prompt([
195-
{
196-
message: `${targetPackageJson.name}@${targetPackageJson.version} exist, can upgrade to`,
197-
name: 'version',
198-
type: 'list',
199-
choices: [
200-
{
201-
name: `Patch(${semver.inc(targetPackageJson.version, 'patch')})`,
202-
value: semver.inc(targetPackageJson.version, 'patch'),
203-
},
204-
{
205-
name: `Minor(${semver.inc(targetPackageJson.version, 'minor')})`,
206-
value: semver.inc(targetPackageJson.version, 'minor'),
207-
},
208-
{
209-
name: `Major(${semver.inc(targetPackageJson.version, 'major')})`,
210-
value: semver.inc(targetPackageJson.version, 'major'),
211-
},
212-
],
213-
},
214-
]);
178+
if (!options.publishOnly) {
179+
if (options.tag === 'beta' || !isDevelopBranch) {
180+
targetPackageJson.version = (semver.inc as any)(
181+
targetPackageJson.version,
182+
'prerelease',
183+
currentBranchName
184+
.replace(/\//g, '')
185+
.replace(/\./g, '')
186+
.replace(/_/g, ''),
187+
);
215188

216-
targetPackageJson.version = versionPrompt.version;
217-
} else if (['patch', 'minor', 'major'].some(each => each === options.semver)) {
218-
targetPackageJson.version = semver.inc(targetPackageJson.version, options.semver as semver.ReleaseType);
219-
} else {
220-
logFatal(`semver must be "patch" "minor" or "major"`);
221-
}
189+
await fs.outputFile(path.join(targetRoot, 'package.json'), `${JSON.stringify(targetPackageJson, null, 2)}\n`);
222190

223-
// Upgrade package.json's version
224-
await fs.outputFile(path.join(targetRoot, 'package.json'), `${JSON.stringify(targetPackageJson, null, 2)}\n`);
191+
if (!(await isWorkingTreeClean())) {
192+
await exec(`git add -A; git commit -m "upgrade ${sourceType} version to ${targetPackageJson.version}" -n`, {
193+
cwd: pri.projectRootPath,
194+
});
195+
}
196+
} else if (versionResult) {
197+
if (!options.semver) {
198+
const versionPrompt = await inquirer.prompt([
199+
{
200+
message: `${targetPackageJson.name}@${targetPackageJson.version} exist, can upgrade to`,
201+
name: 'version',
202+
type: 'list',
203+
choices: [
204+
{
205+
name: `Patch(${semver.inc(targetPackageJson.version, 'patch')})`,
206+
value: semver.inc(targetPackageJson.version, 'patch'),
207+
},
208+
{
209+
name: `Minor(${semver.inc(targetPackageJson.version, 'minor')})`,
210+
value: semver.inc(targetPackageJson.version, 'minor'),
211+
},
212+
{
213+
name: `Major(${semver.inc(targetPackageJson.version, 'major')})`,
214+
value: semver.inc(targetPackageJson.version, 'major'),
215+
},
216+
],
217+
},
218+
]);
219+
220+
targetPackageJson.version = versionPrompt.version;
221+
} else if (['patch', 'minor', 'major'].some(each => each === options.semver)) {
222+
targetPackageJson.version = semver.inc(targetPackageJson.version, options.semver as semver.ReleaseType);
223+
} else {
224+
logFatal(`semver must be "patch" "minor" or "major"`);
225+
}
225226

226-
if (!(await isWorkingTreeClean())) {
227-
await exec(`git add -A; git commit -m "upgrade ${sourceType} version to ${targetPackageJson.version}" -n`, {
228-
cwd: pri.projectRootPath,
229-
});
227+
// Upgrade package.json's version
228+
await fs.outputFile(path.join(targetRoot, 'package.json'), `${JSON.stringify(targetPackageJson, null, 2)}\n`);
229+
230+
if (!(await isWorkingTreeClean())) {
231+
await exec(`git add -A; git commit -m "upgrade ${sourceType} version to ${targetPackageJson.version}" -n`, {
232+
cwd: pri.projectRootPath,
233+
});
234+
}
230235
}
231236
}
232237

@@ -241,17 +246,25 @@ async function publishByPackageName(
241246
});
242247
});
243248
}
249+
if (!options.commitOnly) {
250+
await buildComponent();
244251

245-
await buildComponent();
252+
if (options.bundle) {
253+
await commandBundle({ skipLint: true });
254+
}
246255

247-
if (options.bundle) {
248-
await commandBundle({ skipLint: true });
256+
await spinner(`Publish`, async () => {
257+
await moveSourceFilesToTempFolderAndPublish(
258+
sourceType,
259+
options,
260+
targetConfig,
261+
targetRoot,
262+
depMap,
263+
isDevelopBranch,
264+
);
265+
});
249266
}
250267

251-
await spinner(`Publish`, async () => {
252-
await moveSourceFilesToTempFolderAndPublish(sourceType, options, targetConfig, targetRoot, depMap, isDevelopBranch);
253-
});
254-
255268
logText(`+ ${targetPackageJson.name}@${targetPackageJson.version}`);
256269
}
257270

yarn.lock

+13-21
Original file line numberDiff line numberDiff line change
@@ -5433,10 +5433,10 @@ [email protected]:
54335433
read-pkg-up "^2.0.0"
54345434
resolve "^1.11.0"
54355435

5436-
eslint-plugin-react-hooks@2.3.0:
5437-
version "2.3.0"
5438-
resolved "https://registry.npm.alibaba-inc.com/eslint-plugin-react-hooks/download/eslint-plugin-react-hooks-2.3.0.tgz#53e073961f1f5ccf8dd19558036c1fac8c29d99a"
5439-
integrity sha1-U+Bzlh8fXM+N0ZVYA2wfrIwp2Zo=
5436+
eslint-plugin-react-hooks@2.5.0:
5437+
version "2.5.0"
5438+
resolved "https://registry.npm.alibaba-inc.com/eslint-plugin-react-hooks/download/eslint-plugin-react-hooks-2.5.0.tgz#c50ab7ca5945ce6d1cf8248d9e185c80b54171b6"
5439+
integrity sha1-xQq3yllFzm0c+CSNnhhcgLVBcbY=
54405440

54415441
54425442
version "7.17.0"
@@ -11603,15 +11603,15 @@ rc@^1.2.8:
1160311603
minimist "^1.2.0"
1160411604
strip-json-comments "~2.0.1"
1160511605

11606-
react-dom@16.12.0:
11607-
version "16.12.0"
11608-
resolved "https://registry.npm.alibaba-inc.com/react-dom/download/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11"
11609-
integrity sha1-DaS3FLjRPCA4yTlrVKkrrqYz/hE=
11606+
react-dom@16.13.0:
11607+
version "16.13.0"
11608+
resolved "https://registry.npm.alibaba-inc.com/react-dom/download/react-dom-16.13.0.tgz#cdde54b48eb9e8a0ca1b3dc9943d9bb409b81866"
11609+
integrity sha1-zd5UtI656KDKGz3JlD2btAm4GGY=
1161011610
dependencies:
1161111611
loose-envify "^1.1.0"
1161211612
object-assign "^4.1.1"
1161311613
prop-types "^15.6.2"
11614-
scheduler "^0.18.0"
11614+
scheduler "^0.19.0"
1161511615

1161611616
1161711617
version "4.12.19"
@@ -11686,10 +11686,10 @@ react-transition-group@^4.3.0:
1168611686
loose-envify "^1.4.0"
1168711687
prop-types "^15.6.2"
1168811688

11689-
react@16.12.0:
11690-
version "16.12.0"
11691-
resolved "https://registry.npm.alibaba-inc.com/react/download/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83"
11692-
integrity sha1-DAqcahQkKeNhSDTVp3jhiqeKC4M=
11689+
react@16.13.0:
11690+
version "16.13.0"
11691+
resolved "https://registry.npm.alibaba-inc.com/react/download/react-16.13.0.tgz#d046eabcdf64e457bbeed1e792e235e1b9934cf7"
11692+
integrity sha1-0EbqvN9k5Fe77tHnkuI14bmTTPc=
1169311693
dependencies:
1169411694
loose-envify "^1.1.0"
1169511695
object-assign "^4.1.1"
@@ -12426,14 +12426,6 @@ scheduler@^0.17.0:
1242612426
loose-envify "^1.1.0"
1242712427
object-assign "^4.1.1"
1242812428

12429-
scheduler@^0.18.0:
12430-
version "0.18.0"
12431-
resolved "https://registry.npm.alibaba-inc.com/scheduler/download/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4"
12432-
integrity sha1-WQGtZlm8HY8/2vNut6Z7DWdGscQ=
12433-
dependencies:
12434-
loose-envify "^1.1.0"
12435-
object-assign "^4.1.1"
12436-
1243712429
scheduler@^0.19.0:
1243812430
version "0.19.0"
1243912431
resolved "https://registry.npm.alibaba-inc.com/scheduler/download/scheduler-0.19.0.tgz#a715d56302de403df742f4a9be11975b32f5698d"

0 commit comments

Comments
 (0)