@clickview/ship-it 0.0.4-dev.5 → 0.0.4
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/git-lab/GitLabApiClient.js +65 -0
- package/lib/src/api-clients/git-lab/GitLabMapper.js +18 -1
- package/lib/src/commands/ReleaseCommand.js +11 -7
- package/lib/src/commands/{CommitPackageVersionsCommand.js → TagMasterCommand.js} +13 -15
- package/lib/src/commands/index.js +1 -0
- package/lib/src/constants/CommandTypeMapping.js +2 -1
- package/lib/src/interfaces/models/index.js +2 -0
- package/lib/src/inversify.config.js +2 -0
- package/lib/src/services/GitLabService.js +114 -8
- package/lib/src/startup/SetupCommands.js +23 -11
- package/lib/src/tasks/BumpPackagesTask.js +1 -2
- package/lib/src/tasks/CommitPackageVersionsTask.js +4 -0
- package/lib/src/tasks/CreateBranchTask.js +19 -37
- package/lib/src/tasks/{CommitLocalPackagesTask.js → TagMasterTask.js} +56 -71
- package/lib/src/tasks/ValidateDescriptionsTask.js +15 -11
- package/lib/src/tasks/ValidateMergeRequestTask.js +12 -6
- package/lib/src/tasks/ValidateTask.js +4 -4
- package/lib/src/tasks/index.js +1 -0
- package/lib/src/types.js +4 -2
- package/lib/src/utils/BranchNames.js +0 -2
- package/lib/src/utils/ProjectIds.js +1 -5
- package/lib/src/utils/Versions.js +0 -1
- package/package.json +1 -1
- package/lib/src/api-clients/GitLabApiClient.js +0 -342
- package/lib/src/interfaces/command-options/InstallPackagesCommandOptions.js +0 -2
- /package/lib/src/interfaces/{ShipItOptions.js → models/Label.js} +0 -0
- /package/lib/src/interfaces/{command-options/CommitPackageVersionsCommandOptions.js → models/Release.js} +0 -0
|
@@ -47,91 +47,76 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
47
47
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
48
48
|
}
|
|
49
49
|
};
|
|
50
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
51
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
52
|
-
};
|
|
53
50
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
-
exports.
|
|
51
|
+
exports.TagMasterTask = void 0;
|
|
55
52
|
require("reflect-metadata");
|
|
56
|
-
var fs_1 = __importDefault(require("fs"));
|
|
57
53
|
var inversify_1 = require("inversify");
|
|
54
|
+
var Logger_1 = require("../utils/Logger");
|
|
58
55
|
var types_1 = require("../types");
|
|
59
56
|
var services_1 = require("../services");
|
|
60
|
-
var
|
|
61
|
-
|
|
62
|
-
var CommitLocalPackagesTask = /** @class */ (function () {
|
|
63
|
-
function CommitLocalPackagesTask(service) {
|
|
57
|
+
var TagMasterTask = /** @class */ (function () {
|
|
58
|
+
function TagMasterTask(service) {
|
|
64
59
|
this.service = service;
|
|
65
60
|
}
|
|
66
|
-
|
|
61
|
+
TagMasterTask.prototype.run = function (options) {
|
|
67
62
|
return __awaiter(this, void 0, void 0, function () {
|
|
68
|
-
var mergeRequest,
|
|
69
|
-
return __generator(this, function (
|
|
70
|
-
switch (
|
|
63
|
+
var projects, cont, _i, projects_1, project, _a, branchName, nextVersion, mergeRequest, existingTag;
|
|
64
|
+
return __generator(this, function (_b) {
|
|
65
|
+
switch (_b.label) {
|
|
71
66
|
case 0:
|
|
72
|
-
|
|
73
|
-
return [4 /*yield*/, this.service.
|
|
67
|
+
Logger_1.Logger.logTask('Tagging master');
|
|
68
|
+
return [4 /*yield*/, this.service.getProjects(options)];
|
|
74
69
|
case 1:
|
|
75
|
-
|
|
76
|
-
|
|
70
|
+
projects = _b.sent();
|
|
71
|
+
cont = true;
|
|
72
|
+
_i = 0, projects_1 = projects;
|
|
73
|
+
_b.label = 2;
|
|
77
74
|
case 2:
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
75
|
+
if (!(_i < projects_1.length)) return [3 /*break*/, 8];
|
|
76
|
+
project = projects_1[_i];
|
|
77
|
+
return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
|
|
78
|
+
case 3:
|
|
79
|
+
_a = _b.sent(), branchName = _a.branchName, nextVersion = _a.nextVersion;
|
|
80
|
+
return [4 /*yield*/, this.service.getMergeRequest(project.id, branchName)];
|
|
81
|
+
case 4:
|
|
82
|
+
mergeRequest = _b.sent();
|
|
83
|
+
if (!(mergeRequest === null || mergeRequest === void 0 ? void 0 : mergeRequest.mergeCommit)) {
|
|
84
|
+
Logger_1.Logger.logError("[".concat(project.title, "]: [").concat(branchName, "] has not been merged"));
|
|
85
|
+
cont = false;
|
|
86
|
+
return [3 /*break*/, 7];
|
|
87
|
+
}
|
|
88
|
+
return [4 /*yield*/, this.service.getTag(project.id, nextVersion)];
|
|
89
|
+
case 5:
|
|
90
|
+
existingTag = _b.sent();
|
|
91
|
+
if (existingTag) {
|
|
92
|
+
Logger_1.Logger.logWarning("[".concat(project.title, "]: [").concat(existingTag.name, "] tag already exists"));
|
|
93
|
+
cont = false;
|
|
94
|
+
return [3 /*break*/, 7];
|
|
95
|
+
}
|
|
96
|
+
return [4 /*yield*/, this.service.createRelease(project.id, {
|
|
97
|
+
name: "".concat(options.milestone, " Release"),
|
|
98
|
+
tag: nextVersion,
|
|
99
|
+
description: mergeRequest.description,
|
|
100
|
+
ref: mergeRequest.mergeCommit,
|
|
101
|
+
milestones: [options.milestone]
|
|
102
|
+
})];
|
|
103
|
+
case 6:
|
|
104
|
+
_b.sent();
|
|
105
|
+
Logger_1.Logger.logWarning("[".concat(project.title, "]: [").concat(nextVersion, "] was created"));
|
|
106
|
+
_b.label = 7;
|
|
107
|
+
case 7:
|
|
108
|
+
_i++;
|
|
109
|
+
return [3 /*break*/, 2];
|
|
110
|
+
case 8: return [2 /*return*/, cont];
|
|
103
111
|
}
|
|
104
|
-
return [2 /*return*/, commitFiles];
|
|
105
112
|
});
|
|
106
113
|
});
|
|
107
114
|
};
|
|
108
|
-
|
|
109
|
-
inversify_1.injectable(),
|
|
110
|
-
__param(0, inversify_1.inject(types_1.SERVICES.GitLabService)),
|
|
115
|
+
TagMasterTask = __decorate([
|
|
116
|
+
(0, inversify_1.injectable)(),
|
|
117
|
+
__param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
|
|
111
118
|
__metadata("design:paramtypes", [services_1.GitLabService])
|
|
112
|
-
],
|
|
113
|
-
return
|
|
119
|
+
], TagMasterTask);
|
|
120
|
+
return TagMasterTask;
|
|
114
121
|
}());
|
|
115
|
-
exports.
|
|
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
|
-
// }
|
|
122
|
+
exports.TagMasterTask = TagMasterTask;
|
|
@@ -63,15 +63,16 @@ var ValidateDescriptionsTask = /** @class */ (function () {
|
|
|
63
63
|
this.service = service;
|
|
64
64
|
}
|
|
65
65
|
ValidateDescriptionsTask.prototype.run = function (options) {
|
|
66
|
+
var _a;
|
|
66
67
|
return __awaiter(this, void 0, void 0, function () {
|
|
67
|
-
var projects, cont, _i, projects_1, project, invalidMrs, mergeRequestsTargetingDev,
|
|
68
|
-
return __generator(this, function (
|
|
69
|
-
switch (
|
|
68
|
+
var projects, cont, _i, projects_1, project, invalidMrs, mergeRequestsTargetingDev, _b, mergeRequestsTargetingDev_1, mr, isMonorepo, isMrValid, groupedByUser, key, _c, _d, mr;
|
|
69
|
+
return __generator(this, function (_e) {
|
|
70
|
+
switch (_e.label) {
|
|
70
71
|
case 0:
|
|
71
72
|
utils_1.Logger.logTask('Validating descriptions');
|
|
72
73
|
return [4 /*yield*/, this.service.getProjects(options)];
|
|
73
74
|
case 1:
|
|
74
|
-
projects =
|
|
75
|
+
projects = _e.sent();
|
|
75
76
|
cont = true;
|
|
76
77
|
for (_i = 0, projects_1 = projects; _i < projects_1.length; _i++) {
|
|
77
78
|
project = projects_1[_i];
|
|
@@ -79,21 +80,24 @@ var ValidateDescriptionsTask = /** @class */ (function () {
|
|
|
79
80
|
mergeRequestsTargetingDev = project.mergeRequests.filter(function (mergeRequest) {
|
|
80
81
|
return mergeRequest.targetBranch === 'dev';
|
|
81
82
|
});
|
|
82
|
-
for (
|
|
83
|
-
mr = mergeRequestsTargetingDev_1[
|
|
84
|
-
|
|
83
|
+
for (_b = 0, mergeRequestsTargetingDev_1 = mergeRequestsTargetingDev; _b < mergeRequestsTargetingDev_1.length; _b++) {
|
|
84
|
+
mr = mergeRequestsTargetingDev_1[_b];
|
|
85
|
+
isMonorepo = project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID;
|
|
86
|
+
isMrValid = isMonorepo ?
|
|
85
87
|
utils_1.Descriptions.isMonorepoDescriptionValid(mr.description) :
|
|
86
88
|
utils_1.Descriptions.isDescriptionValid(mr.description);
|
|
87
|
-
if (!
|
|
89
|
+
if (isMonorepo && !((_a = mr.labels) === null || _a === void 0 ? void 0 : _a.length))
|
|
90
|
+
isMrValid = false;
|
|
91
|
+
if (!isMrValid)
|
|
88
92
|
invalidMrs.push(mr);
|
|
89
93
|
}
|
|
90
94
|
if (invalidMrs.length) {
|
|
91
|
-
utils_1.Logger.logError("\n[".concat(project.title, "] has invalid
|
|
95
|
+
utils_1.Logger.logError("\n[".concat(project.title, "] has invalid MRs"));
|
|
92
96
|
groupedByUser = lodash_1.default.groupBy(invalidMrs, function (mr) { return mr.author; });
|
|
93
97
|
for (key in groupedByUser) {
|
|
94
98
|
utils_1.Logger.logMessage(key);
|
|
95
|
-
for (
|
|
96
|
-
mr = _c
|
|
99
|
+
for (_c = 0, _d = groupedByUser[key]; _c < _d.length; _c++) {
|
|
100
|
+
mr = _d[_c];
|
|
97
101
|
utils_1.Logger.logMessage("- ".concat(mr.url));
|
|
98
102
|
}
|
|
99
103
|
}
|
|
@@ -60,19 +60,20 @@ var ValidateMergeRequestTask = /** @class */ (function () {
|
|
|
60
60
|
this.service = service;
|
|
61
61
|
}
|
|
62
62
|
ValidateMergeRequestTask.prototype.run = function (options) {
|
|
63
|
+
var _a;
|
|
63
64
|
return __awaiter(this, void 0, void 0, function () {
|
|
64
|
-
var project, mergeRequestId, mergeRequest, isDescriptionValid;
|
|
65
|
-
return __generator(this, function (
|
|
66
|
-
switch (
|
|
65
|
+
var project, mergeRequestId, mergeRequest, isMonorepo, isDescriptionValid;
|
|
66
|
+
return __generator(this, function (_b) {
|
|
67
|
+
switch (_b.label) {
|
|
67
68
|
case 0:
|
|
68
69
|
Logger_1.Logger.logTask('Validating Merge Request');
|
|
69
70
|
return [4 /*yield*/, this.service.getProject(options.projectId)];
|
|
70
71
|
case 1:
|
|
71
|
-
project =
|
|
72
|
+
project = _b.sent();
|
|
72
73
|
mergeRequestId = options.branchName.replace('merge-requests/', '');
|
|
73
74
|
return [4 /*yield*/, this.service.getMergeRequestById(project.id, mergeRequestId)];
|
|
74
75
|
case 2:
|
|
75
|
-
mergeRequest =
|
|
76
|
+
mergeRequest = _b.sent();
|
|
76
77
|
if (!mergeRequest) {
|
|
77
78
|
Logger_1.Logger.logError("Could not find merge request [".concat(project.title, "]: [").concat(options.branchName, "]"));
|
|
78
79
|
return [2 /*return*/, false];
|
|
@@ -85,7 +86,12 @@ var ValidateMergeRequestTask = /** @class */ (function () {
|
|
|
85
86
|
Logger_1.Logger.logError("Merge request does not have a milestone");
|
|
86
87
|
return [2 /*return*/, false];
|
|
87
88
|
}
|
|
88
|
-
|
|
89
|
+
isMonorepo = project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID;
|
|
90
|
+
if (isMonorepo && !((_a = mergeRequest.labels) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
91
|
+
Logger_1.Logger.logError('Monorepo MRs must have labels');
|
|
92
|
+
return [2 /*return*/, false];
|
|
93
|
+
}
|
|
94
|
+
isDescriptionValid = isMonorepo ?
|
|
89
95
|
utils_1.Descriptions.isMonorepoDescriptionValid(mergeRequest.description) :
|
|
90
96
|
utils_1.Descriptions.isDescriptionValid(mergeRequest.description);
|
|
91
97
|
if (!isDescriptionValid) {
|
|
@@ -86,7 +86,7 @@ var ValidateTask = /** @class */ (function () {
|
|
|
86
86
|
utils_1.Logger.logMessage("Found ".concat(projects.length, " projects that need to be released"));
|
|
87
87
|
cont = true;
|
|
88
88
|
_loop_1 = function (project) {
|
|
89
|
-
var groupedMRs = lodash_1.default.groupBy(project.mergeRequests
|
|
89
|
+
var groupedMRs = lodash_1.default.groupBy(project.mergeRequests, function (mr) { return mr.status; });
|
|
90
90
|
var count = Object.keys(groupedMRs).reduce(function (prev, current) {
|
|
91
91
|
var _a;
|
|
92
92
|
return __assign(__assign({}, prev), (_a = {}, _a[current] = groupedMRs[current].length, _a));
|
|
@@ -95,7 +95,7 @@ var ValidateTask = /** @class */ (function () {
|
|
|
95
95
|
/**
|
|
96
96
|
* Any MRs that are not targeting dev should not have a milestone
|
|
97
97
|
*/
|
|
98
|
-
var nonDevMrs = project.mergeRequests.filter(function (mr) { return mr.targetBranch !== 'dev'
|
|
98
|
+
var nonDevMrs = project.mergeRequests.filter(function (mr) { return mr.targetBranch !== 'dev'; });
|
|
99
99
|
if (nonDevMrs.length)
|
|
100
100
|
ready = false;
|
|
101
101
|
if (!ready)
|
|
@@ -132,8 +132,8 @@ var ValidateTask = /** @class */ (function () {
|
|
|
132
132
|
var allNonDevMrs = [];
|
|
133
133
|
for (var _i = 0, projects_2 = projects; _i < projects_2.length; _i++) {
|
|
134
134
|
var project = projects_2[_i];
|
|
135
|
-
var notReadyMrs = project.mergeRequests.filter(function (mr) { return mr.status === 'opened'
|
|
136
|
-
var nonDevMrs = project.mergeRequests.filter(function (mr) { return mr.targetBranch !== 'dev'
|
|
135
|
+
var notReadyMrs = project.mergeRequests.filter(function (mr) { return mr.status === 'opened'; });
|
|
136
|
+
var nonDevMrs = project.mergeRequests.filter(function (mr) { return mr.targetBranch !== 'dev'; });
|
|
137
137
|
if (notReadyMrs.length)
|
|
138
138
|
allNotReadyMrs.push.apply(allNotReadyMrs, notReadyMrs);
|
|
139
139
|
if (nonDevMrs.length)
|
package/lib/src/tasks/index.js
CHANGED
|
@@ -23,6 +23,7 @@ __exportStar(require("./CreateReleaseNotesTask"), exports);
|
|
|
23
23
|
__exportStar(require("./InstallPackagesTask"), exports);
|
|
24
24
|
__exportStar(require("./StartConsumingProjectBuildsTask"), exports);
|
|
25
25
|
__exportStar(require("./StartMonorepoBuildTask"), exports);
|
|
26
|
+
__exportStar(require("./TagMasterTask"), exports);
|
|
26
27
|
__exportStar(require("./ValidateCommitsTask"), exports);
|
|
27
28
|
__exportStar(require("./ValidateDescriptionsTask"), exports);
|
|
28
29
|
__exportStar(require("./ValidateMergeRequestTask"), exports);
|
package/lib/src/types.js
CHANGED
|
@@ -25,9 +25,10 @@ exports.TASKS = {
|
|
|
25
25
|
InstallPackagesTask: Symbol.for('InstallPackagesTask'),
|
|
26
26
|
BumpPackagesTask: Symbol.for('BumpPackagesTask'),
|
|
27
27
|
CommitPackageVersionsTask: Symbol.for('CommitPackageVersionsTask'),
|
|
28
|
+
ValidateMergeRequestTask: Symbol.for('ValidateMergeRequestTask'),
|
|
28
29
|
StartMonorepoBuildTask: Symbol.for('StartMonorepoBuildTask'),
|
|
29
30
|
StartConsumingProjectBuildsTask: Symbol.for('StartConsumingProjectBuildsTask'),
|
|
30
|
-
|
|
31
|
+
TagMasterTask: Symbol.for('TagMasterTask')
|
|
31
32
|
};
|
|
32
33
|
exports.COMMANDS = {
|
|
33
34
|
StatusCommand: Symbol.for('StatusCommand'),
|
|
@@ -38,6 +39,7 @@ exports.COMMANDS = {
|
|
|
38
39
|
CreateReleaseNotesCommand: Symbol.for('CreateReleaseNotesCommand'),
|
|
39
40
|
InstallPackagesCommand: Symbol.for('InstallPackagesCommand'),
|
|
40
41
|
BumpPackagesCommand: Symbol.for('BumpPackagesCommand'),
|
|
42
|
+
ValidateMergeRequestCommand: Symbol.for('ValidateMergeRequestCommand'),
|
|
41
43
|
StartConsumingProjectBuildsCommand: Symbol.for('StartConsumingProjectBuildsCommand'),
|
|
42
|
-
|
|
44
|
+
TagMasterCommand: Symbol.for('TagMasterCommand')
|
|
43
45
|
};
|
|
@@ -3,11 +3,9 @@ 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';
|
|
7
6
|
return "release/".concat(version);
|
|
8
7
|
},
|
|
9
8
|
getHotfix: function (version) {
|
|
10
|
-
return 'hotfix/9.9.9';
|
|
11
9
|
return "hotfix/".concat(version);
|
|
12
10
|
}
|
|
13
11
|
};
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.ProjectIds = exports.PROJECT_NAMES = void 0;
|
|
7
|
-
var lodash_1 = __importDefault(require("lodash"));
|
|
8
4
|
var errors_1 = require("../errors");
|
|
9
5
|
exports.PROJECT_NAMES = {
|
|
10
6
|
monorepo: '798',
|
|
@@ -24,7 +20,7 @@ exports.ProjectIds = {
|
|
|
24
20
|
var projectIds = [];
|
|
25
21
|
for (var _i = 0, projects_1 = projects; _i < projects_1.length; _i++) {
|
|
26
22
|
var project = projects_1[_i];
|
|
27
|
-
if (
|
|
23
|
+
if (!isNaN(+project)) {
|
|
28
24
|
projectIds.push(project);
|
|
29
25
|
continue;
|
|
30
26
|
}
|
|
@@ -7,7 +7,6 @@ exports.Versions = void 0;
|
|
|
7
7
|
var semver_1 = __importDefault(require("semver"));
|
|
8
8
|
exports.Versions = {
|
|
9
9
|
getNextVersion: function (currentVersion, type) {
|
|
10
|
-
return '9.9.9';
|
|
11
10
|
var curr = new semver_1.default.SemVer(currentVersion);
|
|
12
11
|
switch (type) {
|
|
13
12
|
case 'major':
|