@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
|
@@ -122,6 +122,58 @@ var GitLabApiClient = /** @class */ (function () {
|
|
|
122
122
|
});
|
|
123
123
|
});
|
|
124
124
|
};
|
|
125
|
+
GitLabApiClient.prototype.getTag = function (projectId, tagName) {
|
|
126
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
127
|
+
var tag, _a;
|
|
128
|
+
return __generator(this, function (_b) {
|
|
129
|
+
switch (_b.label) {
|
|
130
|
+
case 0:
|
|
131
|
+
_b.trys.push([0, 2, , 3]);
|
|
132
|
+
return [4 /*yield*/, this.client.Tags.show(projectId, tagName)];
|
|
133
|
+
case 1:
|
|
134
|
+
tag = _b.sent();
|
|
135
|
+
return [2 /*return*/, GitLabMapper_1.GitLabMapper.tag(tag)];
|
|
136
|
+
case 2:
|
|
137
|
+
_a = _b.sent();
|
|
138
|
+
return [2 /*return*/, null];
|
|
139
|
+
case 3: return [2 /*return*/];
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
GitLabApiClient.prototype.createTag = function (projectId, tagName, sha) {
|
|
145
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
146
|
+
var tag;
|
|
147
|
+
return __generator(this, function (_a) {
|
|
148
|
+
switch (_a.label) {
|
|
149
|
+
case 0: return [4 /*yield*/, this.client.Tags.create(projectId, tagName, sha)];
|
|
150
|
+
case 1:
|
|
151
|
+
tag = _a.sent();
|
|
152
|
+
return [2 /*return*/, GitLabMapper_1.GitLabMapper.tag(tag)];
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
GitLabApiClient.prototype.createRelease = function (projectId, release) {
|
|
158
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
159
|
+
var newRelease;
|
|
160
|
+
return __generator(this, function (_a) {
|
|
161
|
+
switch (_a.label) {
|
|
162
|
+
case 0: return [4 /*yield*/, this.client.Releases.create(projectId, {
|
|
163
|
+
id: projectId,
|
|
164
|
+
name: release.name,
|
|
165
|
+
tag_name: release.tag,
|
|
166
|
+
description: release.description,
|
|
167
|
+
ref: release.ref,
|
|
168
|
+
milestones: release.milestones
|
|
169
|
+
})];
|
|
170
|
+
case 1:
|
|
171
|
+
newRelease = _a.sent();
|
|
172
|
+
return [2 /*return*/, GitLabMapper_1.GitLabMapper.release(newRelease)];
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
};
|
|
125
177
|
GitLabApiClient.prototype.getCommitsSince = function (projectId, branchName, sinceSha) {
|
|
126
178
|
return __awaiter(this, void 0, void 0, function () {
|
|
127
179
|
var commit, commits;
|
|
@@ -331,6 +383,19 @@ var GitLabApiClient = /** @class */ (function () {
|
|
|
331
383
|
});
|
|
332
384
|
});
|
|
333
385
|
};
|
|
386
|
+
GitLabApiClient.prototype.getLabels = function (projectId) {
|
|
387
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
388
|
+
var labels;
|
|
389
|
+
return __generator(this, function (_a) {
|
|
390
|
+
switch (_a.label) {
|
|
391
|
+
case 0: return [4 /*yield*/, this.client.Labels.all(projectId)];
|
|
392
|
+
case 1:
|
|
393
|
+
labels = _a.sent();
|
|
394
|
+
return [2 /*return*/, labels.map(GitLabMapper_1.GitLabMapper.label)];
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
};
|
|
334
399
|
GitLabApiClient = __decorate([
|
|
335
400
|
(0, inversify_1.injectable)(),
|
|
336
401
|
__param(0, (0, inversify_1.inject)(types_1.MISC.GitLabConfig)),
|
|
@@ -16,7 +16,8 @@ exports.GitLabMapper = {
|
|
|
16
16
|
hasConflicts: m.has_conflicts,
|
|
17
17
|
targetBranch: m.target_branch,
|
|
18
18
|
sourceBranch: m.source_branch,
|
|
19
|
-
milestone: exports.GitLabMapper.milestone(m.milestone)
|
|
19
|
+
milestone: exports.GitLabMapper.milestone(m.milestone),
|
|
20
|
+
labels: m.labels
|
|
20
21
|
};
|
|
21
22
|
},
|
|
22
23
|
project: function (p) {
|
|
@@ -57,5 +58,21 @@ exports.GitLabMapper = {
|
|
|
57
58
|
id: m.id,
|
|
58
59
|
name: m.title
|
|
59
60
|
};
|
|
61
|
+
},
|
|
62
|
+
label: function (m) {
|
|
63
|
+
return {
|
|
64
|
+
name: m.name,
|
|
65
|
+
description: m.description
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
release: function (m) {
|
|
69
|
+
var _a;
|
|
70
|
+
return {
|
|
71
|
+
name: m.name,
|
|
72
|
+
tag: m.tag_name,
|
|
73
|
+
description: m.description,
|
|
74
|
+
ref: m.commit.id,
|
|
75
|
+
milestones: (_a = m.milestones) === null || _a === void 0 ? void 0 : _a.map(function (m) { return m.title; })
|
|
76
|
+
};
|
|
60
77
|
}
|
|
61
78
|
};
|
|
@@ -79,31 +79,35 @@ var ReleaseCommand = /** @class */ (function () {
|
|
|
79
79
|
cont = _a.sent();
|
|
80
80
|
if (!cont)
|
|
81
81
|
return [2 /*return*/, false];
|
|
82
|
-
|
|
82
|
+
return [4 /*yield*/, this.validateDescriptionsTask.run(options)];
|
|
83
|
+
case 3:
|
|
84
|
+
cont = _a.sent();
|
|
83
85
|
if (!cont)
|
|
84
86
|
return [2 /*return*/, false];
|
|
85
|
-
|
|
87
|
+
return [4 /*yield*/, this.validateCommitsTask.run(options)];
|
|
88
|
+
case 4:
|
|
89
|
+
cont = _a.sent();
|
|
86
90
|
if (!cont)
|
|
87
91
|
return [2 /*return*/, false];
|
|
88
92
|
return [4 /*yield*/, this.createBranchTask.run(options)];
|
|
89
|
-
case
|
|
93
|
+
case 5:
|
|
90
94
|
cont = _a.sent();
|
|
91
95
|
if (!cont)
|
|
92
96
|
return [2 /*return*/, false];
|
|
93
97
|
return [4 /*yield*/, this.bumpVersionTxtTask.run(options)];
|
|
94
|
-
case
|
|
98
|
+
case 6:
|
|
95
99
|
cont = _a.sent();
|
|
96
100
|
if (!cont)
|
|
97
101
|
return [2 /*return*/, false];
|
|
98
102
|
return [4 /*yield*/, this.createMergeRequestTask.run(options)];
|
|
99
|
-
case
|
|
103
|
+
case 7:
|
|
100
104
|
cont = _a.sent();
|
|
101
105
|
if (!cont)
|
|
102
106
|
return [2 /*return*/, false];
|
|
103
107
|
if (!options.triggerMonorepoBuild)
|
|
104
|
-
return [2 /*return*/,
|
|
108
|
+
return [2 /*return*/, true];
|
|
105
109
|
return [4 /*yield*/, this.startMonorepoBuildTask.run(options)];
|
|
106
|
-
case
|
|
110
|
+
case 8: return [2 /*return*/, _a.sent()];
|
|
107
111
|
}
|
|
108
112
|
});
|
|
109
113
|
});
|
|
@@ -48,31 +48,29 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
48
48
|
}
|
|
49
49
|
};
|
|
50
50
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
-
exports.
|
|
51
|
+
exports.TagMasterCommand = void 0;
|
|
52
52
|
require("reflect-metadata");
|
|
53
53
|
var inversify_1 = require("inversify");
|
|
54
|
-
var types_1 = require("types");
|
|
55
|
-
var
|
|
56
|
-
function
|
|
57
|
-
this.
|
|
54
|
+
var types_1 = require("../types");
|
|
55
|
+
var TagMasterCommand = /** @class */ (function () {
|
|
56
|
+
function TagMasterCommand(tagMasterTask) {
|
|
57
|
+
this.tagMasterTask = tagMasterTask;
|
|
58
58
|
}
|
|
59
|
-
|
|
59
|
+
TagMasterCommand.prototype.run = function (options) {
|
|
60
60
|
return __awaiter(this, void 0, void 0, function () {
|
|
61
61
|
return __generator(this, function (_a) {
|
|
62
62
|
switch (_a.label) {
|
|
63
|
-
case 0: return [4 /*yield*/, this.
|
|
64
|
-
case 1:
|
|
65
|
-
_a.sent();
|
|
66
|
-
return [2 /*return*/];
|
|
63
|
+
case 0: return [4 /*yield*/, this.tagMasterTask.run(options)];
|
|
64
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
67
65
|
}
|
|
68
66
|
});
|
|
69
67
|
});
|
|
70
68
|
};
|
|
71
|
-
|
|
69
|
+
TagMasterCommand = __decorate([
|
|
72
70
|
(0, inversify_1.injectable)(),
|
|
73
|
-
__param(0, (0, inversify_1.inject)(types_1.TASKS.
|
|
71
|
+
__param(0, (0, inversify_1.inject)(types_1.TASKS.TagMasterTask)),
|
|
74
72
|
__metadata("design:paramtypes", [Object])
|
|
75
|
-
],
|
|
76
|
-
return
|
|
73
|
+
], TagMasterCommand);
|
|
74
|
+
return TagMasterCommand;
|
|
77
75
|
}());
|
|
78
|
-
exports.
|
|
76
|
+
exports.TagMasterCommand = TagMasterCommand;
|
|
@@ -22,5 +22,6 @@ __exportStar(require("./InstallPackagesCommand"), exports);
|
|
|
22
22
|
__exportStar(require("./ReleaseCommand"), exports);
|
|
23
23
|
__exportStar(require("./StartConsumingProjectBuildsCommand"), exports);
|
|
24
24
|
__exportStar(require("./StatusCommand"), exports);
|
|
25
|
+
__exportStar(require("./TagMasterCommand"), exports);
|
|
25
26
|
__exportStar(require("./ValidateMergeRequestCommand"), exports);
|
|
26
27
|
__exportStar(require("./VersionCommand"), exports);
|
|
@@ -11,6 +11,7 @@ exports.CommandTypeMapping = {
|
|
|
11
11
|
'create-notes': types_1.COMMANDS.CreateReleaseNotesCommand,
|
|
12
12
|
'install-packages': types_1.COMMANDS.InstallPackagesCommand,
|
|
13
13
|
'bump-packages': types_1.COMMANDS.BumpPackagesCommand,
|
|
14
|
+
'validate-mr': types_1.COMMANDS.ValidateMergeRequestCommand,
|
|
14
15
|
'start-consuming-project-builds': types_1.COMMANDS.StartConsumingProjectBuildsCommand,
|
|
15
|
-
'
|
|
16
|
+
'tag-master': types_1.COMMANDS.TagMasterCommand
|
|
16
17
|
};
|
|
@@ -18,7 +18,9 @@ __exportStar(require("./Branch"), exports);
|
|
|
18
18
|
__exportStar(require("./Commit"), exports);
|
|
19
19
|
__exportStar(require("./CommitFile"), exports);
|
|
20
20
|
__exportStar(require("./File"), exports);
|
|
21
|
+
__exportStar(require("./Label"), exports);
|
|
21
22
|
__exportStar(require("./MergeRequest"), exports);
|
|
22
23
|
__exportStar(require("./Milestone"), exports);
|
|
23
24
|
__exportStar(require("./Project"), exports);
|
|
25
|
+
__exportStar(require("./Release"), exports);
|
|
24
26
|
__exportStar(require("./Tag"), exports);
|
|
@@ -40,6 +40,7 @@ function createContainer(config) {
|
|
|
40
40
|
container.bind(types_1.TASKS.CommitPackageVersionsTask).to(tasks_1.CommitPackageVersionsTask);
|
|
41
41
|
container.bind(types_1.TASKS.ValidateMergeRequestTask).to(tasks_1.ValidateMergeRequestTask);
|
|
42
42
|
container.bind(types_1.TASKS.StartMonorepoBuildTask).to(tasks_1.StartMonorepoBuildTask);
|
|
43
|
+
container.bind(types_1.TASKS.TagMasterTask).to(tasks_1.TagMasterTask);
|
|
43
44
|
container.bind(types_1.TASKS.StartConsumingProjectBuildsTask)
|
|
44
45
|
.to(tasks_1.StartConsumingProjectBuildsTask);
|
|
45
46
|
/**
|
|
@@ -54,6 +55,7 @@ function createContainer(config) {
|
|
|
54
55
|
container.bind(types_1.COMMANDS.InstallPackagesCommand).to(commands_1.InstallPackagesCommand);
|
|
55
56
|
container.bind(types_1.COMMANDS.BumpPackagesCommand).to(commands_1.BumpPackagesCommand);
|
|
56
57
|
container.bind(types_1.COMMANDS.ValidateMergeRequestCommand).to(commands_1.ValidateMergeRequestCommand);
|
|
58
|
+
container.bind(types_1.COMMANDS.TagMasterCommand).to(commands_1.TagMasterCommand);
|
|
57
59
|
container.bind(types_1.COMMANDS.StartConsumingProjectBuildsCommand)
|
|
58
60
|
.to(commands_1.StartConsumingProjectBuildsCommand);
|
|
59
61
|
return container;
|
|
@@ -71,13 +71,19 @@ var types_1 = require("../types");
|
|
|
71
71
|
var api_clients_1 = require("../api-clients");
|
|
72
72
|
var errors_1 = require("../errors");
|
|
73
73
|
var utils_1 = require("../utils");
|
|
74
|
+
/**
|
|
75
|
+
* These are projects that will try to use tags to pull in extra projects
|
|
76
|
+
*/
|
|
77
|
+
var MONOREPO_IDS = [
|
|
78
|
+
utils_1.ProjectIds.MONOREPO_PROJECT_ID
|
|
79
|
+
];
|
|
74
80
|
var GitLabService = /** @class */ (function () {
|
|
75
81
|
function GitLabService(apiClient) {
|
|
76
82
|
this.apiClient = apiClient;
|
|
77
83
|
}
|
|
78
84
|
GitLabService.prototype.getProjects = function (options) {
|
|
79
85
|
return __awaiter(this, void 0, void 0, function () {
|
|
80
|
-
var mergeRequests, projectIds, projects;
|
|
86
|
+
var allMergeRequests, mergeRequests, projectIds, projects, mappedProjects, _i, mappedProjects_1, mappedProject, extraProjects;
|
|
81
87
|
return __generator(this, function (_a) {
|
|
82
88
|
switch (_a.label) {
|
|
83
89
|
case 0:
|
|
@@ -85,7 +91,8 @@ var GitLabService = /** @class */ (function () {
|
|
|
85
91
|
return [2 /*return*/, this.projects];
|
|
86
92
|
return [4 /*yield*/, this.apiClient.getMergeRequests(options)];
|
|
87
93
|
case 1:
|
|
88
|
-
|
|
94
|
+
allMergeRequests = _a.sent();
|
|
95
|
+
mergeRequests = allMergeRequests.filter(function (mr) { return mr.targetBranch !== 'master'; });
|
|
89
96
|
if (!(mergeRequests === null || mergeRequests === void 0 ? void 0 : mergeRequests.length))
|
|
90
97
|
throw new errors_1.ShipItError('Could not find any merge requests for the specified options');
|
|
91
98
|
projectIds = lodash_1.default.uniqBy(mergeRequests, function (m) { return m.projectId; }).map(function (m) { return m.projectId; });
|
|
@@ -94,7 +101,72 @@ var GitLabService = /** @class */ (function () {
|
|
|
94
101
|
projects = _a.sent();
|
|
95
102
|
if (!(projects === null || projects === void 0 ? void 0 : projects.length) || projects.length !== projectIds.length)
|
|
96
103
|
throw new errors_1.ShipItError('Could not find all projects for the found merge requests');
|
|
97
|
-
|
|
104
|
+
mappedProjects = projects.map(function (p) { return (__assign(__assign({}, p), { mergeRequests: mergeRequests.filter(function (mr) { return mr.projectId === p.id; }) })); });
|
|
105
|
+
_i = 0, mappedProjects_1 = mappedProjects;
|
|
106
|
+
_a.label = 3;
|
|
107
|
+
case 3:
|
|
108
|
+
if (!(_i < mappedProjects_1.length)) return [3 /*break*/, 6];
|
|
109
|
+
mappedProject = mappedProjects_1[_i];
|
|
110
|
+
return [4 /*yield*/, this.getExtraProjects(mappedProject, projectIds)];
|
|
111
|
+
case 4:
|
|
112
|
+
extraProjects = _a.sent();
|
|
113
|
+
Array.prototype.push.apply(mappedProjects, extraProjects.map(function (p) { return (__assign(__assign({}, p), { mergeRequests: [] })); }));
|
|
114
|
+
_a.label = 5;
|
|
115
|
+
case 5:
|
|
116
|
+
_i++;
|
|
117
|
+
return [3 /*break*/, 3];
|
|
118
|
+
case 6: return [2 /*return*/, (this.projects = mappedProjects)];
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Fetches any projects that are not already included via MRs by checking the project labels.
|
|
125
|
+
* We only do this for a whitelist of projects
|
|
126
|
+
*/
|
|
127
|
+
GitLabService.prototype.getExtraProjects = function (project, existingProjectIds) {
|
|
128
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
129
|
+
var labels, mrLabelNames, mrLabels, projectIds, extraProjectIds;
|
|
130
|
+
return __generator(this, function (_a) {
|
|
131
|
+
switch (_a.label) {
|
|
132
|
+
case 0:
|
|
133
|
+
if (!MONOREPO_IDS.includes(project.id.toString()))
|
|
134
|
+
return [2 /*return*/, []];
|
|
135
|
+
return [4 /*yield*/, this.getProjectLabels(project.id)];
|
|
136
|
+
case 1:
|
|
137
|
+
labels = _a.sent();
|
|
138
|
+
mrLabelNames = lodash_1.default.chain(project.mergeRequests)
|
|
139
|
+
.map(function (m) { return m.labels; })
|
|
140
|
+
.flatten()
|
|
141
|
+
.uniq()
|
|
142
|
+
.value();
|
|
143
|
+
mrLabels = lodash_1.default.intersection(labels.map(function (l) { return l.name; }), mrLabelNames);
|
|
144
|
+
projectIds = mrLabels.map(function (m) { var _a; return (_a = labels.find(function (l) { return l.name === m; })) === null || _a === void 0 ? void 0 : _a.description; });
|
|
145
|
+
extraProjectIds = lodash_1.default.difference(projectIds, existingProjectIds.map(function (p) { return p.toString(); }));
|
|
146
|
+
return [4 /*yield*/, this.apiClient.getProjectsByIds(extraProjectIds)];
|
|
147
|
+
case 2:
|
|
148
|
+
// fetches and returns the extra projects
|
|
149
|
+
return [2 /*return*/, _a.sent()];
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Gets labels that have a projectId as their description
|
|
156
|
+
*/
|
|
157
|
+
GitLabService.prototype.getProjectLabels = function (projectId) {
|
|
158
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
159
|
+
var labels;
|
|
160
|
+
return __generator(this, function (_a) {
|
|
161
|
+
switch (_a.label) {
|
|
162
|
+
case 0: return [4 /*yield*/, this.apiClient.getLabels(projectId)];
|
|
163
|
+
case 1:
|
|
164
|
+
labels = _a.sent();
|
|
165
|
+
return [2 /*return*/, labels.filter(function (l) {
|
|
166
|
+
if (!l.description)
|
|
167
|
+
return false;
|
|
168
|
+
return !isNaN(+l.description);
|
|
169
|
+
})];
|
|
98
170
|
}
|
|
99
171
|
});
|
|
100
172
|
});
|
|
@@ -129,8 +201,13 @@ var GitLabService = /** @class */ (function () {
|
|
|
129
201
|
(title === null || title === void 0 ? void 0 : title.includes('dev'))) {
|
|
130
202
|
commits.pop();
|
|
131
203
|
}
|
|
132
|
-
|
|
133
|
-
|
|
204
|
+
/**
|
|
205
|
+
* This is commented out right now because of a problem with the logic of this approach of validating MRs.
|
|
206
|
+
* We need to find a way to fetch all commits that will be included in this release. Leaving this commented
|
|
207
|
+
* until we figure that out - Sha
|
|
208
|
+
*/
|
|
209
|
+
// if (!commits?.length)
|
|
210
|
+
// throw new ShipItError(`Could not find any commits in dev for projectId: ${projectId} since ${sinceSha}`);
|
|
134
211
|
return [2 /*return*/, commits];
|
|
135
212
|
}
|
|
136
213
|
});
|
|
@@ -181,10 +258,9 @@ var GitLabService = /** @class */ (function () {
|
|
|
181
258
|
return this.apiClient.getMergeRequest(projectId, branchName, 'master');
|
|
182
259
|
};
|
|
183
260
|
GitLabService.prototype.getMergeRequestById = function (projectId, mergeRequestId) {
|
|
184
|
-
|
|
185
|
-
if (!lodash_1.default.isNumber(idAsNumber))
|
|
261
|
+
if (isNaN(+mergeRequestId))
|
|
186
262
|
throw new errors_1.ShipItError("MergeRequest Id must be a number: ".concat(mergeRequestId));
|
|
187
|
-
return this.apiClient.getMergeRequestById(projectId,
|
|
263
|
+
return this.apiClient.getMergeRequestById(projectId, +mergeRequestId);
|
|
188
264
|
};
|
|
189
265
|
GitLabService.prototype.createMergeRequest = function (projectId, branchName, description, milestoneName) {
|
|
190
266
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -282,6 +358,36 @@ var GitLabService = /** @class */ (function () {
|
|
|
282
358
|
});
|
|
283
359
|
});
|
|
284
360
|
};
|
|
361
|
+
GitLabService.prototype.getTag = function (projectId, tagName) {
|
|
362
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
363
|
+
return __generator(this, function (_a) {
|
|
364
|
+
switch (_a.label) {
|
|
365
|
+
case 0: return [4 /*yield*/, this.apiClient.getTag(projectId, tagName)];
|
|
366
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
};
|
|
371
|
+
GitLabService.prototype.createTag = function (projectId, tagName, sha) {
|
|
372
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
373
|
+
return __generator(this, function (_a) {
|
|
374
|
+
switch (_a.label) {
|
|
375
|
+
case 0: return [4 /*yield*/, this.apiClient.createTag(projectId, tagName, sha)];
|
|
376
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
});
|
|
380
|
+
};
|
|
381
|
+
GitLabService.prototype.createRelease = function (projectId, release) {
|
|
382
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
383
|
+
return __generator(this, function (_a) {
|
|
384
|
+
switch (_a.label) {
|
|
385
|
+
case 0: return [4 /*yield*/, this.apiClient.createRelease(projectId, release)];
|
|
386
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
});
|
|
390
|
+
};
|
|
285
391
|
/**
|
|
286
392
|
* We use the latest valid semver tag in master to determine what the current version
|
|
287
393
|
* of a project is
|
|
@@ -64,6 +64,7 @@ function setupCommands(program, container) {
|
|
|
64
64
|
addMilestoneCommand('create-branches', 'Create release branches for all projects that are part of a milestone');
|
|
65
65
|
addMilestoneCommand('create-mrs', 'Create merge requests for all projects that are part of a milestone');
|
|
66
66
|
addMilestoneCommand('create-notes', 'Builds descriptions for all projects that are part of a milestone');
|
|
67
|
+
addMilestoneCommand('tag-master', 'Tags master for all release MRs that are part of a milestone');
|
|
67
68
|
program.command('release')
|
|
68
69
|
.description('Create releases for all projects that are part of a milestone')
|
|
69
70
|
.requiredOption('-m, --milestone <milestone>')
|
|
@@ -71,12 +72,17 @@ function setupCommands(program, container) {
|
|
|
71
72
|
.option('--hotfix')
|
|
72
73
|
.option('--major')
|
|
73
74
|
.option('--trigger-monorepo-build')
|
|
74
|
-
.action(function (
|
|
75
|
-
var
|
|
75
|
+
.action(function (opts) { return __awaiter(_this, void 0, void 0, function () {
|
|
76
|
+
var options;
|
|
76
77
|
return __generator(this, function (_a) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
switch (_a.label) {
|
|
79
|
+
case 0:
|
|
80
|
+
options = __assign(__assign({}, (0, AddMilestoneCommand_1.processMilestoneCommandOptions)(lodash_1.default.omit(opts, 'triggerMonorepoBuild'))), { triggerMonorepoBuild: !!opts.triggerMonorepoBuild });
|
|
81
|
+
return [4 /*yield*/, getAction('release')(options)];
|
|
82
|
+
case 1:
|
|
83
|
+
_a.sent();
|
|
84
|
+
return [2 /*return*/];
|
|
85
|
+
}
|
|
80
86
|
});
|
|
81
87
|
}); });
|
|
82
88
|
program.command('bump-packages')
|
|
@@ -87,19 +93,25 @@ function setupCommands(program, container) {
|
|
|
87
93
|
program.command('install-packages')
|
|
88
94
|
.description('Install the latest clickview npm packages in all consuming projects that are part of a milestone')
|
|
89
95
|
.option('-m, --milestone <milestone>')
|
|
90
|
-
.option('-b, --
|
|
96
|
+
.option('-b, --monorepoBranchName <monorepoBranchName>')
|
|
91
97
|
.option('-p, --projectIds <projectIds...>')
|
|
92
98
|
.action(getAction('install-packages'));
|
|
99
|
+
program.command('validate-mr')
|
|
100
|
+
.description('Validate a merge request in a single project, ensuring it has a milestone and valid description')
|
|
101
|
+
.option('-p, --projectId <projectId>')
|
|
102
|
+
.option('-b, --branchName <branchName>')
|
|
103
|
+
.action(getAction('validate-mr'));
|
|
104
|
+
program.command('start-consuming-project-builds')
|
|
105
|
+
.description('Trigger TeamCity builds in all consuming projects that are a part of a milestone')
|
|
106
|
+
.option('-m, --milestone <milestone>')
|
|
107
|
+
.option('--monorepoBranchName <monorepoBranchName>')
|
|
108
|
+
.option('-p, --projectIds <projectIds...>')
|
|
109
|
+
.action(getAction('start-consuming-project-builds'));
|
|
93
110
|
program.command('start-consuming-project-builds')
|
|
94
111
|
.description('Trigger TeamCity builds in all consuming projects that are a part of a milestone')
|
|
95
112
|
.option('-m, --milestone <milestone>')
|
|
96
113
|
.option('--monorepoBranchName <monorepoBranchName>')
|
|
97
114
|
.option('-p, --projectIds <projectIds...>')
|
|
98
115
|
.action(getAction('start-consuming-project-builds'));
|
|
99
|
-
program.command('validate-mr')
|
|
100
|
-
.description('Validate a merge request in a single project, ensuring it has a milestone and valid description')
|
|
101
|
-
.option('-p, --projectId <projectId>')
|
|
102
|
-
.option('-b, --branchName <branchName>')
|
|
103
|
-
.action(getAction('validate-mr'));
|
|
104
116
|
}
|
|
105
117
|
exports.setupCommands = setupCommands;
|
|
@@ -89,12 +89,11 @@ var BumpPackagesTask = /** @class */ (function () {
|
|
|
89
89
|
return [4 /*yield*/, this.getLernaCommand(options)];
|
|
90
90
|
case 2:
|
|
91
91
|
lernaVersionCmd = _a.sent();
|
|
92
|
-
console.log("Found lerna command ".concat(lernaVersionCmd, " but running dev versioning script for testing purposes"));
|
|
93
92
|
if (!lernaVersionCmd) {
|
|
94
93
|
utils_1.Logger.logError('Something went wrong while trying to detect which versioning script to run with Lerna.');
|
|
95
94
|
return [2 /*return*/, false];
|
|
96
95
|
}
|
|
97
|
-
(0, child_process_1.execSync)(
|
|
96
|
+
(0, child_process_1.execSync)(lernaVersionCmd);
|
|
98
97
|
utils_1.Logger.logSuccess('Successfully executed Lerna versioning command.');
|
|
99
98
|
return [2 /*return*/, true];
|
|
100
99
|
}
|
|
@@ -93,6 +93,10 @@ var CommitPackageVersionsTask = /** @class */ (function () {
|
|
|
93
93
|
content = (0, fs_1.readFileSync)(filePath, { encoding: 'utf8' });
|
|
94
94
|
}
|
|
95
95
|
catch (_a) {
|
|
96
|
+
/**
|
|
97
|
+
* If the file doesn't exist, ignore the error.
|
|
98
|
+
* This will occur when TC Docker runs this script as it doesn't copy over @clickview/tooling
|
|
99
|
+
*/
|
|
96
100
|
continue;
|
|
97
101
|
}
|
|
98
102
|
commitFiles.push({
|
|
@@ -60,54 +60,36 @@ var CreateBranchTask = /** @class */ (function () {
|
|
|
60
60
|
}
|
|
61
61
|
CreateBranchTask.prototype.run = function (options) {
|
|
62
62
|
return __awaiter(this, void 0, void 0, function () {
|
|
63
|
-
var projects,
|
|
64
|
-
return __generator(this, function (
|
|
65
|
-
switch (
|
|
63
|
+
var projects, _i, projects_1, project, _a, branch, branchName, branchFrom;
|
|
64
|
+
return __generator(this, function (_b) {
|
|
65
|
+
switch (_b.label) {
|
|
66
66
|
case 0:
|
|
67
67
|
utils_1.Logger.logTask('Creating release branches');
|
|
68
68
|
return [4 /*yield*/, this.service.getProjects(options)];
|
|
69
69
|
case 1:
|
|
70
|
-
projects =
|
|
71
|
-
_loop_1 = function (project) {
|
|
72
|
-
var _b, branch, branchName, branchFrom;
|
|
73
|
-
return __generator(this, function (_c) {
|
|
74
|
-
switch (_c.label) {
|
|
75
|
-
case 0: return [4 /*yield*/, this_1.service.getNextBranchInfo(project.id, options.version)];
|
|
76
|
-
case 1:
|
|
77
|
-
_b = _c.sent(), branch = _b.branch, branchName = _b.branchName;
|
|
78
|
-
if (branch) {
|
|
79
|
-
utils_1.Logger.logWarning("[".concat(project.title, "]: [").concat(branchName, "] Already exists"));
|
|
80
|
-
return [2 /*return*/, "continue"];
|
|
81
|
-
}
|
|
82
|
-
branchFrom = (function () {
|
|
83
|
-
if (project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID)
|
|
84
|
-
return 'docker';
|
|
85
|
-
return options.version === 'patch' ? 'master' : 'dev';
|
|
86
|
-
})();
|
|
87
|
-
// const branchFrom = options.version === 'patch' ? 'master' : 'dev';
|
|
88
|
-
return [4 /*yield*/, this_1.service.createBranch(project, branchFrom, branchName, false)];
|
|
89
|
-
case 2:
|
|
90
|
-
// const branchFrom = options.version === 'patch' ? 'master' : 'dev';
|
|
91
|
-
_c.sent();
|
|
92
|
-
utils_1.Logger.logMessage("[".concat(project.title, "]: [").concat(branchName, "] Has been created"));
|
|
93
|
-
return [2 /*return*/];
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
};
|
|
97
|
-
this_1 = this;
|
|
70
|
+
projects = _b.sent();
|
|
98
71
|
_i = 0, projects_1 = projects;
|
|
99
|
-
|
|
72
|
+
_b.label = 2;
|
|
100
73
|
case 2:
|
|
101
|
-
if (!(_i < projects_1.length)) return [3 /*break*/,
|
|
74
|
+
if (!(_i < projects_1.length)) return [3 /*break*/, 6];
|
|
102
75
|
project = projects_1[_i];
|
|
103
|
-
return [
|
|
76
|
+
return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
|
|
104
77
|
case 3:
|
|
105
|
-
_a.sent();
|
|
106
|
-
|
|
78
|
+
_a = _b.sent(), branch = _a.branch, branchName = _a.branchName;
|
|
79
|
+
if (branch) {
|
|
80
|
+
utils_1.Logger.logWarning("[".concat(project.title, "]: [").concat(branchName, "] Already exists"));
|
|
81
|
+
return [3 /*break*/, 5];
|
|
82
|
+
}
|
|
83
|
+
branchFrom = options.version === 'patch' ? 'master' : 'dev';
|
|
84
|
+
return [4 /*yield*/, this.service.createBranch(project, branchFrom, branchName, false)];
|
|
107
85
|
case 4:
|
|
86
|
+
_b.sent();
|
|
87
|
+
utils_1.Logger.logMessage("[".concat(project.title, "]: [").concat(branchName, "] Has been created"));
|
|
88
|
+
_b.label = 5;
|
|
89
|
+
case 5:
|
|
108
90
|
_i++;
|
|
109
91
|
return [3 /*break*/, 2];
|
|
110
|
-
case
|
|
92
|
+
case 6: return [2 /*return*/, true];
|
|
111
93
|
}
|
|
112
94
|
});
|
|
113
95
|
});
|