@clickview/ship-it 0.0.2 → 0.0.3

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 (48) hide show
  1. package/lib/src/api-clients/{GitLabApiClient.js → git-lab/GitLabApiClient.js} +82 -107
  2. package/lib/src/api-clients/git-lab/GitLabMapper.js +60 -0
  3. package/lib/src/api-clients/index.js +1 -1
  4. package/lib/src/commands/BumpPackagesCommand.js +12 -4
  5. package/lib/src/commands/CreateBranchCommand.js +8 -8
  6. package/lib/src/commands/CreateMergeRequestCommand.js +11 -11
  7. package/lib/src/commands/CreateReleaseNotesCommand.js +4 -4
  8. package/lib/src/commands/InstallPackagesCommand.js +78 -0
  9. package/lib/src/commands/ReleaseCommand.js +14 -14
  10. package/lib/src/commands/StatusCommand.js +2 -2
  11. package/lib/src/commands/ValidateMergeRequestCommand.js +78 -0
  12. package/lib/src/commands/VersionCommand.js +2 -2
  13. package/lib/src/commands/index.js +2 -0
  14. package/lib/src/constants/CommandTypeMapping.js +15 -0
  15. package/lib/src/constants/MonorepoPackageJsonFiles.js +13 -0
  16. package/lib/src/errors/ShipItError.js +32 -0
  17. package/lib/src/errors/index.js +17 -0
  18. package/lib/src/index.js +3 -86
  19. package/lib/src/interfaces/command-options/BumpPackagesCommandOptions.js +2 -0
  20. package/lib/src/interfaces/command-options/InstallPackagesCommandOptions.js +2 -0
  21. package/lib/src/interfaces/command-options/MilestoneCommandOptions.js +2 -0
  22. package/lib/src/interfaces/command-options/ValidateMRCommandOptions.js +2 -0
  23. package/lib/src/interfaces/command-options/index.js +20 -0
  24. package/lib/src/interfaces/index.js +2 -1
  25. package/lib/src/interfaces/models/Milestone.js +2 -0
  26. package/lib/src/interfaces/models/index.js +1 -0
  27. package/lib/src/inversify.config.js +5 -0
  28. package/lib/src/services/GitLabService.js +95 -34
  29. package/lib/src/startup/AddMilestoneCommand.js +75 -0
  30. package/lib/src/startup/SetupCommands.js +92 -0
  31. package/lib/src/tasks/BumpPackagesTask.js +114 -238
  32. package/lib/src/tasks/BumpVersionTxtTask.js +13 -26
  33. package/lib/src/tasks/CommitPackageVersionsTask.js +105 -0
  34. package/lib/src/tasks/CreateBranchTask.js +17 -32
  35. package/lib/src/tasks/CreateMergeRequestTask.js +22 -37
  36. package/lib/src/tasks/CreateReleaseNotesTask.js +2 -6
  37. package/lib/src/tasks/InstallPackagesTask.js +358 -0
  38. package/lib/src/tasks/ValidateCommitsTask.js +6 -14
  39. package/lib/src/tasks/ValidateDescriptionsTask.js +15 -16
  40. package/lib/src/tasks/ValidateMergeRequestTask.js +108 -0
  41. package/lib/src/tasks/ValidateTask.js +7 -8
  42. package/lib/src/tasks/VersionTask.js +7 -20
  43. package/lib/src/tasks/index.js +3 -0
  44. package/lib/src/types.js +7 -2
  45. package/lib/src/utils/Descriptions.js +28 -23
  46. package/lib/src/utils/ProjectIds.js +7 -3
  47. package/package.json +22 -22
  48. /package/lib/src/interfaces/{ShipItOptions.js → VersionType.js} +0 -0
@@ -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,13 @@ 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);
22
24
  __exportStar(require("./ValidateCommitsTask"), exports);
23
25
  __exportStar(require("./ValidateDescriptionsTask"), exports);
26
+ __exportStar(require("./ValidateMergeRequestTask"), exports);
24
27
  __exportStar(require("./ValidateTask"), exports);
25
28
  __exportStar(require("./VersionTask"), exports);
package/lib/src/types.js CHANGED
@@ -19,7 +19,10 @@ exports.TASKS = {
19
19
  CreateMergeRequestTask: Symbol.for('CreateMergeRequestTask'),
20
20
  ValidateDescriptionsTask: Symbol.for('ValidateDescriptionsTask'),
21
21
  CreateReleaseNotesTask: Symbol.for('CreateReleaseNotesTask'),
22
- BumpPackagesTask: Symbol.for('BumpPackagesTask')
22
+ InstallPackagesTask: Symbol.for('InstallPackagesTask'),
23
+ BumpPackagesTask: Symbol.for('BumpPackagesTask'),
24
+ CommitPackageVersionsTask: Symbol.for('CommitPackageVersionsTask'),
25
+ ValidateMergeRequestTask: Symbol.for('ValidateMergeRequestTask')
23
26
  };
