@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.
- package/lib/src/api-clients/{GitLabApiClient.js → git-lab/GitLabApiClient.js} +82 -107
- package/lib/src/api-clients/git-lab/GitLabMapper.js +60 -0
- package/lib/src/api-clients/index.js +1 -1
- package/lib/src/commands/BumpPackagesCommand.js +12 -4
- package/lib/src/commands/CreateBranchCommand.js +8 -8
- package/lib/src/commands/CreateMergeRequestCommand.js +11 -11
- package/lib/src/commands/CreateReleaseNotesCommand.js +4 -4
- package/lib/src/commands/InstallPackagesCommand.js +78 -0
- package/lib/src/commands/ReleaseCommand.js +14 -14
- package/lib/src/commands/StatusCommand.js +2 -2
- package/lib/src/commands/ValidateMergeRequestCommand.js +78 -0
- package/lib/src/commands/VersionCommand.js +2 -2
- package/lib/src/commands/index.js +2 -0
- package/lib/src/constants/CommandTypeMapping.js +15 -0
- package/lib/src/constants/MonorepoPackageJsonFiles.js +13 -0
- package/lib/src/errors/ShipItError.js +32 -0
- package/lib/src/errors/index.js +17 -0
- package/lib/src/index.js +3 -86
- package/lib/src/interfaces/command-options/BumpPackagesCommandOptions.js +2 -0
- package/lib/src/interfaces/command-options/InstallPackagesCommandOptions.js +2 -0
- package/lib/src/interfaces/command-options/MilestoneCommandOptions.js +2 -0
- package/lib/src/interfaces/command-options/ValidateMRCommandOptions.js +2 -0
- package/lib/src/interfaces/command-options/index.js +20 -0
- package/lib/src/interfaces/index.js +2 -1
- package/lib/src/interfaces/models/Milestone.js +2 -0
- package/lib/src/interfaces/models/index.js +1 -0
- package/lib/src/inversify.config.js +5 -0
- package/lib/src/services/GitLabService.js +95 -34
- package/lib/src/startup/AddMilestoneCommand.js +75 -0
- package/lib/src/startup/SetupCommands.js +92 -0
- package/lib/src/tasks/BumpPackagesTask.js +114 -238
- package/lib/src/tasks/BumpVersionTxtTask.js +13 -26
- package/lib/src/tasks/CommitPackageVersionsTask.js +105 -0
- package/lib/src/tasks/CreateBranchTask.js +17 -32
- package/lib/src/tasks/CreateMergeRequestTask.js +22 -37
- package/lib/src/tasks/CreateReleaseNotesTask.js +2 -6
- package/lib/src/tasks/InstallPackagesTask.js +358 -0
- package/lib/src/tasks/ValidateCommitsTask.js +6 -14
- package/lib/src/tasks/ValidateDescriptionsTask.js +15 -16
- package/lib/src/tasks/ValidateMergeRequestTask.js +108 -0
- package/lib/src/tasks/ValidateTask.js +7 -8
- package/lib/src/tasks/VersionTask.js +7 -20
- package/lib/src/tasks/index.js +3 -0
- package/lib/src/types.js +7 -2
- package/lib/src/utils/Descriptions.js +28 -23
- package/lib/src/utils/ProjectIds.js +7 -3
- package/package.json +22 -22
- /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
|
|
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.
|
|
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,
|
|
68
|
-
return __generator(this, function (
|
|
69
|
-
switch (
|
|
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.
|
|
72
|
+
return [4 /*yield*/, this.service.getProjects(options)];
|
|
73
73
|
case 1:
|
|
74
|
-
projects =
|
|
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
|
-
|
|
84
|
-
|
|
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 (
|
|
97
|
-
mr =
|
|
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", [
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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,
|
|
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.
|
|
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.
|
|
77
|
+
return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
|
|
83
78
|
case 3:
|
|
84
|
-
|
|
85
|
-
|
|
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
|
});
|
package/lib/src/tasks/index.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
'
|
|
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'
|
|
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
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
78
|
-
|
|
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: '
|
|
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
|
|
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.
|
|
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": "
|
|
22
|
-
"chalk": "
|
|
23
|
-
"commander": "
|
|
24
|
-
"fs-extra": "
|
|
25
|
-
"inversify": "
|
|
26
|
-
"lodash": "
|
|
27
|
-
"reflect-metadata": "
|
|
28
|
-
"semver": "
|
|
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": "
|
|
32
|
-
"@types/fs-extra": "
|
|
33
|
-
"@types/lodash": "
|
|
34
|
-
"@types/node": "
|
|
35
|
-
"@types/semver": "
|
|
36
|
-
"@typescript-eslint/eslint-plugin": "
|
|
37
|
-
"@typescript-eslint/parser": "
|
|
38
|
-
"eslint": "
|
|
39
|
-
"eslint-plugin-react-hooks": "
|
|
40
|
-
"ts-node": "
|
|
41
|
-
"tsc-alias": "
|
|
42
|
-
"tsconfig-paths": "
|
|
43
|
-
"typescript": "
|
|
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
|
}
|
|
File without changes
|