@clickview/ship-it 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/lib/src/api-clients/GitLabApiClient.js +342 -0
- package/lib/src/api-clients/index.js +17 -0
- package/lib/src/commands/BumpPackagesCommand.js +78 -0
- package/lib/src/commands/CreateBranchCommand.js +102 -0
- package/lib/src/commands/CreateMergeRequestCommand.js +109 -0
- package/lib/src/commands/CreateReleaseNotesCommand.js +86 -0
- package/lib/src/commands/ReleaseCommand.js +122 -0
- package/lib/src/commands/StatusCommand.js +78 -0
- package/lib/src/commands/VersionCommand.js +78 -0
- package/lib/src/commands/index.js +23 -0
- package/lib/src/index.js +101 -0
- package/lib/src/interfaces/Config.js +2 -0
- package/lib/src/interfaces/ShipItCommand.js +2 -0
- package/lib/src/interfaces/ShipItOptions.js +2 -0
- package/lib/src/interfaces/ShipItTask.js +2 -0
- package/lib/src/interfaces/index.js +22 -0
- package/lib/src/interfaces/models/Branch.js +2 -0
- package/lib/src/interfaces/models/Commit.js +2 -0
- package/lib/src/interfaces/models/CommitFile.js +2 -0
- package/lib/src/interfaces/models/File.js +2 -0
- package/lib/src/interfaces/models/MergeRequest.js +2 -0
- package/lib/src/interfaces/models/Project.js +2 -0
- package/lib/src/interfaces/models/Tag.js +2 -0
- package/lib/src/interfaces/models/index.js +23 -0
- package/lib/src/interfaces/view-models/MilestoneProject.js +2 -0
- package/lib/src/interfaces/view-models/index.js +17 -0
- package/lib/src/inversify.config.js +48 -0
- package/lib/src/services/GitLabService.js +252 -0
- package/lib/src/services/index.js +17 -0
- package/lib/src/tasks/BumpPackagesTask.js +353 -0
- package/lib/src/tasks/BumpVersionTxtTask.js +115 -0
- package/lib/src/tasks/CreateBranchTask.js +119 -0
- package/lib/src/tasks/CreateMergeRequestTask.js +130 -0
- package/lib/src/tasks/CreateReleaseNotesTask.js +124 -0
- package/lib/src/tasks/ValidateCommitsTask.js +115 -0
- package/lib/src/tasks/ValidateDescriptionsTask.js +118 -0
- package/lib/src/tasks/ValidateTask.js +167 -0
- package/lib/src/tasks/VersionTask.js +111 -0
- package/lib/src/tasks/index.js +25 -0
- package/lib/src/types.js +32 -0
- package/lib/src/utils/BranchNames.js +11 -0
- package/lib/src/utils/Commits.js +33 -0
- package/lib/src/utils/Descriptions.js +162 -0
- package/lib/src/utils/Logger.js +62 -0
- package/lib/src/utils/ProjectIds.js +34 -0
- package/lib/src/utils/Versions.js +20 -0
- package/lib/src/utils/index.js +22 -0
- package/package.json +45 -0
|
@@ -0,0 +1,130 @@
|
|
|
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.CreateMergeRequestTask = void 0;
|
|
52
|
+
require("reflect-metadata");
|
|
53
|
+
var inversify_1 = require("inversify");
|
|
54
|
+
var types_1 = require("../types");
|
|
55
|
+
var services_1 = require("../services");
|
|
56
|
+
var utils_1 = require("../utils");
|
|
57
|
+
var CreateMergeRequestTask = /** @class */ (function () {
|
|
58
|
+
function CreateMergeRequestTask(service) {
|
|
59
|
+
this._service = service;
|
|
60
|
+
}
|
|
61
|
+
CreateMergeRequestTask.prototype.run = function (options) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
63
|
+
var projects, _i, projects_1, project, currentVersionTag, nextVersion, branchName, branch, mergeRequest, description;
|
|
64
|
+
return __generator(this, function (_a) {
|
|
65
|
+
switch (_a.label) {
|
|
66
|
+
case 0:
|
|
67
|
+
utils_1.Logger.logTask('Creating Merge Requests');
|
|
68
|
+
return [4 /*yield*/, this._service.getProjects(options)];
|
|
69
|
+
case 1:
|
|
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
|
+
_i = 0, projects_1 = projects;
|
|
76
|
+
_a.label = 2;
|
|
77
|
+
case 2:
|
|
78
|
+
if (!(_i < projects_1.length)) return [3 /*break*/, 9];
|
|
79
|
+
project = projects_1[_i];
|
|
80
|
+
return [4 /*yield*/, this._service.getCurrentVersionTag(project.id)];
|
|
81
|
+
case 3:
|
|
82
|
+
currentVersionTag = _a.sent();
|
|
83
|
+
if (!currentVersionTag) {
|
|
84
|
+
utils_1.Logger.logError("Could not find the next version for: ".concat(project.title));
|
|
85
|
+
return [2 /*return*/, false];
|
|
86
|
+
}
|
|
87
|
+
return [4 /*yield*/, utils_1.Versions.getNextVersion(currentVersionTag.name, options.version)];
|
|
88
|
+
case 4:
|
|
89
|
+
nextVersion = _a.sent();
|
|
90
|
+
branchName = utils_1.BranchNames.getRelease(nextVersion);
|
|
91
|
+
return [4 /*yield*/, this._service.getBranch(project.id, branchName)];
|
|
92
|
+
case 5:
|
|
93
|
+
branch = _a.sent();
|
|
94
|
+
if (!branch) {
|
|
95
|
+
utils_1.Logger.logError("[".concat(project.title, "]: [").concat(branchName, "] does not exist"));
|
|
96
|
+
return [3 /*break*/, 8];
|
|
97
|
+
}
|
|
98
|
+
return [4 /*yield*/, this._service.getMergeRequest(project.id, branchName)];
|
|
99
|
+
case 6:
|
|
100
|
+
mergeRequest = _a.sent();
|
|
101
|
+
if (mergeRequest) {
|
|
102
|
+
utils_1.Logger.logWarning("[".concat(project.title, "]: MR already existed"));
|
|
103
|
+
utils_1.Logger.logInfo(mergeRequest.url);
|
|
104
|
+
return [3 /*break*/, 8];
|
|
105
|
+
}
|
|
106
|
+
description = project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID ?
|
|
107
|
+
utils_1.Descriptions.getMonorepoCombinedDescription(project.mergeRequests) :
|
|
108
|
+
utils_1.Descriptions.getCombinedDescription(project.mergeRequests);
|
|
109
|
+
return [4 /*yield*/, this._service.createMergeRequest(project.id, branchName, description)];
|
|
110
|
+
case 7:
|
|
111
|
+
mergeRequest = _a.sent();
|
|
112
|
+
utils_1.Logger.logMessage("[".concat(project.title, "]: MR created"));
|
|
113
|
+
utils_1.Logger.logInfo(mergeRequest.url);
|
|
114
|
+
_a.label = 8;
|
|
115
|
+
case 8:
|
|
116
|
+
_i++;
|
|
117
|
+
return [3 /*break*/, 2];
|
|
118
|
+
case 9: return [2 /*return*/, true];
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
CreateMergeRequestTask = __decorate([
|
|
124
|
+
(0, inversify_1.injectable)(),
|
|
125
|
+
__param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
|
|
126
|
+
__metadata("design:paramtypes", [services_1.GitLabService])
|
|
127
|
+
], CreateMergeRequestTask);
|
|
128
|
+
return CreateMergeRequestTask;
|
|
129
|
+
}());
|
|
130
|
+
exports.CreateMergeRequestTask = CreateMergeRequestTask;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
24
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
25
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
26
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
27
|
+
function step(op) {
|
|
28
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
29
|
+
while (_) try {
|
|
30
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
31
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
32
|
+
switch (op[0]) {
|
|
33
|
+
case 0: case 1: t = op; break;
|
|
34
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
35
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
36
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
37
|
+
default:
|
|
38
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
39
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
40
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
41
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
42
|
+
if (t[2]) _.ops.pop();
|
|
43
|
+
_.trys.pop(); continue;
|
|
44
|
+
}
|
|
45
|
+
op = body.call(thisArg, _);
|
|
46
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
47
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
51
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
52
|
+
};
|
|
53
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
exports.CreateReleaseNotesTask = void 0;
|
|
55
|
+
require("reflect-metadata");
|
|
56
|
+
var fs_extra_1 = __importDefault(require("fs-extra"));
|
|
57
|
+
var inversify_1 = require("inversify");
|
|
58
|
+
var path_1 = __importDefault(require("path"));
|
|
59
|
+
var types_1 = require("../types");
|
|
60
|
+
var services_1 = require("../services");
|
|
61
|
+
var utils_1 = require("../utils");
|
|
62
|
+
var CreateReleaseNotesTask = /** @class */ (function () {
|
|
63
|
+
function CreateReleaseNotesTask(service) {
|
|
64
|
+
this._service = service;
|
|
65
|
+
}
|
|
66
|
+
CreateReleaseNotesTask.prototype.run = function (options) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
68
|
+
var projects, combinedDescription, _i, projects_1, project, fileName, description, outputPath_1, outputPath;
|
|
69
|
+
return __generator(this, function (_a) {
|
|
70
|
+
switch (_a.label) {
|
|
71
|
+
case 0:
|
|
72
|
+
utils_1.Logger.logTask('Creating release notes');
|
|
73
|
+
return [4 /*yield*/, this._service.getProjects(options)];
|
|
74
|
+
case 1:
|
|
75
|
+
projects = _a.sent();
|
|
76
|
+
if (!projects.length) {
|
|
77
|
+
utils_1.Logger.logError("No projects could be found with the specified options");
|
|
78
|
+
return [2 /*return*/, false];
|
|
79
|
+
}
|
|
80
|
+
combinedDescription = '';
|
|
81
|
+
utils_1.Logger.logMessage('Created files');
|
|
82
|
+
_i = 0, projects_1 = projects;
|
|
83
|
+
_a.label = 2;
|
|
84
|
+
case 2:
|
|
85
|
+
if (!(_i < projects_1.length)) return [3 /*break*/, 5];
|
|
86
|
+
project = projects_1[_i];
|
|
87
|
+
fileName = "".concat(project.title, ".md");
|
|
88
|
+
description = '';
|
|
89
|
+
if (project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID) {
|
|
90
|
+
description = utils_1.Descriptions.getMonorepoCombinedDescription(project.mergeRequests);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
description = utils_1.Descriptions.getCombinedDescription(project.mergeRequests);
|
|
94
|
+
}
|
|
95
|
+
combinedDescription += '\n# ' + project.title + '\n';
|
|
96
|
+
combinedDescription += utils_1.Descriptions.bumpHeadings(description);
|
|
97
|
+
outputPath_1 = "./dist/".concat(options.milestone, "/").concat(fileName);
|
|
98
|
+
return [4 /*yield*/, fs_extra_1.default.outputFile(path_1.default.resolve(outputPath_1), description)];
|
|
99
|
+
case 3:
|
|
100
|
+
_a.sent();
|
|
101
|
+
utils_1.Logger.logInfo('- ' + outputPath_1);
|
|
102
|
+
_a.label = 4;
|
|
103
|
+
case 4:
|
|
104
|
+
_i++;
|
|
105
|
+
return [3 /*break*/, 2];
|
|
106
|
+
case 5:
|
|
107
|
+
outputPath = "./dist/".concat(options.milestone, "/Release Notes.md");
|
|
108
|
+
return [4 /*yield*/, fs_extra_1.default.outputFile(path_1.default.resolve(outputPath), combinedDescription)];
|
|
109
|
+
case 6:
|
|
110
|
+
_a.sent();
|
|
111
|
+
utils_1.Logger.logInfo('- ' + outputPath);
|
|
112
|
+
return [2 /*return*/, true];
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
CreateReleaseNotesTask = __decorate([
|
|
118
|
+
(0, inversify_1.injectable)(),
|
|
119
|
+
__param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
|
|
120
|
+
__metadata("design:paramtypes", [services_1.GitLabService])
|
|
121
|
+
], CreateReleaseNotesTask);
|
|
122
|
+
return CreateReleaseNotesTask;
|
|
123
|
+
}());
|
|
124
|
+
exports.CreateReleaseNotesTask = CreateReleaseNotesTask;
|
|
@@ -0,0 +1,115 @@
|
|
|
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.ValidateCommitsTask = void 0;
|
|
52
|
+
require("reflect-metadata");
|
|
53
|
+
var inversify_1 = require("inversify");
|
|
54
|
+
var types_1 = require("../types");
|
|
55
|
+
var services_1 = require("../services");
|
|
56
|
+
var utils_1 = require("../utils");
|
|
57
|
+
var ValidateCommitsTask = /** @class */ (function () {
|
|
58
|
+
function ValidateCommitsTask(service) {
|
|
59
|
+
this._service = service;
|
|
60
|
+
}
|
|
61
|
+
ValidateCommitsTask.prototype.run = function (options) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
63
|
+
var projects, cont, _i, projects_1, project, currentVersionTag, devCommits, shouldCherryPick;
|
|
64
|
+
return __generator(this, function (_a) {
|
|
65
|
+
switch (_a.label) {
|
|
66
|
+
case 0:
|
|
67
|
+
utils_1.Logger.logTask('Validating dev commits');
|
|
68
|
+
return [4 /*yield*/, this._service.getProjects(options)];
|
|
69
|
+
case 1:
|
|
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
|
+
_i = 0, projects_1 = projects;
|
|
77
|
+
_a.label = 2;
|
|
78
|
+
case 2:
|
|
79
|
+
if (!(_i < projects_1.length)) return [3 /*break*/, 6];
|
|
80
|
+
project = projects_1[_i];
|
|
81
|
+
return [4 /*yield*/, this._service.getCurrentVersionTag(project.id)];
|
|
82
|
+
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)];
|
|
89
|
+
case 4:
|
|
90
|
+
devCommits = _a.sent();
|
|
91
|
+
shouldCherryPick = utils_1.Commits.shouldCherryPick(project, devCommits);
|
|
92
|
+
if (shouldCherryPick) {
|
|
93
|
+
utils_1.Logger.logError("[".concat(project.title, "]: Requires cherrypicking"));
|
|
94
|
+
cont = false;
|
|
95
|
+
}
|
|
96
|
+
_a.label = 5;
|
|
97
|
+
case 5:
|
|
98
|
+
_i++;
|
|
99
|
+
return [3 /*break*/, 2];
|
|
100
|
+
case 6:
|
|
101
|
+
if (cont)
|
|
102
|
+
utils_1.Logger.logSuccess('No projects require cherrypicking');
|
|
103
|
+
return [2 /*return*/, cont];
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
ValidateCommitsTask = __decorate([
|
|
109
|
+
(0, inversify_1.injectable)(),
|
|
110
|
+
__param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
|
|
111
|
+
__metadata("design:paramtypes", [services_1.GitLabService])
|
|
112
|
+
], ValidateCommitsTask);
|
|
113
|
+
return ValidateCommitsTask;
|
|
114
|
+
}());
|
|
115
|
+
exports.ValidateCommitsTask = ValidateCommitsTask;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
24
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
25
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
26
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
27
|
+
function step(op) {
|
|
28
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
29
|
+
while (_) try {
|
|
30
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
31
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
32
|
+
switch (op[0]) {
|
|
33
|
+
case 0: case 1: t = op; break;
|
|
34
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
35
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
36
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
37
|
+
default:
|
|
38
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
39
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
40
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
41
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
42
|
+
if (t[2]) _.ops.pop();
|
|
43
|
+
_.trys.pop(); continue;
|
|
44
|
+
}
|
|
45
|
+
op = body.call(thisArg, _);
|
|
46
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
47
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
51
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
52
|
+
};
|
|
53
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
exports.ValidateDescriptionsTask = void 0;
|
|
55
|
+
require("reflect-metadata");
|
|
56
|
+
var inversify_1 = require("inversify");
|
|
57
|
+
var lodash_1 = __importDefault(require("lodash"));
|
|
58
|
+
var types_1 = require("../types");
|
|
59
|
+
var GitLabService_1 = require("../services/GitLabService");
|
|
60
|
+
var utils_1 = require("../utils");
|
|
61
|
+
var ValidateDescriptionsTask = /** @class */ (function () {
|
|
62
|
+
function ValidateDescriptionsTask(service) {
|
|
63
|
+
this._service = service;
|
|
64
|
+
}
|
|
65
|
+
ValidateDescriptionsTask.prototype.run = function (options) {
|
|
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) {
|
|
70
|
+
case 0:
|
|
71
|
+
utils_1.Logger.logTask('Validating descriptions');
|
|
72
|
+
return [4 /*yield*/, this._service.getProjects(options)];
|
|
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
|
+
}
|
|
79
|
+
cont = true;
|
|
80
|
+
for (_i = 0, projects_1 = projects; _i < projects_1.length; _i++) {
|
|
81
|
+
project = projects_1[_i];
|
|
82
|
+
invalidMrs = [];
|
|
83
|
+
for (_a = 0, _b = project.mergeRequests; _a < _b.length; _a++) {
|
|
84
|
+
mr = _b[_a];
|
|
85
|
+
isDescriptionValid = project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID ?
|
|
86
|
+
utils_1.Descriptions.isMonorepoDescriptionValid(mr.description) :
|
|
87
|
+
utils_1.Descriptions.isDescriptionValid(mr.description);
|
|
88
|
+
if (!isDescriptionValid)
|
|
89
|
+
invalidMrs.push(mr);
|
|
90
|
+
}
|
|
91
|
+
if (invalidMrs.length) {
|
|
92
|
+
utils_1.Logger.logError("\n[".concat(project.title, "] has invalid MR descriptions"));
|
|
93
|
+
groupedByUser = lodash_1.default.groupBy(invalidMrs, function (mr) { return mr.author; });
|
|
94
|
+
for (key in groupedByUser) {
|
|
95
|
+
utils_1.Logger.logMessage(key);
|
|
96
|
+
for (_c = 0, _d = groupedByUser[key]; _c < _d.length; _c++) {
|
|
97
|
+
mr = _d[_c];
|
|
98
|
+
utils_1.Logger.logMessage("- ".concat(mr.url));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
cont = false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (cont)
|
|
105
|
+
utils_1.Logger.logSuccess('All MR descriptions are valid');
|
|
106
|
+
return [2 /*return*/, cont];
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
ValidateDescriptionsTask = __decorate([
|
|
112
|
+
(0, inversify_1.injectable)(),
|
|
113
|
+
__param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
|
|
114
|
+
__metadata("design:paramtypes", [GitLabService_1.GitLabService])
|
|
115
|
+
], ValidateDescriptionsTask);
|
|
116
|
+
return ValidateDescriptionsTask;
|
|
117
|
+
}());
|
|
118
|
+
exports.ValidateDescriptionsTask = ValidateDescriptionsTask;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
14
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
15
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
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;
|
|
17
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
18
|
+
};
|
|
19
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
21
|
+
};
|
|
22
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
23
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
|
+
function step(op) {
|
|
39
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
40
|
+
while (_) try {
|
|
41
|
+
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;
|
|
42
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
43
|
+
switch (op[0]) {
|
|
44
|
+
case 0: case 1: t = op; break;
|
|
45
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
46
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
47
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
48
|
+
default:
|
|
49
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
50
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
51
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
52
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
53
|
+
if (t[2]) _.ops.pop();
|
|
54
|
+
_.trys.pop(); continue;
|
|
55
|
+
}
|
|
56
|
+
op = body.call(thisArg, _);
|
|
57
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
58
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
62
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
63
|
+
};
|
|
64
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
65
|
+
exports.ValidateTask = void 0;
|
|
66
|
+
require("reflect-metadata");
|
|
67
|
+
var inversify_1 = require("inversify");
|
|
68
|
+
var lodash_1 = __importDefault(require("lodash"));
|
|
69
|
+
var types_1 = require("../types");
|
|
70
|
+
var services_1 = require("../services");
|
|
71
|
+
var utils_1 = require("../utils");
|
|
72
|
+
var ValidateTask = /** @class */ (function () {
|
|
73
|
+
function ValidateTask(service) {
|
|
74
|
+
this._service = service;
|
|
75
|
+
}
|
|
76
|
+
ValidateTask.prototype.run = function (options) {
|
|
77
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
78
|
+
var projects, cont, _loop_1, _i, projects_1, project;
|
|
79
|
+
return __generator(this, function (_a) {
|
|
80
|
+
switch (_a.label) {
|
|
81
|
+
case 0:
|
|
82
|
+
utils_1.Logger.logTask('Validating the release');
|
|
83
|
+
return [4 /*yield*/, this._service.getProjects(options)];
|
|
84
|
+
case 1:
|
|
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
|
+
utils_1.Logger.logMessage("Found ".concat(projects.length, " projects that need to be released"));
|
|
91
|
+
cont = true;
|
|
92
|
+
_loop_1 = function (project) {
|
|
93
|
+
var groupedMRs = lodash_1.default.groupBy(project.mergeRequests, function (mr) { return mr.status; });
|
|
94
|
+
var count = Object.keys(groupedMRs).reduce(function (prev, current) {
|
|
95
|
+
var _a;
|
|
96
|
+
return __assign(__assign({}, prev), (_a = {}, _a[current] = groupedMRs[current].length, _a));
|
|
97
|
+
}, {});
|
|
98
|
+
var ready = !count.opened || count.opened === 0;
|
|
99
|
+
var nonDevMrs = project.mergeRequests.filter(function (mr) { return mr.targetBranch !== 'dev'; });
|
|
100
|
+
if (nonDevMrs.length)
|
|
101
|
+
ready = false;
|
|
102
|
+
if (!ready)
|
|
103
|
+
cont = false;
|
|
104
|
+
if (ready) {
|
|
105
|
+
utils_1.Logger.logSuccess("[".concat(project.title, "] READY"));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
var message = "[".concat(project.title, "] NOT READY");
|
|
109
|
+
if (count.opened)
|
|
110
|
+
message += " Contains ".concat(count.opened, " Open MR(s)");
|
|
111
|
+
if (nonDevMrs)
|
|
112
|
+
message += " Contains ".concat(nonDevMrs.length, " MR(s) not targeting dev");
|
|
113
|
+
utils_1.Logger.logError(message);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
for (_i = 0, projects_1 = projects; _i < projects_1.length; _i++) {
|
|
117
|
+
project = projects_1[_i];
|
|
118
|
+
_loop_1(project);
|
|
119
|
+
}
|
|
120
|
+
if (!cont) {
|
|
121
|
+
this.logNotReady(projects);
|
|
122
|
+
return [2 /*return*/, false];
|
|
123
|
+
}
|
|
124
|
+
utils_1.Logger.logSuccess('\nRelease is ready to go out');
|
|
125
|
+
return [2 /*return*/, true];
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
ValidateTask.prototype.logNotReady = function (projects) {
|
|
131
|
+
utils_1.Logger.logError("\nThis release is NOT READY to go out, here are the outstanding MRs: \n");
|
|
132
|
+
var allNotReadyMrs = [];
|
|
133
|
+
var allNonDevMrs = [];
|
|
134
|
+
for (var _i = 0, projects_2 = projects; _i < projects_2.length; _i++) {
|
|
135
|
+
var project = projects_2[_i];
|
|
136
|
+
var notReadyMrs = project.mergeRequests.filter(function (mr) { return mr.status === 'opened'; });
|
|
137
|
+
var nonDevMrs = project.mergeRequests.filter(function (mr) { return mr.targetBranch !== 'dev'; });
|
|
138
|
+
if (notReadyMrs.length)
|
|
139
|
+
allNotReadyMrs.push.apply(allNotReadyMrs, notReadyMrs);
|
|
140
|
+
if (nonDevMrs.length)
|
|
141
|
+
allNonDevMrs.push.apply(allNonDevMrs, nonDevMrs);
|
|
142
|
+
}
|
|
143
|
+
var groupedByUser = lodash_1.default.groupBy(allNotReadyMrs, function (mr) { return mr.assignee; });
|
|
144
|
+
for (var key in groupedByUser) {
|
|
145
|
+
var name = key;
|
|
146
|
+
if (!name || name === 'undefined')
|
|
147
|
+
name = 'No Assignee';
|
|
148
|
+
utils_1.Logger.logMessage(name);
|
|
149
|
+
for (var _a = 0, _b = groupedByUser[key]; _a < _b.length; _a++) {
|
|
150
|
+
var mr = _b[_a];
|
|
151
|
+
utils_1.Logger.logMessage("- ".concat(mr.url));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (allNonDevMrs.length) {
|
|
155
|
+
utils_1.Logger.logMessage('\nMRs that are not targeting dev\n');
|
|
156
|
+
allNonDevMrs.forEach(function (mr) { return utils_1.Logger.logError("- ".concat(mr.url)); });
|
|
157
|
+
}
|
|
158
|
+
utils_1.Logger.logMessage('\n');
|
|
159
|
+
};
|
|
160
|
+
ValidateTask = __decorate([
|
|
161
|
+
(0, inversify_1.injectable)(),
|
|
162
|
+
__param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
|
|
163
|
+
__metadata("design:paramtypes", [services_1.GitLabService])
|
|
164
|
+
], ValidateTask);
|
|
165
|
+
return ValidateTask;
|
|
166
|
+
}());
|
|
167
|
+
exports.ValidateTask = ValidateTask;
|