@clickview/ship-it 0.0.3 → 0.0.4-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/config.json +5 -0
  2. package/lib/config.json +5 -0
  3. package/lib/src/api-clients/GitLabApiClient.js +342 -0
  4. package/lib/src/api-clients/git-lab/GitLabApiClient.js +24 -0
  5. package/lib/src/api-clients/git-lab/GitLabMapper.js +1 -0
  6. package/lib/src/api-clients/index.js +1 -0
  7. package/lib/src/api-clients/team-city/TeamCityApiClient.js +85 -0
  8. package/lib/src/commands/BumpPackagesCommand.js +2 -4
  9. package/lib/src/commands/CommitPackageVersionsCommand.js +78 -0
  10. package/lib/src/commands/CreateBranchCommand.js +4 -6
  11. package/lib/src/commands/CreateMergeRequestCommand.js +5 -7
  12. package/lib/src/commands/CreateReleaseNotesCommand.js +2 -4
  13. package/lib/src/commands/InstallPackagesCommand.js +1 -3
  14. package/lib/src/commands/ReleaseCommand.js +17 -10
  15. package/lib/src/commands/StartConsumingProjectBuildsCommand.js +76 -0
  16. package/lib/src/commands/StatusCommand.js +1 -3
  17. package/lib/src/commands/ValidateMergeRequestCommand.js +1 -3
  18. package/lib/src/commands/VersionCommand.js +1 -3
  19. package/lib/src/commands/index.js +1 -0
  20. package/lib/src/constants/CommandTypeMapping.js +1 -0
  21. package/lib/src/constants/TeamCityBuildIDs.js +13 -0
  22. package/lib/src/constants/index.js +18 -0
  23. package/lib/src/index.js +1 -1
  24. package/lib/src/interfaces/ShipItOptions.js +2 -0
  25. package/lib/src/interfaces/command-cli-options/MilestoneCommandCliOptions.js +2 -0
  26. package/lib/src/interfaces/command-cli-options/ReleaseCommandCliOptions.js +2 -0
  27. package/lib/src/interfaces/command-cli-options/index.js +18 -0
  28. package/lib/src/interfaces/command-options/CommitPackageVersionsCommandOptions.js +2 -0
  29. package/lib/src/interfaces/command-options/DockerMilestoneCommandOptions.js +2 -0
  30. package/lib/src/interfaces/command-options/ReleaseCommandOptions.js +2 -0
  31. package/lib/src/interfaces/command-options/index.js +2 -1
  32. package/lib/src/interfaces/index.js +1 -0
  33. package/lib/src/inversify.config.js +8 -0
  34. package/lib/src/services/GitLabService.js +33 -0
  35. package/lib/src/services/TeamCityService.js +34 -0
  36. package/lib/src/services/index.js +1 -0
  37. package/lib/src/startup/AddMilestoneCommand.js +13 -7
  38. package/lib/src/startup/GetAction.js +68 -0
  39. package/lib/src/startup/SetupCommands.js +49 -27
  40. package/lib/src/tasks/CommitLocalPackagesTask.js +137 -0
  41. package/lib/src/tasks/CreateBranchTask.js +37 -19
  42. package/lib/src/tasks/InstallPackagesTask.js +26 -47
  43. package/lib/src/tasks/StartConsumingProjectBuildsTask.js +143 -0
  44. package/lib/src/tasks/StartMonorepoBuildTask.js +95 -0
  45. package/lib/src/tasks/ValidateTask.js +2 -2
  46. package/lib/src/tasks/index.js +2 -0
  47. package/lib/src/types.js +6 -0
  48. package/lib/src/utils/BranchNames.js +2 -0
  49. package/lib/src/utils/ProjectIds.js +3 -3
  50. package/package.json +4 -3
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
14
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
15
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -35,20 +46,42 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
35
46
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
47
  }
