@clickview/ship-it 0.0.2 → 0.0.4-dev.0

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 (69) hide show
  1. package/config.json +5 -0
  2. package/lib/config.json +5 -0
  3. package/lib/src/api-clients/GitLabApiClient.js +1 -1
  4. package/lib/src/api-clients/git-lab/GitLabApiClient.js +341 -0
  5. package/lib/src/api-clients/git-lab/GitLabMapper.js +61 -0
  6. package/lib/src/api-clients/index.js +2 -1
  7. package/lib/src/api-clients/team-city/TeamCityApiClient.js +85 -0
  8. package/lib/src/commands/BumpPackagesCommand.js +12 -6
  9. package/lib/src/commands/CommitPackageVersionsCommand.js +78 -0
  10. package/lib/src/commands/CreateBranchCommand.js +12 -14
  11. package/lib/src/commands/CreateMergeRequestCommand.js +16 -18
  12. package/lib/src/commands/CreateReleaseNotesCommand.js +6 -8
  13. package/lib/src/commands/InstallPackagesCommand.js +76 -0
  14. package/lib/src/commands/ReleaseCommand.js +31 -24
  15. package/lib/src/commands/StartConsumingProjectBuildsCommand.js +76 -0
  16. package/lib/src/commands/StatusCommand.js +3 -5
  17. package/lib/src/commands/ValidateMergeRequestCommand.js +76 -0
  18. package/lib/src/commands/VersionCommand.js +3 -5
  19. package/lib/src/commands/index.js +3 -0
  20. package/lib/src/constants/CommandTypeMapping.js +16 -0
  21. package/lib/src/constants/MonorepoPackageJsonFiles.js +13 -0
  22. package/lib/src/constants/TeamCityBuildIDs.js +13 -0
  23. package/lib/src/constants/index.js +18 -0
  24. package/lib/src/errors/ShipItError.js +32 -0
  25. package/lib/src/errors/index.js +17 -0
  26. package/lib/src/index.js +2 -85
  27. package/lib/src/interfaces/VersionType.js +2 -0
  28. package/lib/src/interfaces/command-cli-options/MilestoneCommandCliOptions.js +2 -0
  29. package/lib/src/interfaces/command-cli-options/ReleaseCommandCliOptions.js +2 -0
  30. package/lib/src/interfaces/command-cli-options/index.js +18 -0
  31. package/lib/src/interfaces/command-options/BumpPackagesCommandOptions.js +2 -0
  32. package/lib/src/interfaces/command-options/CommitPackageVersionsCommandOptions.js +2 -0
  33. package/lib/src/interfaces/command-options/DockerMilestoneCommandOptions.js +2 -0
  34. package/lib/src/interfaces/command-options/InstallPackagesCommandOptions.js +2 -0
  35. package/lib/src/interfaces/command-options/MilestoneCommandOptions.js +2 -0
  36. package/lib/src/interfaces/command-options/ReleaseCommandOptions.js +2 -0
  37. package/lib/src/interfaces/command-options/ValidateMRCommandOptions.js +2 -0
  38. package/lib/src/interfaces/command-options/index.js +21 -0
  39. package/lib/src/interfaces/index.js +3 -1
  40. package/lib/src/interfaces/models/Milestone.js +2 -0
  41. package/lib/src/interfaces/models/index.js +1 -0
  42. package/lib/src/inversify.config.js +13 -0
  43. package/lib/src/services/GitLabService.js +128 -34
  44. package/lib/src/services/TeamCityService.js +34 -0
  45. package/lib/src/services/index.js +1 -0
  46. package/lib/src/startup/AddMilestoneCommand.js +81 -0
  47. package/lib/src/startup/GetAction.js +68 -0
  48. package/lib/src/startup/SetupCommands.js +114 -0
  49. package/lib/src/tasks/BumpPackagesTask.js +114 -238
  50. package/lib/src/tasks/BumpVersionTxtTask.js +13 -26
  51. package/lib/src/tasks/CommitLocalPackagesTask.js +137 -0
  52. package/lib/src/tasks/CommitPackageVersionsTask.js +105 -0
  53. package/lib/src/tasks/CreateBranchTask.js +35 -32
  54. package/lib/src/tasks/CreateMergeRequestTask.js +22 -37
  55. package/lib/src/tasks/CreateReleaseNotesTask.js +2 -6
  56. package/lib/src/tasks/InstallPackagesTask.js +337 -0
  57. package/lib/src/tasks/StartConsumingProjectBuildsTask.js +143 -0
  58. package/lib/src/tasks/StartMonorepoBuildTask.js +95 -0
  59. package/lib/src/tasks/ValidateCommitsTask.js +6 -14
  60. package/lib/src/tasks/ValidateDescriptionsTask.js +15 -16
  61. package/lib/src/tasks/ValidateMergeRequestTask.js +108 -0
  62. package/lib/src/tasks/ValidateTask.js +7 -8
  63. package/lib/src/tasks/VersionTask.js +7 -20
  64. package/lib/src/tasks/index.js +5 -0
  65. package/lib/src/types.js +13 -2
  66. package/lib/src/utils/BranchNames.js +2 -0
  67. package/lib/src/utils/Descriptions.js +28 -23
  68. package/lib/src/utils/ProjectIds.js +10 -6
  69. package/package.json +24 -23