24
27
  exports.COMMANDS = {
25
28
  StatusCommand: Symbol.for('StatusCommand'),
@@ -28,5 +31,7 @@ exports.COMMANDS = {
28
31
  CreateBranchCommand: Symbol.for('CreateBranchCommand'),
29
32
  CreateMergeRequestCommand: Symbol.for('CreateMergeRequestCommand'),
30
33
  CreateReleaseNotesCommand: Symbol.for('CreateReleaseNotesCommand'),
31
- BumpPackagesCommand: Symbol.for('BumpPackagesCommand')
34
+ InstallPackagesCommand: Symbol.for('InstallPackagesCommand'),
35
+ BumpPackagesCommand: Symbol.for('BumpPackagesCommand'),
36
+ ValidateMergeRequestCommand: Symbol.for('ValidateMergeRequestCommand')
32
37
  };
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Descriptions = void 0;
4
- // const VALID_HEADINGS: any = {
5
- // 'dependencies': true,
6
- // 'before release': true,
7
- // 'customer changes': true,
8
- // 'code changes': true,
9
- // 'testing': true,
10
- // 'notes': true
11
- // };
4
+ var VALID_HEADINGS = {
5
+ 'dependencies': true,
6
+ 'before release': true,
7
+ 'customer changes': true,
8
+ 'code changes': true,
9
+ 'testing': true,
10
+ 'notes': true
11
+ };
12
12
  var VALID_MONOREPO_HEADINGS = {
13
13
  'common': true,
14
14
  'curator': true,
@@ -19,19 +19,20 @@ var VALID_MONOREPO_HEADINGS = {
19
19
  'styles': true,
20
20
  'player': true,
21
21
  'reports': true,
22
- 'analytis': true,
22
+ 'analytics': true,
23
23
  'tooling': true,
24
24
  'testing': true,
25
25
  'dependencies': true,
26
- 'notes': true
26
+ 'notes': true,
27
+ 'monorepo': true
27
28
  };
28
29
  function toObject(lines, headingPrefix) {
29
- var obj = [];
30
+ var obj = {};
30
31
  var currentHeading = 'Other';
31
32
  for (var _i = 0, lines_1 = lines; _i < lines_1.length; _i++) {
32
33
  var line = lines_1[_i];
33
34
  // Skip empty lines
34
- if (!line.trim() || line === '/n' || line.toLowerCase().trim() === 'n/a')
35
+ if (!line.trim() || line === '/n')
35
36
  continue;
36
37
  if (line.startsWith(headingPrefix + ' ')) {
37
38
  // TODO: Potentially add heading transforms to capture multiple variants
@@ -45,7 +46,11 @@ function toObject(lines, headingPrefix) {
45
46
  */
46
47
  if (line.startsWith('!'))
47
48
  obj[currentHeading] += '\n';
48
- obj[currentHeading] += line + '\n';
49
+ /**
50
+ * Skip the line if the dev is opting out by adding n/a
51
+ */
52
+ if (line.toLowerCase().trim() !== 'n/a')
53
+ obj[currentHeading] += line + '\n';
49
54
  }
50
55
  return obj;
51
56
  }
@@ -58,11 +63,10 @@ exports.Descriptions = {
58
63
  var keys = Object.keys(obj);
59
64
  if (!(keys === null || keys === void 0 ? void 0 : keys.length))
60
65
  return false;
61
- // TODO: Uncomment below once the team is writing good MR descriptions
62
- // if (keys.some(k => !VALID_HEADINGS[k]))
63
- // return false;
64
- // if (!obj['testing'])
65
- // return false;
66
+ if (keys.some(function (k) { return !VALID_HEADINGS[k]; }))
67
+ return false;
68
+ if (obj['testing'] === undefined)
69
+ return false;
66
70
  return true;
67
71
  },
68
72
  isMonorepoDescriptionValid: function (description) {
@@ -74,9 +78,8 @@ exports.Descriptions = {
74
78
  return false;
75
79
  if (keys.some(function (k) { return !VALID_MONOREPO_HEADINGS[k]; }))
76
80
  return false;
77
- // TODO: Uncomment below once the team is writing good MR descriptions
78
- // if (!obj['testing'])
79
- // return false;
81
+ if (!obj['testing'])
82
+ return false;
80
83
  var isValid = Object.keys(obj).every(function (key) {
81
84
  if (key !== 'dependencies' && key !== 'testing')
82
85
  return true;
@@ -89,7 +92,7 @@ exports.Descriptions = {
89
92
  var descriptionObjs = mergeRequests
90
93
  .filter(function (mr) { return mr.status === 'merged'; })
91
94
  .map(function (mr) { return toObject(mr.description.split('\n'), headingPrefix); });
92
- var obj = [];
95
+ var obj = {};
93
96
  var _loop_1 = function (descriptionObj) {
94
97
  Object.keys(descriptionObj).forEach(function (key) {
95
98
  if (!obj[key])
@@ -105,6 +108,8 @@ exports.Descriptions = {
105
108
  Object.keys(obj).forEach(function (key) {
106
109
  if (key === 'notes')
107
110
  return;
111
+ if (!obj[key])
112
+ return;
108
113
  description += '\n' + headingPrefix + ' ' + key.charAt(0).toUpperCase() + key.slice(1) + '\n';
109
114
  description += obj[key];
110
115
  });
@@ -116,7 +121,7 @@ exports.Descriptions = {
116
121
  var descriptionObjs = mergeRequests
117
122
  .filter(function (mr) { return mr.status === 'merged'; })
118
123
  .map(function (mr) { return toObject(mr.description.split('\n'), '#'); });
119
- var combinedObj = [];
124
+ var combinedObj = {};
120
125
  var _loop_2 = function (descriptionObj) {
121
126
  Object.keys(descriptionObj).forEach(function (key) {
122
127
  if (!combinedObj[key])
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
- // TODO: Eventually this should allow us to map project names to project ids
3
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
4
  };
6
5
  Object.defineProperty(exports, "__esModule", { value: true });
7
6
  exports.ProjectIds = void 0;
8
7
  var lodash_1 = __importDefault(require("lodash"));
8
+ var errors_1 = require("../errors");
9
9
  var PROJECT_NAMES = {
10
- monorepo: '789',
10
+ monorepo: '798',
11
11
  online: '109',
12
12
  curator: '62',
13
13
  cloud: '534',
@@ -16,6 +16,10 @@ var PROJECT_NAMES = {
16
16
  };
17
17
  exports.ProjectIds = {
18
18
  MONOREPO_PROJECT_ID: '798',
19
+ /**
20
+ * This allows project names to be passed into the CLI.
21
+ * For example `ship-it release -m S2 -p lite`
22
+ */
19
23
  getProjectIds: function (projects) {
20
24
  var projectIds = [];
21
25
  for (var _i = 0, projects_1 = projects; _i < projects_1.length; _i++) {
@@ -26,7 +30,7 @@ exports.ProjectIds = {
26
30
  }
27
31
  var mappedId = PROJECT_NAMES[project.toLowerCase()];
28
32
  if (!mappedId)
29
- throw new Error("Could not find project id mapping for ".concat(project));
33
+ throw new errors_1.ShipItError("Could not find project id mapping for ".concat(project));
30
34
  projectIds.push(mappedId);
31
35
  }
32
36
  return projectIds;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickview/ship-it",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "Release Manager",
5
5
  "main": "./lib/index.js",
6
6
  "bin": {
@@ -18,28 +18,28 @@
18
18
  "author": "Joshua Taylor, Shale Kuzmanovski",
19
19
  "license": "ISC",
20
20
  "dependencies": {
21
- "@gitbeaker/node": "^35.6.0",
22
- "chalk": "^4.1.2",
23
- "commander": "^9.1.0",
24
- "fs-extra": "^10.0.1",
25
- "inversify": "^6.0.1",
26
- "lodash": "^4.17.21",
27
- "reflect-metadata": "^0.1.13",
28
- "semver": "^7.3.5"
21
+ "@gitbeaker/node": "35.6.0",
22
+ "chalk": "4.1.2",
23
+ "commander": "9.1.0",
24
+ "fs-extra": "10.0.1",
25
+ "inversify": "6.0.1",
26
+ "lodash": "4.17.21",
27
+ "reflect-metadata": "0.1.13",
28
+ "semver": "7.3.5"
29
29
  },
30
30
  "devDependencies": {
31
- "@clickview/eslint-config": "^1.0.3",
32
- "@types/fs-extra": "^9.0.13",
33
- "@types/lodash": "^4.14.181",
34
- "@types/node": "^17.0.23",
35
- "@types/semver": "^7.3.9",
36
- "@typescript-eslint/eslint-plugin": "^5.17.0",
37
- "@typescript-eslint/parser": "^5.17.0",
38
- "eslint": "^8.12.0",
39
- "eslint-plugin-react-hooks": "^4.4.0",
40
- "ts-node": "^10.7.0",
41
- "tsc-alias": "^1.6.6",
42
- "tsconfig-paths": "^3.14.1",
43
- "typescript": "^4.6.3"
31
+ "@clickview/eslint-config": "1.0.3",
32
+ "@types/fs-extra": "9.0.13",
33
+ "@types/lodash": "4.14.181",
34
+ "@types/node": "17.0.23",
35
+ "@types/semver": "7.3.9",
36
+ "@typescript-eslint/eslint-plugin": "5.17.0",
37
+ "@typescript-eslint/parser": "5.17.0",
38
+ "eslint": "8.12.0",
39
+ "eslint-plugin-react-hooks": "4.4.0",
40
+ "ts-node": "10.7.0",
41
+ "tsc-alias": "1.6.6",
42
+ "tsconfig-paths": "3.14.1",
43
+ "typescript": "4.6.3"
44
44
  }
45
45
  }