@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.
Files changed (2) hide show
  1. package/ci/cli.js +67 -85
  2. 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 sence last commit ${lastCommit}.`)
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
- switch (updateVersionType) {
192
- case 'prerelease':
193
- npmCommandArray = ['version', 'prerelease', '--preid=beta', '--prefix', projectPath];
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', npmCommandArray)
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(`update ${packageConfig.name} prerelease version to ${updatedVersion}`);
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('Update', updatedVersions, ' [skip ci]');
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', `${commitMessage}`]);
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
- // const tagMessage = builderVersionChangeMessage('Publish npm packages ', monoWorkspace.updateResult, '.');
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
- return commitVersionChanges(updatedVersions, commitUrl)
406
- .then((result) => {
407
- return updateMonoWorkspaceVersion(monoWorkspace, updateVersionType, commitUrl);
408
- })
409
- .then((reulst) => {
410
- return Promise.resolve(monoWorkspace);
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
- return Promise.all(buildPromises)
420
- .then((results) => {
421
- console.log(results.stdout);
422
- return Promise.resolve(monoWorkspace);
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
- const publishPromises = changedProjects.map(projectInfo => publishToNpmRepository(projectInfo.project.path));
429
- Promise.all(publishPromises)
430
- .then(() => {
431
- return addTagToMonoWorkspace(monoWorkspace, commitUrl);
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farris/cli",
3
- "version": "1.0.25",
3
+ "version": "1.0.28",
4
4
  "description": "Farris command line interface",
5
5
  "main": "index.js",
6
6
  "scripts": {