@@ -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;
@@ -0,0 +1,95 @@
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.StartMonorepoBuildTask = 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 StartMonorepoBuildTask = /** @class */ (function () {
59
+ function StartMonorepoBuildTask(teamCityService, gitLabService) {
60
+ this.teamCityService = teamCityService;
61
+ this.gitLabService = gitLabService;
62
+ }
63
+ StartMonorepoBuildTask.prototype.run = function (options) {
64
+ return __awaiter(this, void 0, void 0, function () {
65
+ var branchName, build;
66
+ return __generator(this, function (_a) {
67
+ switch (_a.label) {
68
+ case 0:
69
+ utils_1.Logger.logTask('Starting Monorepo build in TeamCity');
70
+ return [4 /*yield*/, this.gitLabService.getReleaseBranchNameMilestone(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.milestone)];
71
+ case 1:
72
+ branchName = _a.sent();
73
+ if (!branchName) {
74
+ utils_1.Logger.logError("Monorepo release branch with milestone \"".concat(options.milestone, "\" was not found."));
75
+ return [2 /*return*/, false];
76
+ }
77
+ return [4 /*yield*/, this.teamCityService.startBuild(TeamCityBuildIDs_1.TeamCityBuildIds[utils_1.ProjectIds.MONOREPO_PROJECT_ID], branchName)];
78
+ case 2:
79
+ build = _a.sent();
80
+ utils_1.Logger.logSuccess("Successfully started build in monorepo. View progress here: ".concat(build.webUrl));
81
+ return [2 /*return*/, true];
82
+ }
83
+ });
84
+ });
85
+ };
86
+ StartMonorepoBuildTask = __decorate([
87
+ (0, inversify_1.injectable)(),
88
+ __param(0, (0, inversify_1.inject)(types_1.SERVICES.TeamCityService)),
89
+ __param(1, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
90
+ __metadata("design:paramtypes", [services_1.TeamCityService,
91
+ services_1.GitLabService])
92
+ ], StartMonorepoBuildTask);
93
+ return StartMonorepoBuildTask;
94
+ }());
95
+ exports.StartMonorepoBuildTask = StartMonorepoBuildTask;
@@ -56,36 +56,28 @@ var services_1 = require("../services");
56
56
  var utils_1 = require("../utils");
57
57
  var ValidateCommitsTask = /** @class */ (function () {
58
58
  function ValidateCommitsTask(service) {
59
- this._service = service;
59
+ this.service = service;
60
60
  }
61
61
  ValidateCommitsTask.prototype.run = function (options) {
62
62
  return __awaiter(this, void 0, void 0, function () {
63
- var projects, cont, _i, projects_1, project, currentVersionTag, devCommits, shouldCherryPick;
63
+ var projects, cont, _i, projects_1, project, tag, devCommits, shouldCherryPick;
64
64
  return __generator(this, function (_a) {
65
65
  switch (_a.label) {
66
66
  case 0:
67
67
  utils_1.Logger.logTask('Validating dev commits');
68
- return [4 /*yield*/, this._service.getProjects(options)];
68
+ return [4 /*yield*/, this.service.getProjects(options)];
69
69
  case 1:
70
70
  projects = _a.sent();
71
- if (!projects.length) {
72
- utils_1.Logger.logError("No projects could be found with the specified options");
73
- return [2 /*return*/, false];
74
- }
75
71
  cont = true;
76
72
  _i = 0, projects_1 = projects;
77
73
  _a.label = 2;
78
74
  case 2:
79
75
  if (!(_i < projects_1.length)) return [3 /*break*/, 6];
80
76
  project = projects_1[_i];
81
- return [4 /*yield*/, this._service.getCurrentVersionTag(project.id)];
77
+ return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
82
78
  case 3:
83
- currentVersionTag = _a.sent();
84
- if (!currentVersionTag) {
85
- utils_1.Logger.logError("Could not find the next version for: ".concat(project.title));
86
- return [2 /*return*/, false];
87
- }
88
- return [4 /*yield*/, this._service.getDevCommitsSince(project.id, currentVersionTag.target)];
79
+ tag = (_a.sent()).tag;
80
+ return [4 /*yield*/, this.service.getDevCommitsSince(project.id, tag.target)];
89
81
  case 4:
90
82
  devCommits = _a.sent();
91
83
  shouldCherryPick = utils_1.Commits.shouldCherryPick(project, devCommits);
@@ -56,32 +56,31 @@ require("reflect-metadata");
56
56
  var inversify_1 = require("inversify");
57
57
  var lodash_1 = __importDefault(require("lodash"));
58
58
  var types_1 = require("../types");
59
- var GitLabService_1 = require("../services/GitLabService");
59
+ var services_1 = require("../services");
60
60
  var utils_1 = require("../utils");
61
61
  var ValidateDescriptionsTask = /** @class */ (function () {
62
62
  function ValidateDescriptionsTask(service) {
63
- this._service = service;
63
+ this.service = service;
64
64
  }
65
65
  ValidateDescriptionsTask.prototype.run = function (options) {
66
66
  return __awaiter(this, void 0, void 0, function () {
67
- var projects, cont, _i, projects_1, project, invalidMrs, _a, _b, mr, isDescriptionValid, groupedByUser, key, _c, _d, mr;
68
- return __generator(this, function (_e) {
69
- switch (_e.label) {
67
+ var projects, cont, _i, projects_1, project, invalidMrs, mergeRequestsTargetingDev, _a, mergeRequestsTargetingDev_1, mr, isDescriptionValid, groupedByUser, key, _b, _c, mr;
68
+ return __generator(this, function (_d) {
69
+ switch (_d.label) {
70
70
  case 0:
71
71
  utils_1.Logger.logTask('Validating descriptions');
72
- return [4 /*yield*/, this._service.getProjects(options)];
72
+ return [4 /*yield*/, this.service.getProjects(options)];
73
73
  case 1:
74
- projects = _e.sent();
75
- if (!projects.length) {
76
- utils_1.Logger.logError("No projects could be found with the specified options");
77
- return [2 /*return*/, false];
78
- }
74
+ projects = _d.sent();
79
75
  cont = true;
80
76
  for (_i = 0, projects_1 = projects; _i < projects_1.length; _i++) {
81
77
  project = projects_1[_i];
82
78
  invalidMrs = [];
83
- for (_a = 0, _b = project.mergeRequests; _a < _b.length; _a++) {
84
- mr = _b[_a];
79
+ mergeRequestsTargetingDev = project.mergeRequests.filter(function (mergeRequest) {
80
+ return mergeRequest.targetBranch === 'dev';
81
+ });
82
+ for (_a = 0, mergeRequestsTargetingDev_1 = mergeRequestsTargetingDev; _a < mergeRequestsTargetingDev_1.length; _a++) {
83
+ mr = mergeRequestsTargetingDev_1[_a];
85
84
  isDescriptionValid = project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID ?
86
85
  utils_1.Descriptions.isMonorepoDescriptionValid(mr.description) :
87
86
  utils_1.Descriptions.isDescriptionValid(mr.description);
@@ -93,8 +92,8 @@ var ValidateDescriptionsTask = /** @class */ (function () {
93
92
  groupedByUser = lodash_1.default.groupBy(invalidMrs, function (mr) { return mr.author; });
94
93
  for (key in groupedByUser) {
95
94
  utils_1.Logger.logMessage(key);
96
- for (_c = 0, _d = groupedByUser[key]; _c < _d.length; _c++) {
97
- mr = _d[_c];
95
+ for (_b = 0, _c = groupedByUser[key]; _b < _c.length; _b++) {
96
+ mr = _c[_b];
98
97
  utils_1.Logger.logMessage("- ".concat(mr.url));
99
98
  }
100
99
  }
@@ -111,7 +110,7 @@ var ValidateDescriptionsTask = /** @class */ (function () {
111
110
  ValidateDescriptionsTask = __decorate([
112
111
  (0, inversify_1.injectable)(),
113
112
  __param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
114
- __metadata("design:paramtypes", [GitLabService_1.GitLabService])
113
+ __metadata("design:paramtypes", [services_1.GitLabService])
115
114
  ], ValidateDescriptionsTask);
116
115
  return ValidateDescriptionsTask;
117
116
  }());
@@ -0,0 +1,108 @@
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.ValidateMergeRequestTask = void 0;
52
+ require("reflect-metadata");
53
+ var inversify_1 = require("inversify");
54
+ var Logger_1 = require("../utils/Logger");
55
+ var types_1 = require("../types");
56
+ var services_1 = require("../services");
57
+ var utils_1 = require("../utils");
58
+ var ValidateMergeRequestTask = /** @class */ (function () {
59
+ function ValidateMergeRequestTask(service) {
60
+ this.service = service;
61
+ }
62
+ ValidateMergeRequestTask.prototype.run = function (options) {
63
+ return __awaiter(this, void 0, void 0, function () {
64
+ var project, mergeRequestId, mergeRequest, isDescriptionValid;
65
+ return __generator(this, function (_a) {
66
+ switch (_a.label) {
67
+ case 0:
68
+ Logger_1.Logger.logTask('Validating Merge Request');
69
+ return [4 /*yield*/, this.service.getProject(options.projectId)];
70
+ case 1:
71
+ project = _a.sent();
72
+ mergeRequestId = options.branchName.replace('merge-requests/', '');
73
+ return [4 /*yield*/, this.service.getMergeRequestById(project.id, mergeRequestId)];
74
+ case 2:
75
+ mergeRequest = _a.sent();
76
+ if (!mergeRequest) {
77
+ Logger_1.Logger.logError("Could not find merge request [".concat(project.title, "]: [").concat(options.branchName, "]"));
78
+ return [2 /*return*/, false];
79
+ }
80
+ if (mergeRequest.targetBranch !== 'dev') {
81
+ Logger_1.Logger.logMessage("Merge request is not targeting dev and does not need to be validated");
82
+ return [2 /*return*/, true];
83
+ }
84
+ if (!mergeRequest.milestone) {
85
+ Logger_1.Logger.logError("Merge request does not have a milestone");
86
+ return [2 /*return*/, false];
87
+ }
88
+ isDescriptionValid = project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID ?
89
+ utils_1.Descriptions.isMonorepoDescriptionValid(mergeRequest.description) :
90
+ utils_1.Descriptions.isDescriptionValid(mergeRequest.description);
91
+ if (!isDescriptionValid) {
92
+ Logger_1.Logger.logError('Merge request description is invalid');
93
+ return [2 /*return*/, false];
94
+ }
95
+ Logger_1.Logger.logSuccess('Merge request is valid');
96
+ return [2 /*return*/, true];
97
+ }
98
+ });
99
+ });
100
+ };
101
+ ValidateMergeRequestTask = __decorate([
102
+ (0, inversify_1.injectable)(),
103
+ __param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
104
+ __metadata("design:paramtypes", [services_1.GitLabService])
105
+ ], ValidateMergeRequestTask);
106
+ return ValidateMergeRequestTask;
107
+ }());
108
+ exports.ValidateMergeRequestTask = ValidateMergeRequestTask;
@@ -71,7 +71,7 @@ var services_1 = require("../services");
71
71
  var utils_1 = require("../utils");
72
72
  var ValidateTask = /** @class */ (function () {
73
73
  function ValidateTask(service) {
74
- this._service = service;
74
+ this.service = service;
75
75
  }
76
76
  ValidateTask.prototype.run = function (options) {
77
77
  return __awaiter(this, void 0, void 0, function () {
@@ -80,13 +80,9 @@ var ValidateTask = /** @class */ (function () {
80
80
  switch (_a.label) {
81
81
  case 0:
82
82
  utils_1.Logger.logTask('Validating the release');
83
- return [4 /*yield*/, this._service.getProjects(options)];
83
+ return [4 /*yield*/, this.service.getProjects(options)];
84
84
  case 1:
85
85
  projects = _a.sent();
86
- if (!projects.length) {
87
- utils_1.Logger.logError("No projects could be found with the specified options");
88
- return [2 /*return*/, false];
89
- }
90
86
  utils_1.Logger.logMessage("Found ".concat(projects.length, " projects that need to be released"));
91
87
  cont = true;
92
88
  _loop_1 = function (project) {
@@ -96,7 +92,10 @@ var ValidateTask = /** @class */ (function () {
96
92
  return __assign(__assign({}, prev), (_a = {}, _a[current] = groupedMRs[current].length, _a));
97
93
  }, {});
98
94
  var ready = !count.opened || count.opened === 0;
99
- var nonDevMrs = project.mergeRequests.filter(function (mr) { return mr.targetBranch !== 'dev'; });
95
+ /**
96
+ * Any MRs that are not targeting dev should not have a milestone
97
+ */
98
+ var nonDevMrs = project.mergeRequests.filter(function (mr) { return mr.targetBranch !== 'dev' && mr.targetBranch !== 'master'; });
100
99
  if (nonDevMrs.length)
101
100
  ready = false;
102
101
  if (!ready)
@@ -134,7 +133,7 @@ var ValidateTask = /** @class */ (function () {
134
133
  for (var _i = 0, projects_2 = projects; _i < projects_2.length; _i++) {
135
134
  var project = projects_2[_i];
136
135
  var notReadyMrs = project.mergeRequests.filter(function (mr) { return mr.status === 'opened'; });
137
- var nonDevMrs = project.mergeRequests.filter(function (mr) { return mr.targetBranch !== 'dev'; });
136
+ var nonDevMrs = project.mergeRequests.filter(function (mr) { return mr.targetBranch !== 'dev' && mr.targetBranch !== 'master'; });
138
137
  if (notReadyMrs.length)
139
138
  allNotReadyMrs.push.apply(allNotReadyMrs, notReadyMrs);
140
139
  if (nonDevMrs.length)
@@ -56,47 +56,34 @@ var services_1 = require("../services");
56
56
  var utils_1 = require("../utils");
57
57
  var VersionTask = /** @class */ (function () {
58
58
  function VersionTask(service) {
59
- this._service = service;
59
+ this.service = service;
60
60
  }
61
61
  VersionTask.prototype.run = function (options) {
62
62
  return __awaiter(this, void 0, void 0, function () {
63
- var projects, cont, _i, projects_1, project, currentVersionTag, nextVersion;
63
+ var projects, _i, projects_1, project, tag, nextVersion;
64
64
  return __generator(this, function (_a) {
65
65
  switch (_a.label) {
66
66
  case 0:
67
67
  utils_1.Logger.logTask('Calculating versions');
68
- return [4 /*yield*/, this._service.getProjects(options)];
68
+ return [4 /*yield*/, this.service.getProjects(options)];
69
69
  case 1:
70
70
  projects = _a.sent();
71
- if (!projects.length) {
72
- utils_1.Logger.logError("No projects could be found with the specified options");
73
- return [2 /*return*/, false];
74
- }
75
- cont = true;
76
71
  utils_1.Logger.logMessage('Versions:');
77
72
  _i = 0, projects_1 = projects;
78
73
  _a.label = 2;
79
74
  case 2:
80
75
  if (!(_i < projects_1.length)) return [3 /*break*/, 5];
81
76
  project = projects_1[_i];
82
- return [4 /*yield*/, this._service.getCurrentVersionTag(project.id)];
77
+ return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
83
78
  case 3:
84
- currentVersionTag = _a.sent();
85
- if (currentVersionTag === null) {
86
- utils_1.Logger.logError("[NOT FOUND]: ".concat(project.title));
87
- cont = false;
88
- return [3 /*break*/, 4];
89
- }
90
- nextVersion = utils_1.Versions.getNextVersion(currentVersionTag.name, options.version);
79
+ tag = (_a.sent()).tag;
80
+ nextVersion = utils_1.Versions.getNextVersion(tag.name, options.version);
91
81
  utils_1.Logger.logMessage("[".concat(nextVersion, "]: ").concat(project.title));
92
82
  _a.label = 4;
93
83
  case 4:
94
84
  _i++;
95
85
  return [3 /*break*/, 2];
96
- case 5:
97
- if (!cont)
98
- utils_1.Logger.logError('\nCould not calculate versions for all projects');
99
- return [2 /*return*/, cont];
86
+ case 5: return [2 /*return*/, true];
100
87
  }
101
88
  });
102
89
  });
@@ -16,10 +16,15 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./BumpPackagesTask"), exports);
18
18
  __exportStar(require("./BumpVersionTxtTask"), exports);
19
+ __exportStar(require("./CommitPackageVersionsTask"), exports);
19
20
  __exportStar(require("./CreateBranchTask"), exports);
20
21
  __exportStar(require("./CreateMergeRequestTask"), exports);
21
22
  __exportStar(require("./CreateReleaseNotesTask"), exports);
23
+ __exportStar(require("./InstallPackagesTask"), exports);
24
+ __exportStar(require("./StartConsumingProjectBuildsTask"), exports);
25
+ __exportStar(require("./StartMonorepoBuildTask"), exports);
22
26
  __exportStar(require("./ValidateCommitsTask"), exports);
23
27
  __exportStar(require("./ValidateDescriptionsTask"), exports);
28
+ __exportStar(require("./ValidateMergeRequestTask"), exports);
24
29
  __exportStar(require("./ValidateTask"), exports);
25
30
  __exportStar(require("./VersionTask"), exports);
package/lib/src/types.js CHANGED
@@ -3,12 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.COMMANDS = exports.TASKS = exports.SERVICES = exports.API_CLIENTS = exports.MISC = void 0;
4
4
  exports.MISC = {
5
5
  GitLabConfig: Symbol.for('GitLabConfig'),
6
+ TeamCityConfig: Symbol.for('TeamCityConfig')
6
7
  };
7
8
  exports.API_CLIENTS = {
8
9
  GitLabApiClient: Symbol.for('GitLabApiClient'),
10
+ TeamCityApiClient: Symbol.for('TeamCityApiClient')
9
11
  };
10
12
  exports.SERVICES = {
11
13
  GitLabService: Symbol.for('GitLabService'),
14
+ TeamCityService: Symbol.for('TeamCityService')
12
15
  };
13
16
  exports.TASKS = {
14
17
  ValidateTask: Symbol.for('ValidateTask'),
@@ -19,7 +22,12 @@ exports.TASKS = {
19
22
  CreateMergeRequestTask: Symbol.for('CreateMergeRequestTask'),
20
23
  ValidateDescriptionsTask: Symbol.for('ValidateDescriptionsTask'),
21
24
  CreateReleaseNotesTask: Symbol.for('CreateReleaseNotesTask'),
22
- BumpPackagesTask: Symbol.for('BumpPackagesTask')
25
+ InstallPackagesTask: Symbol.for('InstallPackagesTask'),
26
+ BumpPackagesTask: Symbol.for('BumpPackagesTask'),
27
+ CommitPackageVersionsTask: Symbol.for('CommitPackageVersionsTask'),
28
+ StartMonorepoBuildTask: Symbol.for('StartMonorepoBuildTask'),
29
+ StartConsumingProjectBuildsTask: Symbol.for('StartConsumingProjectBuildsTask'),
30
+ ValidateMergeRequestTask: Symbol.for('ValidateMergeRequestTask')
23
31
  };
24
32
  exports.COMMANDS = {
25
33
  StatusCommand: Symbol.for('StatusCommand'),
@@ -28,5 +36,8 @@ exports.COMMANDS = {
28
36
  CreateBranchCommand: Symbol.for('CreateBranchCommand'),
29
37
  CreateMergeRequestCommand: Symbol.for('CreateMergeRequestCommand'),
30
38
  CreateReleaseNotesCommand: Symbol.for('CreateReleaseNotesCommand'),
31
- BumpPackagesCommand: Symbol.for('BumpPackagesCommand')
39
+ InstallPackagesCommand: Symbol.for('InstallPackagesCommand'),
40
+ BumpPackagesCommand: Symbol.for('BumpPackagesCommand'),
41
+ StartConsumingProjectBuildsCommand: Symbol.for('StartConsumingProjectBuildsCommand'),
42
+ ValidateMergeRequestCommand: Symbol.for('ValidateMergeRequestCommand')
32
43
  };
@@ -3,9 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BranchNames = void 0;
4
4
  exports.BranchNames = {
5
5
  getRelease: function (version) {
6
+ return 'release/9.9.9';
6
7
  return "release/".concat(version);
7
8
  },
8
9
  getHotfix: function (version) {
10
+ return 'hotfix/9.9.9';
9
11
  return "hotfix/".concat(version);
10
12
  }
11
13
  };