@farris/cli 1.0.25 → 1.0.28
Sign up to get free protection for your applications and to get access to all the features.
- package/ci/cli.js +67 -85
- package/package.json +1 -1
package/ci/cli.js
CHANGED
@@ -168,7 +168,7 @@ function checkProjectChanges(projectInfo, lastCommit) {
|
|
168
168
|
const hasChanges = changedFiles.length > 0;
|
169
169
|
if (hasChanges) {
|
170
170
|
projectInfo.workspace.hasChanged = hasChanges;
|
171
|
-
console.log(`${packageName} has changed
|
171
|
+
console.log(`${packageName} has changed since latest tag ${lastCommit}.`)
|
172
172
|
} else {
|
173
173
|
console.log(`${packageName} has not changed.`)
|
174
174
|
}
|
@@ -183,78 +183,30 @@ function checkProjectChanges(projectInfo, lastCommit) {
|
|
183
183
|
* @returns 更新后的版本
|
184
184
|
*/
|
185
185
|
function updateProjectVersion(projectInfo, updateVersionType) {
|
186
|
-
let npmCommandArray = [];
|
187
186
|
const projectPath = projectInfo.project.path;
|
188
187
|
if (!projectPath) {
|
189
188
|
throw new Error(`update project version error: you must provide project path by project info object.`)
|
190
189
|
}
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
break;
|
195
|
-
case 'patch':
|
196
|
-
npmCommandArray = ['version', 'patch', '--prefix', projectPath];
|
197
|
-
break;
|
198
|
-
case 'minor':
|
199
|
-
npmCommandArray = ['version', 'minor', '--prefix', projectPath];
|
200
|
-
break;
|
201
|
-
case 'major':
|
202
|
-
npmCommandArray = ['version', 'major', '--prefix', projectPath];
|
203
|
-
break;
|
190
|
+
const updateProjectVersion = ['version', updateVersionType, '--force', '--no-git-tag-version', '--prefix', projectPath];
|
191
|
+
if (updateVersionType === 'prerelease') {
|
192
|
+
updateProjectVersion.push('--preid=beta');
|
204
193
|
}
|
205
194
|
return childProcess
|
206
195
|
// 使用 npm version prerelease 更新指定工程的预发布版本
|
207
|
-
.exec('npm',
|
196
|
+
.exec('npm', updateProjectVersion)
|
208
197
|
.then((returnValue) => {
|
209
198
|
// 读取目标工程的package.json文件
|
210
199
|
const packageJsonFilePath = `${projectPath}/package.json`;
|
211
200
|
const packageConfig = JSON.parse(fs.readFileSync(packageJsonFilePath, 'utf-8'));
|
212
201
|
// 提取更新后的版本
|
213
202
|
const updatedVersion = returnValue.stdout;
|
214
|
-
console.log(`
|
203
|
+
console.log(`Update ${packageConfig.name} prerelease version to ${updatedVersion}.`);
|
215
204
|
const updateResult = {};
|
216
205
|
updateResult[packageConfig.name] = updatedVersion;
|
217
206
|
return updateResult;
|
218
207
|
})
|
219
208
|
}
|
220
209
|
|
221
|
-
function updateMonoWorkspaceVersion(monoWorkspace, updateVersionType, commitUrl) {
|
222
|
-
let npmCommandArray = [];
|
223
|
-
switch (updateVersionType) {
|
224
|
-
case 'prerelease':
|
225
|
-
npmCommandArray = ['version', 'prerelease', '--preid=beta'];
|
226
|
-
break;
|
227
|
-
case 'patch':
|
228
|
-
npmCommandArray = ['version', 'patch'];
|
229
|
-
break;
|
230
|
-
case 'minor':
|
231
|
-
npmCommandArray = ['version', 'minor'];
|
232
|
-
break;
|
233
|
-
case 'major':
|
234
|
-
npmCommandArray = ['version', 'major'];
|
235
|
-
break;
|
236
|
-
}
|
237
|
-
console.log(`executing npm version --${updateVersionType} in root directory.`)
|
238
|
-
childProcess.execSync('npm', npmCommandArray);
|
239
|
-
const packageJsonFilePath = `./package.json`;
|
240
|
-
const packageConfig = JSON.parse(fs.readFileSync(packageJsonFilePath, 'utf-8'));
|
241
|
-
monoWorkspace.version = packageConfig.version;
|
242
|
-
// 向git缓冲区中添加变更
|
243
|
-
childProcess.execSync('git', ['add', '.']);
|
244
|
-
// // 提交变更记录
|
245
|
-
childProcess.execSync('git', ['commit', '-m', `Update MonoWorkspace version to v${packageConfig.version}. [skip ci]`]);
|
246
|
-
console.log(`Update MonoWorkspace version to v${packageConfig.version}`);
|
247
|
-
const branch = childProcess.execSync("git", ["rev-parse", "--abbrev-ref", "HEAD"]);
|
248
|
-
// 提交变更集
|
249
|
-
if (commitUrl) {
|
250
|
-
console.log(`executing git push ${branch} to ${commitUrl}`);
|
251
|
-
return childProcess.exec("git", ["push", commitUrl]);
|
252
|
-
} else {
|
253
|
-
console.log(`executing git push ${branch}`);
|
254
|
-
return childProcess.exec('git', ['push']);
|
255
|
-
}
|
256
|
-
}
|
257
|
-
|
258
210
|
function builderVersionChangeMessage(prefix, updatedVersions, suffix = '') {
|
259
211
|
const versionMessage = Object.keys(updatedVersions).reduce((latestMessage, packageName, index, originalArray) => {
|
260
212
|
const version = updatedVersions[packageName];
|
@@ -267,19 +219,26 @@ function builderVersionChangeMessage(prefix, updatedVersions, suffix = '') {
|
|
267
219
|
return `${versionMessage} ${suffix}`;
|
268
220
|
}
|
269
221
|
|
270
|
-
function commitVersionChanges(updatedVersions, commitUrl) {
|
271
|
-
const commitMessage = builderVersionChangeMessage('
|
272
|
-
|
222
|
+
function commitVersionChanges(updatedVersions, commitUrl, monoWorkspace, updateVersionType) {
|
223
|
+
const commitMessage = builderVersionChangeMessage('update', updatedVersions, '');
|
273
224
|
if (commitMessage) {
|
225
|
+
const updateWorkspaceVersion = ['version', '--force', '--no-git-tag-version', updateVersionType];
|
226
|
+
if (updateVersionType === 'prerelease') {
|
227
|
+
updateWorkspaceVersion.push('--preid=beta');
|
228
|
+
}
|
229
|
+
console.log(`executing npm ${updateWorkspaceVersion.join(' ')} in root directory.`)
|
230
|
+
childProcess.execSync('npm', updateWorkspaceVersion);
|
231
|
+
|
232
|
+
const packageJsonFilePath = `./package.json`;
|
233
|
+
const packageConfig = JSON.parse(fs.readFileSync(packageJsonFilePath, 'utf-8'));
|
234
|
+
monoWorkspace.version = packageConfig.version;
|
235
|
+
|
274
236
|
// 向git缓冲区中添加变更
|
275
237
|
childProcess.execSync('git', ['add', '.']);
|
276
|
-
//
|
277
|
-
childProcess.execSync('git', ['commit', '-m',
|
278
|
-
|
279
|
-
console.log(commitMessage);
|
238
|
+
// 提交变更记录
|
239
|
+
childProcess.execSync('git', ['commit', '-m', `Update workspace version to v${packageConfig.version} for ${commitMessage}. [skip ci]`]);
|
280
240
|
|
281
241
|
const branch = childProcess.execSync("git", ["rev-parse", "--abbrev-ref", "HEAD"]);
|
282
|
-
|
283
242
|
// 提交变更集
|
284
243
|
if (commitUrl) {
|
285
244
|
console.log(`executing git push ${branch} to ${commitUrl}`);
|
@@ -297,10 +256,7 @@ function buildWorkspace(workspace) {
|
|
297
256
|
}
|
298
257
|
|
299
258
|
function addTagToMonoWorkspace(monoWorkspace, commitUrl) {
|
300
|
-
|
301
|
-
// const date = moment(new Date());
|
302
|
-
// const tagVersion = `v${date.format('YYYYMMDDHHmmss')}`;
|
303
|
-
const monoWorkspaceVersion = monoWorkspace.version;
|
259
|
+
const monoWorkspaceVersion = `v${monoWorkspace.version}`;
|
304
260
|
childProcess.execSync('git', ['tag', monoWorkspaceVersion, '-m', 'Publish npm packages. [skip ci]']);
|
305
261
|
// 提交变更集
|
306
262
|
if (commitUrl) {
|
@@ -374,9 +330,9 @@ function publish(commitUrl, updateVersionType) {
|
|
374
330
|
// 3. 检查代码提交记录,获取自上次发布以来所有发生变化的Angular工程
|
375
331
|
chain = chain.then(monoWorkspace => {
|
376
332
|
const projects = monoWorkspace.projects;
|
333
|
+
const lastCommit = getLastCommit();
|
334
|
+
console.log(`last commit ${lastCommit}`);
|
377
335
|
const checkProjects = projects.map((projectInfo) => {
|
378
|
-
const lastCommit = getLastCommit();
|
379
|
-
console.log(`last commit ${lastCommit}`);
|
380
336
|
let checkPromise = checkProjectChanges(projectInfo, lastCommit);
|
381
337
|
let changedPromise = checkPromise.then(hasChanged => {
|
382
338
|
projectInfo.hasChanged = hasChanged;
|
@@ -402,13 +358,21 @@ function publish(commitUrl, updateVersionType) {
|
|
402
358
|
return workspace;
|
403
359
|
}, monoWorkspace);
|
404
360
|
const updatedVersions = monoWorkspace.updateResult;
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
361
|
+
if (updatedVersions) {
|
362
|
+
return commitVersionChanges(updatedVersions, commitUrl, monoWorkspace, updateVersionType)
|
363
|
+
.then((result) => {
|
364
|
+
if (result.stderr) {
|
365
|
+
console.log(result.stderr);
|
366
|
+
}
|
367
|
+
if (result.stdout) {
|
368
|
+
console.log(result.stdout);
|
369
|
+
}
|
370
|
+
return Promise.resolve(monoWorkspace);
|
371
|
+
});
|
372
|
+
} else {
|
373
|
+
return Promise.resolve(monoWorkspace);
|
374
|
+
}
|
375
|
+
|
412
376
|
});
|
413
377
|
});
|
414
378
|
// 5. 编译所有Angular工作区
|
@@ -416,20 +380,38 @@ function publish(commitUrl, updateVersionType) {
|
|
416
380
|
const buildPromises = monoWorkspace.workspaces
|
417
381
|
.filter(workspace => workspace.hasChanged)
|
418
382
|
.map((workspace) => buildWorkspace(workspace));
|
419
|
-
|
420
|
-
.
|
421
|
-
|
422
|
-
|
423
|
-
|
383
|
+
if (buildPromises.length) {
|
384
|
+
return Promise.all(buildPromises)
|
385
|
+
.then((results) => {
|
386
|
+
if (results) {
|
387
|
+
results.map((result) => {
|
388
|
+
if (result.stderr) {
|
389
|
+
console.log(result.stderr);
|
390
|
+
}
|
391
|
+
if (result.stdout) {
|
392
|
+
console.log(result.stdout);
|
393
|
+
}
|
394
|
+
});
|
395
|
+
}
|
396
|
+
return Promise.resolve(monoWorkspace);
|
397
|
+
});
|
398
|
+
} else {
|
399
|
+
return Promise.resolve(monoWorkspace);
|
400
|
+
}
|
424
401
|
});
|
425
402
|
// 6. 将变更项目的内容发布为npm包,并增加发布Tag标签
|
426
403
|
chain = chain.then(monoWorkspace => {
|
427
404
|
const changedProjects = monoWorkspace.changedProjects;
|
428
|
-
|
429
|
-
|
430
|
-
.
|
431
|
-
|
432
|
-
|
405
|
+
if (changedProjects.length) {
|
406
|
+
const publishPromises = changedProjects.map(projectInfo => publishToNpmRepository(projectInfo.project.path));
|
407
|
+
Promise.all(publishPromises)
|
408
|
+
.then(() => {
|
409
|
+
return addTagToMonoWorkspace(monoWorkspace, commitUrl);
|
410
|
+
});
|
411
|
+
} else {
|
412
|
+
return Promise.resolve(monoWorkspace);
|
413
|
+
}
|
414
|
+
|
433
415
|
});
|
434
416
|
}
|
435
417
|
|