37
48
  };
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
38
52
  Object.defineProperty(exports, "__esModule", { value: true });
39
53
  exports.setupCommands = void 0;
54
+ var lodash_1 = __importDefault(require("lodash"));
40
55
  var CommandTypeMapping_1 = require("../constants/CommandTypeMapping");
41
- var errors_1 = require("../errors");
42
56
  var AddMilestoneCommand_1 = require("./AddMilestoneCommand");
57
+ var GetAction_1 = require("./GetAction");
43
58
  function setupCommands(program, container) {
44
- var addMilestoneCommand = (0, AddMilestoneCommand_1.getAddMilestoneCommand)(program, container);
59
+ var _this = this;
60
+ var getAction = (0, GetAction_1.getActionBuilder)(program, container);
61
+ var addMilestoneCommand = (0, AddMilestoneCommand_1.getAddMilestoneCommand)(program, getAction);
45
62
  // All commands below accept the same options
46
63
  addMilestoneCommand('status', 'Get the status of all MRs in a milestone');
47
64
  addMilestoneCommand('version', 'Display the versions that will be used for the release');
48
65
  addMilestoneCommand('create-branches', 'Create release branches for all projects that are part of a milestone');
49
66
  addMilestoneCommand('create-mrs', 'Create merge requests for all projects that are part of a milestone');
50
67
  addMilestoneCommand('create-notes', 'Builds descriptions for all projects that are part of a milestone');
51
- addMilestoneCommand('release', 'Create releases for all projects that are part of a milestone');
68
+ program.command('release')
69
+ .description('Create releases for all projects that are part of a milestone')
70
+ .requiredOption('-m, --milestone <milestone>')
71
+ .option('-p, --projectIds <projectIds...>')
72
+ .option('--hotfix')
73
+ .option('--major')
74
+ .option('--trigger-monorepo-build')
75
+ .action(function (options) { return __awaiter(_this, void 0, void 0, function () {
76
+ var milestoneCommandOptions, releaseCommandOptions;
77
+ return __generator(this, function (_a) {
78
+ milestoneCommandOptions = (0, AddMilestoneCommand_1.processMilestoneCommandOptions)(lodash_1.default.omit(options, 'triggerMonorepoBuild'));
79
+ releaseCommandOptions = __assign(__assign({}, milestoneCommandOptions), { triggerMonorepoBuild: !!options.triggerMonorepoBuild });
80
+ container.get(CommandTypeMapping_1.CommandTypeMapping['release'])
81
+ .run(releaseCommandOptions);
82
+ return [2 /*return*/];
83
+ });
84
+ }); });
52
85
  program.command('bump-packages')
53
86
  .description('Bump clickview npm package versions in monorepo to their next version')
54
87
  .requiredOption('-b, --branchName <branchName>')
@@ -57,36 +90,25 @@ function setupCommands(program, container) {
57
90
  program.command('install-packages')
58
91
  .description('Install the latest clickview npm packages in all consuming projects that are part of a milestone')
59
92
  .option('-m, --milestone <milestone>')
60
- .option('-b, --branchName <branchName>')
93
+ .option('-b, --branchName <monorepoBranchName>')
61
94
  .option('-p, --projectIds <projectIds...>')
62
95
  .action(getAction('install-packages'));
96
+ program.command('start-consuming-project-builds')
97
+ .description('Trigger TeamCity builds in all consuming projects that are a part of a milestone')
98
+ .option('-m, --milestone <milestone>')
99
+ .option('--monorepoBranchName <monorepoBranchName>')
100
+ .option('-p, --projectIds <projectIds...>')
101
+ .action(function (options) { return __awaiter(_this, void 0, void 0, function () {
102
+ return __generator(this, function (_a) {
103
+ container.get(CommandTypeMapping_1.CommandTypeMapping['start-consuming-project-builds'])
104
+ .run(options);
105
+ return [2 /*return*/];
106
+ });
107
+ }); });
63
108
  program.command('validate-mr')
64
109
  .description('Validate a merge request in a single project, ensuring it has a milestone and valid description')
65
110
  .option('-p, --projectId <projectId>')
66
111
  .option('-b, --branchName <branchName>')
67
112
  .action(getAction('validate-mr'));
68
- function getAction(command) {
69
- var _this = this;
70
- return function (options) { return __awaiter(_this, void 0, void 0, function () {
71
- var err_1;
72
- return __generator(this, function (_a) {
73
- switch (_a.label) {
74
- case 0:
75
- _a.trys.push([0, 2, , 3]);
76
- return [4 /*yield*/, container.get(CommandTypeMapping_1.CommandTypeMapping[command]).run(options)];
77
- case 1:
78
- _a.sent();
79
- return [3 /*break*/, 3];
80
- case 2:
81
- err_1 = _a.sent();
82
- if (!(err_1 instanceof errors_1.ShipItError))
83
- throw err_1;
84
- program.error(err_1.message);
85
- return [3 /*break*/, 3];
86
- case 3: return [2 /*return*/];
87
- }
88
- });
89
- }); };
90
- }
91
113
  }
92
114
  exports.setupCommands = setupCommands;
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var __generator = (this && this.__generator) || function (thisArg, body) {
24
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
25
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
26
+ function verb(n) { return function (v) { return step([n, v]); }; }
27
+ function step(op) {
28
+ if (f) throw new TypeError("Generator is already executing.");
29
+ while (_) try {
30
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
31
+ if (y = 0, t) op = [op[0] & 2, t.value];
32
+ switch (op[0]) {
33
+ case 0: case 1: t = op; break;
34
+ case 4: _.label++; return { value: op[1], done: false };
35
+ case 5: _.label++; y = op[1]; op = [0]; continue;
36
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
37
+ default:
38
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
39
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
40
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
41
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
42
+ if (t[2]) _.ops.pop();
43
+ _.trys.pop(); continue;
44
+ }
45
+ op = body.call(thisArg, _);
46
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
47
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
48
+ }
49
+ };
50
+ var __importDefault = (this && this.__importDefault) || function (mod) {
51
+ return (mod && mod.__esModule) ? mod : { "default": mod };
52
+ };
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.CommitLocalPackagesTask = void 0;
55
+ require("reflect-metadata");
56
+ var fs_1 = __importDefault(require("fs"));
57
+ var inversify_1 = require("inversify");
58
+ var types_1 = require("../types");
59
+ var services_1 = require("../services");
60
+ var MonorepoPackageJsonFiles_1 = require("../constants/MonorepoPackageJsonFiles");
61
+ var utils_1 = require("../utils");
62
+ var CommitLocalPackagesTask = /** @class */ (function () {
63
+ function CommitLocalPackagesTask(service) {
64
+ this.service = service;
65
+ }
66
+ CommitLocalPackagesTask.prototype.run = function (options) {
67
+ return __awaiter(this, void 0, void 0, function () {
68
+ var mergeRequest, commitFiles;
69
+ return __generator(this, function (_a) {
70
+ switch (_a.label) {
71
+ case 0:
72
+ utils_1.Logger.logTask('Committing clickview npm package versions');
73
+ return [4 /*yield*/, this.service.getMergeRequest(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.branchName)];
74
+ case 1:
75
+ mergeRequest = _a.sent();
76
+ return [4 /*yield*/, this.getCommitFiles()];
77
+ case 2:
78
+ commitFiles = _a.sent();
79
+ console.log('commit files', commitFiles);
80
+ // await this.service.commit(
81
+ // ProjectIds.MONOREPO_PROJECT_ID,
82
+ // options.branchName,
83
+ // 'Bump package versions',
84
+ // commitFiles
85
+ // );
86
+ return [2 /*return*/, true];
87
+ }
88
+ });
89
+ });
90
+ };
91
+ CommitLocalPackagesTask.prototype.getCommitFiles = function () {
92
+ return __awaiter(this, void 0, void 0, function () {
93
+ var commitFiles, _i, MONOREPO_PACKAGE_JSON_FILES_1, filePath;
94
+ return __generator(this, function (_a) {
95
+ commitFiles = [];
96
+ for (_i = 0, MONOREPO_PACKAGE_JSON_FILES_1 = MonorepoPackageJsonFiles_1.MONOREPO_PACKAGE_JSON_FILES; _i < MONOREPO_PACKAGE_JSON_FILES_1.length; _i++) {
97
+ filePath = MONOREPO_PACKAGE_JSON_FILES_1[_i];
98
+ console.log('reading file', filePath);
99
+ commitFiles.push({
100
+ filePath: filePath,
101
+ content: fs_1.default.readFileSync(filePath, { encoding: 'utf8' })
102
+ });
103
+ }
104
+ return [2 /*return*/, commitFiles];
105
+ });
106
+ });
107
+ };
108
+ CommitLocalPackagesTask = __decorate([
109
+ inversify_1.injectable(),
110
+ __param(0, inversify_1.inject(types_1.SERVICES.GitLabService)),
111
+ __metadata("design:paramtypes", [services_1.GitLabService])
112
+ ], CommitLocalPackagesTask);
113
+ return CommitLocalPackagesTask;
114
+ }());
115
+ exports.CommitLocalPackagesTask = CommitLocalPackagesTask;
116
+ // function getPackageJsonPaths(): string[] {
117
+ // const packageJsonPaths: string[] = [];
118
+ // // Walk through the file system and push the path of each package.json file to the array
119
+ // function findPackageJsonPathsInDirectory(startPath: string) {
120
+ // const files = fs.readdirSync(startPath);
121
+ // files.forEach(file => {
122
+ // const filename = path.join(startPath, file);
123
+ // const stat = fs.lstatSync(filename);
124
+ // if (stat.isDirectory())
125
+ // return findPackageJsonPathsInDirectory(filename);
126
+ // if (!filename.includes('package.json'))
127
+ // return;
128
+ // // Ignore any `package.json` files found under `node_modules`
129
+ // if (filename.includes('node_modules'))
130
+ // return;
131
+ // packageJsonPaths.push(filename);
132
+ // });
133
+ // };
134
+ // const packagesRoot = path.resolve(__dirname, '../../../packages');
135
+ // findPackageJsonPathsInDirectory(packagesRoot); // Start from the `/packages` folder
136
+ // return packageJsonPaths;
137
+ // }
@@ -60,36 +60,54 @@ var CreateBranchTask = /** @class */ (function () {
60
60
  }
61
61
  CreateBranchTask.prototype.run = function (options) {
62
62
  return __awaiter(this, void 0, void 0, function () {
63
- var projects, _i, projects_1, project, _a, branch, branchName, branchFrom;
64
- return __generator(this, function (_b) {
65
- switch (_b.label) {
63
+ var projects, _loop_1, this_1, _i, projects_1, project;
64
+ return __generator(this, function (_a) {
65
+ switch (_a.label) {
66
66
  case 0:
67
67
  utils_1.Logger.logTask('Creating release branches');
68
68
  return [4 /*yield*/, this.service.getProjects(options)];
69
69
  case 1:
70
- projects = _b.sent();
70
+ projects = _a.sent();
71
+ _loop_1 = function (project) {
72
+ var _b, branch, branchName, branchFrom;
73
+ return __generator(this, function (_c) {
74
+ switch (_c.label) {
75
+ case 0: return [4 /*yield*/, this_1.service.getNextBranchInfo(project.id, options.version)];
76
+ case 1:
77
+ _b = _c.sent(), branch = _b.branch, branchName = _b.branchName;
78
+ if (branch) {
79
+ utils_1.Logger.logWarning("[".concat(project.title, "]: [").concat(branchName, "] Already exists"));
80
+ return [2 /*return*/, "continue"];
81
+ }
82
+ branchFrom = (function () {
83
+ if (project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID)
84
+ return 'docker';
85
+ return options.version === 'patch' ? 'master' : 'dev';
86
+ })();
87
+ // const branchFrom = options.version === 'patch' ? 'master' : 'dev';
88
+ return [4 /*yield*/, this_1.service.createBranch(project, branchFrom, branchName, false)];
89
+ case 2:
90
+ // const branchFrom = options.version === 'patch' ? 'master' : 'dev';
91
+ _c.sent();
92
+ utils_1.Logger.logMessage("[".concat(project.title, "]: [").concat(branchName, "] Has been created"));
93
+ return [2 /*return*/];
94
+ }
95
+ });
96
+ };
97
+ this_1 = this;
71
98
  _i = 0, projects_1 = projects;
72
- _b.label = 2;
99
+ _a.label = 2;
73
100
  case 2:
74
- if (!(_i < projects_1.length)) return [3 /*break*/, 6];
101
+ if (!(_i < projects_1.length)) return [3 /*break*/, 5];
75
102
  project = projects_1[_i];
76
- return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
103
+ return [5 /*yield**/, _loop_1(project)];
77
104
  case 3:
78
- _a = _b.sent(), branch = _a.branch, branchName = _a.branchName;
79
- if (branch) {
80
- utils_1.Logger.logWarning("[".concat(project.title, "]: [").concat(branchName, "] Already exists"));
81
- return [3 /*break*/, 5];
82
- }
83
- branchFrom = options.version === 'patch' ? 'master' : 'dev';
84
- return [4 /*yield*/, this.service.createBranch(project, branchFrom, branchName, false)];
105
+ _a.sent();
106
+ _a.label = 4;
85
107
  case 4:
86
- _b.sent();
87
- utils_1.Logger.logMessage("[".concat(project.title, "]: [").concat(branchName, "] Has been created"));
88
- _b.label = 5;
89
- case 5:
90
108
  _i++;
91
109
  return [3 /*break*/, 2];
92
- case 6: return [2 /*return*/, true];
110
+ case 5: return [2 /*return*/, true];
93
111
  }
94
112
  });
95
113
  });
@@ -84,18 +84,28 @@ var InstallPackagesTask = /** @class */ (function () {
84
84
  switch (_c.label) {
85
85
  case 0:
86
86
  utils_1.Logger.logTask('Installing npm packages');
87
- return [4 /*yield*/, this.getMilestone(_options)];
87
+ if (!_options.monorepoBranchName && !_options.milestone) {
88
+ utils_1.Logger.logError('Please provide either a milestone or branch name argument.');
89
+ return [2 /*return*/, false];
90
+ }
91
+ milestone = _options.milestone;
92
+ if (!!milestone) return [3 /*break*/, 2];
93
+ utils_1.Logger.logInfo("Searching for a merge request in project \"monorepo\" with branch name \"".concat(_options.monorepoBranchName, "\"..."));
94
+ return [4 /*yield*/, this.service.getMilestoneByBranchName(utils_1.ProjectIds.MONOREPO_PROJECT_ID, _options.monorepoBranchName)];
88
95
  case 1:
89
96
  milestone = _c.sent();
97
+ _c.label = 2;
98
+ case 2:
90
99
  if (!milestone)
91
100
  return [2 /*return*/, false];
101
+ utils_1.Logger.logInfo("Found milestone \"".concat(milestone, "\". Proceeding to install packages in consuming projects..."));
92
102
  options = {
93
103
  version: _options.version,
94
104
  projectIds: _options.projectIds,
95
105
  milestone: milestone
96
106
  };
97
107
  return [4 /*yield*/, this.service.getProjects(options)];
98
- case 2:
108
+ case 3:
99
109
  projects = _c.sent();
100
110
  monorepo = projects.find(function (p) { return p.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID; });
101
111
  consumingProjects = projects.filter(function (p) { return p.id.toString() !== utils_1.ProjectIds.MONOREPO_PROJECT_ID; });
@@ -108,14 +118,14 @@ var InstallPackagesTask = /** @class */ (function () {
108
118
  return [2 /*return*/, false];
109
119
  }
110
120
  return [4 /*yield*/, this.service.getNextBranchInfo(monorepo.id, options.version)];
111
- case 3:
121
+ case 4:
112
122
  _a = _c.sent(), monorepoBranch = _a.branch, monorepoBranchName = _a.branchName;
113
123
  if (!monorepoBranch) {
114
124
  utils_1.Logger.logError("[".concat(monorepo.title, "]: [").concat(monorepoBranchName, "] branch does not exist"));
115
125
  return [2 /*return*/, false];
116
126
  }
117
127
  return [4 /*yield*/, this.getPackageVersions(monorepoBranchName)];
118
- case 4:
128
+ case 5:
119
129
  versions = _c.sent();
120
130
  utils_1.Logger.logMessage("Versions identified for ".concat(monorepoBranchName));
121
131
  Object.keys(versions).forEach(function (key) {
@@ -123,26 +133,26 @@ var InstallPackagesTask = /** @class */ (function () {
123
133
  });
124
134
  utils_1.Logger.logMessage('\nInstalling packages:\n');
125
135
  _i = 0, consumingProjects_1 = consumingProjects;
126
- _c.label = 5;
127
- case 5:
128
- if (!(_i < consumingProjects_1.length)) return [3 /*break*/, 10];
136
+ _c.label = 6;
137
+ case 6:
138
+ if (!(_i < consumingProjects_1.length)) return [3 /*break*/, 11];
129
139
  project = consumingProjects_1[_i];
130
140
  return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
131
- case 6:
141
+ case 7:
132
142
  _b = _c.sent(), branch = _b.branch, branchName = _b.branchName;
133
143
  if (!branch) {
134
144
  utils_1.Logger.logError("[".concat(project.title, "]: [").concat(branchName, "] does not exist"));
135
- return [3 /*break*/, 9];
145
+ return [3 /*break*/, 10];
136
146
  }
137
147
  return [4 /*yield*/, this.updateAndSavePackageFiles(project, options.milestone, branchName, versions)];
138
- case 7:
148
+ case 8:
139
149
  hasUpdates = _c.sent();
140
150
  /**
141
151
  * If there are no changes to the versions, we're done here
142
152
  */
143
153
  if (!hasUpdates) {
144
154
  utils_1.Logger.logWarning("[".concat(project.title, "]: [").concat(branchName, "] does not require any updates"));
145
- return [3 /*break*/, 9];
155
+ return [3 /*break*/, 10];
146
156
  }
147
157
  /**
148
158
  * Run npm i to update our package log file
@@ -154,48 +164,17 @@ var InstallPackagesTask = /** @class */ (function () {
154
164
  * Commit our updated package.json and package-lock.json
155
165
  */
156
166
  return [4 /*yield*/, this.commitUpdatedFiles(project, options.milestone, branchName)];
157
- case 8:
167
+ case 9:
158
168
  /**
159
169
  * Commit our updated package.json and package-lock.json
160
170
  */
161
171
  _c.sent();
162
172
  utils_1.Logger.logMessage("[".concat(project.title, "]: File changes committed"));
163
- _c.label = 9;
164
- case 9:
173
+ _c.label = 10;
174
+ case 10:
165
175
  _i++;
166
- return [3 /*break*/, 5];
167
- case 10: return [2 /*return*/, true];
168
- }
169
- });
170
- });
171
- };
172
- InstallPackagesTask.prototype.getMilestone = function (options) {
173
- var _a, _b;
174
- return __awaiter(this, void 0, void 0, function () {
175
- var mergeRequest;
176
- return __generator(this, function (_c) {
177
- switch (_c.label) {
178
- case 0:
179
- if (options.milestone)
180
- return [2 /*return*/, options.milestone];
181
- if (!options.branchName) {
182
- utils_1.Logger.logError('Please provide either a milestone or branch name argument.');
183
- return [2 /*return*/, ''];
184
- }
185
- utils_1.Logger.logInfo("Searching for a merge request in project \"monorepo\" with branch name \"".concat(options.branchName, "\"..."));
186
- return [4 /*yield*/, this.service.getMergeRequest(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.branchName)];
187
- case 1:
188
- mergeRequest = _c.sent();
189
- if (!mergeRequest) {
190
- utils_1.Logger.logError("No merge request in project \"monorepo\" with branch name \"".concat(options.branchName, "\" could be found."));
191
- return [2 /*return*/, ''];
192
- }
193
- if (!mergeRequest.milestone) {
194
- utils_1.Logger.logError("No milestone could be found on merge request \"".concat(mergeRequest.title, "\". Please attach a milestone then try again: ").concat(mergeRequest.url));
195
- return [2 /*return*/, ''];
196
- }
197
- utils_1.Logger.logInfo("Found milestone \"".concat(mergeRequest.milestone.name, "\". Proceeding to install packages in consuming projects..."));
198
- return [2 /*return*/, (_b = (_a = mergeRequest.milestone) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : ''];
176
+ return [3 /*break*/, 6];
177
+ case 11: return [2 /*return*/, true];
199
178
  }
200
179
  });
201
180
  });
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var __generator = (this && this.__generator) || function (thisArg, body) {
24
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
25
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
26
+ function verb(n) { return function (v) { return step([n, v]); }; }
27
+ function step(op) {
28
+ if (f) throw new TypeError("Generator is already executing.");
29
+ while (_) try {
30
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
31
+ if (y = 0, t) op = [op[0] & 2, t.value];
32
+ switch (op[0]) {
33
+ case 0: case 1: t = op; break;
34
+ case 4: _.label++; return { value: op[1], done: false };
35
+ case 5: _.label++; y = op[1]; op = [0]; continue;
36
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
37
+ default:
38
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
39
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
40
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
41
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
42
+ if (t[2]) _.ops.pop();
43
+ _.trys.pop(); continue;
44
+ }
45
+ op = body.call(thisArg, _);
46
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
47
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
48
+ }
49
+ };
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.StartConsumingProjectBuildsTask = void 0;
52
+ require("reflect-metadata");
53
+ var inversify_1 = require("inversify");
54
+ var utils_1 = require("../utils");
55
+ var services_1 = require("../services");
56
+ var types_1 = require("../types");
57
+ var TeamCityBuildIDs_1 = require("../constants/TeamCityBuildIDs");
58
+ var StartConsumingProjectBuildsTask = /** @class */ (function () {
59
+ function StartConsumingProjectBuildsTask(teamCityService, gitLabService) {
60
+ this.teamCityService = teamCityService;
61
+ this.gitLabService = gitLabService;
62
+ }
63
+ StartConsumingProjectBuildsTask.prototype.run = function (_options) {
64
+ return __awaiter(this, void 0, void 0, function () {
65
+ var milestone, options, projects, consumingProjects, projectBuildMap, _i, consumingProjects_1, project, branchName, build, totalBuilds, project;
66
+ return __generator(this, function (_a) {
67
+ switch (_a.label) {
68
+ case 0:
69
+ utils_1.Logger.logTask('Starting builds for consuming projects in TeamCity');
70
+ if (!_options.monorepoBranchName && !_options.milestone) {
71
+ utils_1.Logger.logError('Please provide either a milestone or branch name argument.');
72
+ return [2 /*return*/, false];
73
+ }
74
+ milestone = _options.milestone;
75
+ if (!!milestone) return [3 /*break*/, 2];
76
+ utils_1.Logger.logInfo("Searching for a merge request in project \"monorepo\" with branch name \"".concat(_options.monorepoBranchName, "\"..."));
77
+ return [4 /*yield*/, this.gitLabService.getMilestoneByBranchName(utils_1.ProjectIds.MONOREPO_PROJECT_ID, _options.monorepoBranchName)];
78
+ case 1:
79
+ milestone = _a.sent();
80
+ _a.label = 2;
81
+ case 2:
82
+ if (!milestone)
83
+ return [2 /*return*/, false];
84
+ utils_1.Logger.logInfo("Found milestone \"".concat(milestone, "\". Proceeding to install packages in consuming projects..."));
85
+ options = {
86
+ version: _options.version,
87
+ projectIds: _options.projectIds,
88
+ milestone: milestone
89
+ };
90
+ return [4 /*yield*/, this.gitLabService.getProjects(options)];
91
+ case 3:
92
+ projects = _a.sent();
93
+ consumingProjects = projects.filter(function (p) { return p.id.toString() !== utils_1.ProjectIds.MONOREPO_PROJECT_ID; });
94
+ if (!consumingProjects.length) {
95
+ utils_1.Logger.logError("No projects that consume monorepo could be found");
96
+ return [2 /*return*/, false];
97
+ }
98
+ projectBuildMap = {};
99
+ _i = 0, consumingProjects_1 = consumingProjects;
100
+ _a.label = 4;
101
+ case 4:
102
+ if (!(_i < consumingProjects_1.length)) return [3 /*break*/, 8];
103
+ project = consumingProjects_1[_i];
104
+ return [4 /*yield*/, this.gitLabService.getReleaseBranchNameMilestone(project.id, options.milestone)];
105
+ case 5:
106
+ branchName = _a.sent();
107
+ if (!branchName) {
108
+ utils_1.Logger.logWarning("Release branch in project \"".concat(project.title, "\" with milestone \"").concat(options.milestone, "\" was not found. Skipping project..."));
109
+ return [3 /*break*/, 7];
110
+ }
111
+ return [4 /*yield*/, this.teamCityService.startBuild(TeamCityBuildIDs_1.TeamCityBuildIds[project.id.toString()], branchName)];
112
+ case 6:
113
+ build = _a.sent();
114
+ projectBuildMap[project.title] = build;
115
+ _a.label = 7;
116
+ case 7:
117
+ _i++;
118
+ return [3 /*break*/, 4];
119
+ case 8:
120
+ totalBuilds = Object.keys(projectBuildMap).length;
121
+ if (!totalBuilds) {
122
+ utils_1.Logger.logWarning("No releases found in consuming projects with milestone \"".concat(options.milestone, "\"."));
123
+ return [2 /*return*/, true];
124
+ }
125
+ utils_1.Logger.logSuccess("Successfully started builds in ".concat(totalBuilds, " projects."));
126
+ for (project in projectBuildMap) {
127
+ utils_1.Logger.logInfo("[".concat(project, "]: ").concat(projectBuildMap[project].webUrl));
128
+ }
129
+ return [2 /*return*/, true];
130
+ }
131
+ });
132
+ });
133
+ };
134
+ StartConsumingProjectBuildsTask = __decorate([
135
+ (0, inversify_1.injectable)(),
136
+ __param(0, (0, inversify_1.inject)(types_1.SERVICES.TeamCityService)),
137
+ __param(1, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
138
+ __metadata("design:paramtypes", [services_1.TeamCityService,
139
+ services_1.GitLabService])
140
+ ], StartConsumingProjectBuildsTask);
141
+ return StartConsumingProjectBuildsTask;
142
+ }());
143
+ exports.StartConsumingProjectBuildsTask = StartConsumingProjectBuildsTask;