@clickview/ship-it 0.0.3 → 0.0.4-dev.0
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/config.json +5 -0
- package/lib/config.json +5 -0
- package/lib/src/api-clients/GitLabApiClient.js +342 -0
- package/lib/src/api-clients/git-lab/GitLabApiClient.js +24 -0
- package/lib/src/api-clients/git-lab/GitLabMapper.js +1 -0
- package/lib/src/api-clients/index.js +1 -0
- package/lib/src/api-clients/team-city/TeamCityApiClient.js +85 -0
- package/lib/src/commands/BumpPackagesCommand.js +2 -4
- package/lib/src/commands/CommitPackageVersionsCommand.js +78 -0
- package/lib/src/commands/CreateBranchCommand.js +4 -6
- package/lib/src/commands/CreateMergeRequestCommand.js +5 -7
- package/lib/src/commands/CreateReleaseNotesCommand.js +2 -4
- package/lib/src/commands/InstallPackagesCommand.js +1 -3
- package/lib/src/commands/ReleaseCommand.js +17 -10
- package/lib/src/commands/StartConsumingProjectBuildsCommand.js +76 -0
- package/lib/src/commands/StatusCommand.js +1 -3
- package/lib/src/commands/ValidateMergeRequestCommand.js +1 -3
- package/lib/src/commands/VersionCommand.js +1 -3
- package/lib/src/commands/index.js +1 -0
- package/lib/src/constants/CommandTypeMapping.js +1 -0
- package/lib/src/constants/TeamCityBuildIDs.js +13 -0
- package/lib/src/constants/index.js +18 -0
- package/lib/src/index.js +1 -1
- package/lib/src/interfaces/ShipItOptions.js +2 -0
- package/lib/src/interfaces/command-cli-options/MilestoneCommandCliOptions.js +2 -0
- package/lib/src/interfaces/command-cli-options/ReleaseCommandCliOptions.js +2 -0
- package/lib/src/interfaces/command-cli-options/index.js +18 -0
- package/lib/src/interfaces/command-options/CommitPackageVersionsCommandOptions.js +2 -0
- package/lib/src/interfaces/command-options/DockerMilestoneCommandOptions.js +2 -0
- package/lib/src/interfaces/command-options/ReleaseCommandOptions.js +2 -0
- package/lib/src/interfaces/command-options/index.js +2 -1
- package/lib/src/interfaces/index.js +1 -0
- package/lib/src/inversify.config.js +8 -0
- package/lib/src/services/GitLabService.js +33 -0
- package/lib/src/services/TeamCityService.js +34 -0
- package/lib/src/services/index.js +1 -0
- package/lib/src/startup/AddMilestoneCommand.js +13 -7
- package/lib/src/startup/GetAction.js +68 -0
- package/lib/src/startup/SetupCommands.js +49 -27
- package/lib/src/tasks/CommitLocalPackagesTask.js +137 -0
- package/lib/src/tasks/CreateBranchTask.js +37 -19
- package/lib/src/tasks/InstallPackagesTask.js +26 -47
- package/lib/src/tasks/StartConsumingProjectBuildsTask.js +143 -0
- package/lib/src/tasks/StartMonorepoBuildTask.js +95 -0
- package/lib/src/tasks/index.js +2 -0
- package/lib/src/types.js +6 -0
- package/lib/src/utils/BranchNames.js +2 -0
- package/lib/src/utils/ProjectIds.js +3 -3
- package/package.json +4 -3
|
@@ -1,4 +1,15 @@
|
|
|
1
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
|
+
};
|
|
2
13
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
14
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
15
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -35,20 +46,42 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
46
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
47
|
}
|
|
37
48
|
};
|
|
49
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
+
};
|
|
38
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
53
|
exports.setupCommands = void 0;
|
|
54
|
+
var lodash_1 = __importDefault(require("lodash"));
|
|
40
55
|
var CommandTypeMapping_1 = require("../constants/CommandTypeMapping");
|
|
41
|
-
var errors_1 = require("../errors");
|
|
42
56
|
var AddMilestoneCommand_1 = require("./AddMilestoneCommand");
|
|
57
|
+
var GetAction_1 = require("./GetAction");
|
|
43
58
|
function setupCommands(program, container) {
|
|
44
|
-
var
|
|
59
|
+
var _this = this;
|
|
60
|
+
var getAction = (0, GetAction_1.getActionBuilder)(program, container);
|
|
61
|
+
var addMilestoneCommand = (0, AddMilestoneCommand_1.getAddMilestoneCommand)(program, getAction);
|
|
45
62
|
// All commands below accept the same options
|
|
46
63
|
addMilestoneCommand('status', 'Get the status of all MRs in a milestone');
|
|
47
64
|
addMilestoneCommand('version', 'Display the versions that will be used for the release');
|
|
48
65
|
addMilestoneCommand('create-branches', 'Create release branches for all projects that are part of a milestone');
|
|
49
66
|
addMilestoneCommand('create-mrs', 'Create merge requests for all projects that are part of a milestone');
|
|
50
67
|
addMilestoneCommand('create-notes', 'Builds descriptions for all projects that are part of a milestone');
|
|
51
|
-
|
|
68
|
+
program.command('release')
|
|
69
|
+
.description('Create releases for all projects that are part of a milestone')
|
|
70
|
+
.requiredOption('-m, --milestone <milestone>')
|
|
71
|
+
.option('-p, --projectIds <projectIds...>')
|
|
72
|
+
.option('--hotfix')
|
|
73
|
+
.option('--major')
|
|
74
|
+
.option('--trigger-monorepo-build')
|
|
75
|
+
.action(function (options) { return __awaiter(_this, void 0, void 0, function () {
|
|
76
|
+
var milestoneCommandOptions, releaseCommandOptions;
|
|
77
|
+
return __generator(this, function (_a) {
|
|
78
|
+
milestoneCommandOptions = (0, AddMilestoneCommand_1.processMilestoneCommandOptions)(lodash_1.default.omit(options, 'triggerMonorepoBuild'));
|
|
79
|
+
releaseCommandOptions = __assign(__assign({}, milestoneCommandOptions), { triggerMonorepoBuild: !!options.triggerMonorepoBuild });
|
|
80
|
+
container.get(CommandTypeMapping_1.CommandTypeMapping['release'])
|
|
81
|
+
.run(releaseCommandOptions);
|
|
82
|
+
return [2 /*return*/];
|
|
83
|
+
});
|
|
84
|
+
}); });
|
|
52
85
|
program.command('bump-packages')
|
|
53
86
|
.description('Bump clickview npm package versions in monorepo to their next version')
|
|
54
87
|
.requiredOption('-b, --branchName <branchName>')
|
|
@@ -57,36 +90,25 @@ function setupCommands(program, container) {
|
|
|
57
90
|
program.command('install-packages')
|
|
58
91
|
.description('Install the latest clickview npm packages in all consuming projects that are part of a milestone')
|
|
59
92
|
.option('-m, --milestone <milestone>')
|
|
60
|
-
.option('-b, --branchName <
|
|
93
|
+
.option('-b, --branchName <monorepoBranchName>')
|
|
61
94
|
.option('-p, --projectIds <projectIds...>')
|
|
62
95
|
.action(getAction('install-packages'));
|
|
96
|
+
program.command('start-consuming-project-builds')
|
|
97
|
+
.description('Trigger TeamCity builds in all consuming projects that are a part of a milestone')
|
|
98
|
+
.option('-m, --milestone <milestone>')
|
|
99
|
+
.option('--monorepoBranchName <monorepoBranchName>')
|
|
100
|
+
.option('-p, --projectIds <projectIds...>')
|
|
101
|
+
.action(function (options) { return __awaiter(_this, void 0, void 0, function () {
|
|
102
|
+
return __generator(this, function (_a) {
|
|
103
|
+
container.get(CommandTypeMapping_1.CommandTypeMapping['start-consuming-project-builds'])
|
|
104
|
+
.run(options);
|
|
105
|
+
return [2 /*return*/];
|
|
106
|
+
});
|
|
107
|
+
}); });
|
|
63
108
|
program.command('validate-mr')
|
|
64
109
|
.description('Validate a merge request in a single project, ensuring it has a milestone and valid description')
|
|
65
110
|
.option('-p, --projectId <projectId>')
|
|
66
111
|
.option('-b, --branchName <branchName>')
|
|
67
112
|
.action(getAction('validate-mr'));
|
|
68
|
-
function getAction(command) {
|
|
69
|
-
var _this = this;
|
|
70
|
-
return function (options) { return __awaiter(_this, void 0, void 0, function () {
|
|
71
|
-
var err_1;
|
|
72
|
-
return __generator(this, function (_a) {
|
|
73
|
-
switch (_a.label) {
|
|
74
|
-
case 0:
|
|
75
|
-
_a.trys.push([0, 2, , 3]);
|
|
76
|
-
return [4 /*yield*/, container.get(CommandTypeMapping_1.CommandTypeMapping[command]).run(options)];
|
|
77
|
-
case 1:
|
|
78
|
-
_a.sent();
|
|
79
|
-
return [3 /*break*/, 3];
|
|
80
|
-
case 2:
|
|
81
|
-
err_1 = _a.sent();
|
|
82
|
-
if (!(err_1 instanceof errors_1.ShipItError))
|
|
83
|
-
throw err_1;
|
|
84
|
-
program.error(err_1.message);
|
|
85
|
-
return [3 /*break*/, 3];
|
|
86
|
-
case 3: return [2 /*return*/];
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
}); };
|
|
90
|
-
}
|
|
91
113
|
}
|
|
92
114
|
exports.setupCommands = setupCommands;
|
|
@@ -0,0 +1,137 @@
|
|
|
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.CommitLocalPackagesTask = void 0;
|
|
55
|
+
require("reflect-metadata");
|
|
56
|
+
var fs_1 = __importDefault(require("fs"));
|
|
57
|
+
var inversify_1 = require("inversify");
|
|
58
|
+
var types_1 = require("../types");
|
|
59
|
+
var services_1 = require("../services");
|
|
60
|
+
var MonorepoPackageJsonFiles_1 = require("../constants/MonorepoPackageJsonFiles");
|
|
61
|
+
var utils_1 = require("../utils");
|
|
62
|
+
var CommitLocalPackagesTask = /** @class */ (function () {
|
|
63
|
+
function CommitLocalPackagesTask(service) {
|
|
64
|
+
this.service = service;
|
|
65
|
+
}
|
|
66
|
+
CommitLocalPackagesTask.prototype.run = function (options) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
68
|
+
var mergeRequest, commitFiles;
|
|
69
|
+
return __generator(this, function (_a) {
|
|
70
|
+
switch (_a.label) {
|
|
71
|
+
case 0:
|
|
72
|
+
utils_1.Logger.logTask('Committing clickview npm package versions');
|
|
73
|
+
return [4 /*yield*/, this.service.getMergeRequest(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.branchName)];
|
|
74
|
+
case 1:
|
|
75
|
+
mergeRequest = _a.sent();
|
|
76
|
+
return [4 /*yield*/, this.getCommitFiles()];
|
|
77
|
+
case 2:
|
|
78
|
+
commitFiles = _a.sent();
|
|
79
|
+
console.log('commit files', commitFiles);
|
|
80
|
+
// await this.service.commit(
|
|
81
|
+
// ProjectIds.MONOREPO_PROJECT_ID,
|
|
82
|
+
// options.branchName,
|
|
83
|
+
// 'Bump package versions',
|
|
84
|
+
// commitFiles
|
|
85
|
+
// );
|
|
86
|
+
return [2 /*return*/, true];
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
CommitLocalPackagesTask.prototype.getCommitFiles = function () {
|
|
92
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
93
|
+
var commitFiles, _i, MONOREPO_PACKAGE_JSON_FILES_1, filePath;
|
|
94
|
+
return __generator(this, function (_a) {
|
|
95
|
+
commitFiles = [];
|
|
96
|
+
for (_i = 0, MONOREPO_PACKAGE_JSON_FILES_1 = MonorepoPackageJsonFiles_1.MONOREPO_PACKAGE_JSON_FILES; _i < MONOREPO_PACKAGE_JSON_FILES_1.length; _i++) {
|
|
97
|
+
filePath = MONOREPO_PACKAGE_JSON_FILES_1[_i];
|
|
98
|
+
console.log('reading file', filePath);
|
|
99
|
+
commitFiles.push({
|
|
100
|
+
filePath: filePath,
|
|
101
|
+
content: fs_1.default.readFileSync(filePath, { encoding: 'utf8' })
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return [2 /*return*/, commitFiles];
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
CommitLocalPackagesTask = __decorate([
|
|
109
|
+
inversify_1.injectable(),
|
|
110
|
+
__param(0, inversify_1.inject(types_1.SERVICES.GitLabService)),
|
|
111
|
+
__metadata("design:paramtypes", [services_1.GitLabService])
|
|
112
|
+
], CommitLocalPackagesTask);
|
|
113
|
+
return CommitLocalPackagesTask;
|
|
114
|
+
}());
|
|
115
|
+
exports.CommitLocalPackagesTask = CommitLocalPackagesTask;
|
|
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
|
+
// }
|
|
@@ -60,36 +60,54 @@ 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, _loop_1, this_1, _i, projects_1, project;
|
|
64
|
+
return __generator(this, function (_a) {
|
|
65
|
+
switch (_a.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 =
|
|
70
|
+
projects = _a.sent();
|
|
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;
|
|
71
98
|
_i = 0, projects_1 = projects;
|
|
72
|
-
|
|
99
|
+
_a.label = 2;
|
|
73
100
|
case 2:
|
|
74
|
-
if (!(_i < projects_1.length)) return [3 /*break*/,
|
|
101
|
+
if (!(_i < projects_1.length)) return [3 /*break*/, 5];
|
|
75
102
|
project = projects_1[_i];
|
|
76
|
-
return [
|
|
103
|
+
return [5 /*yield**/, _loop_1(project)];
|
|
77
104
|
case 3:
|
|
78
|
-
_a
|
|
79
|
-
|
|
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)];
|
|
105
|
+
_a.sent();
|
|
106
|
+
_a.label = 4;
|
|
85
107
|
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:
|
|
90
108
|
_i++;
|
|
91
109
|
return [3 /*break*/, 2];
|
|
92
|
-
case
|
|
110
|
+
case 5: return [2 /*return*/, true];
|
|
93
111
|
}
|
|
94
112
|
});
|
|
95
113
|
});
|
|
@@ -84,18 +84,28 @@ var InstallPackagesTask = /** @class */ (function () {
|
|
|
84
84
|
switch (_c.label) {
|
|
85
85
|
case 0:
|
|
86
86
|
utils_1.Logger.logTask('Installing npm packages');
|
|
87
|
-
|
|
87
|
+
if (!_options.monorepoBranchName && !_options.milestone) {
|
|
88
|
+
utils_1.Logger.logError('Please provide either a milestone or branch name argument.');
|
|
89
|
+
return [2 /*return*/, false];
|
|
90
|
+
}
|
|
91
|
+
milestone = _options.milestone;
|
|
92
|
+
if (!!milestone) return [3 /*break*/, 2];
|
|
93
|
+
utils_1.Logger.logInfo("Searching for a merge request in project \"monorepo\" with branch name \"".concat(_options.monorepoBranchName, "\"..."));
|
|
94
|
+
return [4 /*yield*/, this.service.getMilestoneByBranchName(utils_1.ProjectIds.MONOREPO_PROJECT_ID, _options.monorepoBranchName)];
|
|
88
95
|
case 1:
|
|
89
96
|
milestone = _c.sent();
|
|
97
|
+
_c.label = 2;
|
|
98
|
+
case 2:
|
|
90
99
|
if (!milestone)
|
|
91
100
|
return [2 /*return*/, false];
|
|
101
|
+
utils_1.Logger.logInfo("Found milestone \"".concat(milestone, "\". Proceeding to install packages in consuming projects..."));
|
|
92
102
|
options = {
|
|
93
103
|
version: _options.version,
|
|
94
104
|
projectIds: _options.projectIds,
|
|
95
105
|
milestone: milestone
|
|
96
106
|
};
|
|
97
107
|
return [4 /*yield*/, this.service.getProjects(options)];
|
|
98
|
-
case
|
|
108
|
+
case 3:
|
|
99
109
|
projects = _c.sent();
|
|
100
110
|
monorepo = projects.find(function (p) { return p.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID; });
|
|
101
111
|
consumingProjects = projects.filter(function (p) { return p.id.toString() !== utils_1.ProjectIds.MONOREPO_PROJECT_ID; });
|
|
@@ -108,14 +118,14 @@ var InstallPackagesTask = /** @class */ (function () {
|
|
|
108
118
|
return [2 /*return*/, false];
|
|
109
119
|
}
|
|
110
120
|
return [4 /*yield*/, this.service.getNextBranchInfo(monorepo.id, options.version)];
|
|
111
|
-
case
|
|
121
|
+
case 4:
|
|
112
122
|
_a = _c.sent(), monorepoBranch = _a.branch, monorepoBranchName = _a.branchName;
|
|
113
123
|
if (!monorepoBranch) {
|
|
114
124
|
utils_1.Logger.logError("[".concat(monorepo.title, "]: [").concat(monorepoBranchName, "] branch does not exist"));
|
|
115
125
|
return [2 /*return*/, false];
|
|
116
126
|
}
|
|
117
127
|
return [4 /*yield*/, this.getPackageVersions(monorepoBranchName)];
|
|
118
|
-
case
|
|
128
|
+
case 5:
|
|
119
129
|
versions = _c.sent();
|
|
120
130
|
utils_1.Logger.logMessage("Versions identified for ".concat(monorepoBranchName));
|
|
121
131
|
Object.keys(versions).forEach(function (key) {
|
|
@@ -123,26 +133,26 @@ var InstallPackagesTask = /** @class */ (function () {
|
|
|
123
133
|
});
|
|
124
134
|
utils_1.Logger.logMessage('\nInstalling packages:\n');
|
|
125
135
|
_i = 0, consumingProjects_1 = consumingProjects;
|
|
126
|
-
_c.label =
|
|
127
|
-
case
|
|
128
|
-
if (!(_i < consumingProjects_1.length)) return [3 /*break*/,
|
|
136
|
+
_c.label = 6;
|
|
137
|
+
case 6:
|
|
138
|
+
if (!(_i < consumingProjects_1.length)) return [3 /*break*/, 11];
|
|
129
139
|
project = consumingProjects_1[_i];
|
|
130
140
|
return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
|
|
131
|
-
case
|
|
141
|
+
case 7:
|
|
132
142
|
_b = _c.sent(), branch = _b.branch, branchName = _b.branchName;
|
|
133
143
|
if (!branch) {
|
|
134
144
|
utils_1.Logger.logError("[".concat(project.title, "]: [").concat(branchName, "] does not exist"));
|
|
135
|
-
return [3 /*break*/,
|
|
145
|
+
return [3 /*break*/, 10];
|
|
136
146
|
}
|
|
137
147
|
return [4 /*yield*/, this.updateAndSavePackageFiles(project, options.milestone, branchName, versions)];
|
|
138
|
-
case
|
|
148
|
+
case 8:
|
|
139
149
|
hasUpdates = _c.sent();
|
|
140
150
|
/**
|
|
141
151
|
* If there are no changes to the versions, we're done here
|
|
142
152
|
*/
|
|
143
153
|
if (!hasUpdates) {
|
|
144
154
|
utils_1.Logger.logWarning("[".concat(project.title, "]: [").concat(branchName, "] does not require any updates"));
|
|
145
|
-
return [3 /*break*/,
|
|
155
|
+
return [3 /*break*/, 10];
|
|
146
156
|
}
|
|
147
157
|
/**
|
|
148
158
|
* Run npm i to update our package log file
|
|
@@ -154,48 +164,17 @@ var InstallPackagesTask = /** @class */ (function () {
|
|
|
154
164
|
* Commit our updated package.json and package-lock.json
|
|
155
165
|
*/
|
|
156
166
|
return [4 /*yield*/, this.commitUpdatedFiles(project, options.milestone, branchName)];
|
|
157
|
-
case
|
|
167
|
+
case 9:
|
|
158
168
|
/**
|
|
159
169
|
* Commit our updated package.json and package-lock.json
|
|
160
170
|
*/
|
|
161
171
|
_c.sent();
|
|
162
172
|
utils_1.Logger.logMessage("[".concat(project.title, "]: File changes committed"));
|
|
163
|
-
_c.label =
|
|
164
|
-
case
|
|
173
|
+
_c.label = 10;
|
|
174
|
+
case 10:
|
|
165
175
|
_i++;
|
|
166
|
-
return [3 /*break*/,
|
|
167
|
-
case
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
};
|
|
172
|
-
InstallPackagesTask.prototype.getMilestone = function (options) {
|
|
173
|
-
var _a, _b;
|
|
174
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
175
|
-
var mergeRequest;
|
|
176
|
-
return __generator(this, function (_c) {
|
|
177
|
-
switch (_c.label) {
|
|
178
|
-
case 0:
|
|
179
|
-
if (options.milestone)
|
|
180
|
-
return [2 /*return*/, options.milestone];
|
|
181
|
-
if (!options.branchName) {
|
|
182
|
-
utils_1.Logger.logError('Please provide either a milestone or branch name argument.');
|
|
183
|
-
return [2 /*return*/, ''];
|
|
184
|
-
}
|
|
185
|
-
utils_1.Logger.logInfo("Searching for a merge request in project \"monorepo\" with branch name \"".concat(options.branchName, "\"..."));
|
|
186
|
-
return [4 /*yield*/, this.service.getMergeRequest(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.branchName)];
|
|
187
|
-
case 1:
|
|
188
|
-
mergeRequest = _c.sent();
|
|
189
|
-
if (!mergeRequest) {
|
|
190
|
-
utils_1.Logger.logError("No merge request in project \"monorepo\" with branch name \"".concat(options.branchName, "\" could be found."));
|
|
191
|
-
return [2 /*return*/, ''];
|
|
192
|
-
}
|
|
193
|
-
if (!mergeRequest.milestone) {
|
|
194
|
-
utils_1.Logger.logError("No milestone could be found on merge request \"".concat(mergeRequest.title, "\". Please attach a milestone then try again: ").concat(mergeRequest.url));
|
|
195
|
-
return [2 /*return*/, ''];
|
|
196
|
-
}
|
|
197
|
-
utils_1.Logger.logInfo("Found milestone \"".concat(mergeRequest.milestone.name, "\". Proceeding to install packages in consuming projects..."));
|
|
198
|
-
return [2 /*return*/, (_b = (_a = mergeRequest.milestone) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : ''];
|
|
176
|
+
return [3 /*break*/, 6];
|
|
177
|
+
case 11: return [2 /*return*/, true];
|
|
199
178
|
}
|
|
200
179
|
});
|
|
201
180
|
});
|
|
@@ -0,0 +1,143 @@
|
|
|
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.StartConsumingProjectBuildsTask = void 0;
|
|
52
|
+
require("reflect-metadata");
|
|
53
|
+
var inversify_1 = require("inversify");
|
|
54
|
+
var utils_1 = require("../utils");
|
|
55
|
+
var services_1 = require("../services");
|
|
56
|
+
var types_1 = require("../types");
|
|
57
|
+
var TeamCityBuildIDs_1 = require("../constants/TeamCityBuildIDs");
|
|
58
|
+
var StartConsumingProjectBuildsTask = /** @class */ (function () {
|
|
59
|
+
function StartConsumingProjectBuildsTask(teamCityService, gitLabService) {
|
|
60
|
+
this.teamCityService = teamCityService;
|
|
61
|
+
this.gitLabService = gitLabService;
|
|
62
|
+
}
|
|
63
|
+
StartConsumingProjectBuildsTask.prototype.run = function (_options) {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
65
|
+
var milestone, options, projects, consumingProjects, projectBuildMap, _i, consumingProjects_1, project, branchName, build, totalBuilds, project;
|
|
66
|
+
return __generator(this, function (_a) {
|
|
67
|
+
switch (_a.label) {
|
|
68
|
+
case 0:
|
|
69
|
+
utils_1.Logger.logTask('Starting builds for consuming projects in TeamCity');
|
|
70
|
+
if (!_options.monorepoBranchName && !_options.milestone) {
|
|
71
|
+
utils_1.Logger.logError('Please provide either a milestone or branch name argument.');
|
|
72
|
+
return [2 /*return*/, false];
|
|
73
|
+
}
|
|
74
|
+
milestone = _options.milestone;
|
|
75
|
+
if (!!milestone) return [3 /*break*/, 2];
|
|
76
|
+
utils_1.Logger.logInfo("Searching for a merge request in project \"monorepo\" with branch name \"".concat(_options.monorepoBranchName, "\"..."));
|
|
77
|
+
return [4 /*yield*/, this.gitLabService.getMilestoneByBranchName(utils_1.ProjectIds.MONOREPO_PROJECT_ID, _options.monorepoBranchName)];
|
|
78
|
+
case 1:
|
|
79
|
+
milestone = _a.sent();
|
|
80
|
+
_a.label = 2;
|
|
81
|
+
case 2:
|
|
82
|
+
if (!milestone)
|
|
83
|
+
return [2 /*return*/, false];
|
|
84
|
+
utils_1.Logger.logInfo("Found milestone \"".concat(milestone, "\". Proceeding to install packages in consuming projects..."));
|
|
85
|
+
options = {
|
|
86
|
+
version: _options.version,
|
|
87
|
+
projectIds: _options.projectIds,
|
|
88
|
+
milestone: milestone
|
|
89
|
+
};
|
|
90
|
+
return [4 /*yield*/, this.gitLabService.getProjects(options)];
|
|
91
|
+
case 3:
|
|
92
|
+
projects = _a.sent();
|
|
93
|
+
consumingProjects = projects.filter(function (p) { return p.id.toString() !== utils_1.ProjectIds.MONOREPO_PROJECT_ID; });
|
|
94
|
+
if (!consumingProjects.length) {
|
|
95
|
+
utils_1.Logger.logError("No projects that consume monorepo could be found");
|
|
96
|
+
return [2 /*return*/, false];
|
|
97
|
+
}
|
|
98
|
+
projectBuildMap = {};
|
|
99
|
+
_i = 0, consumingProjects_1 = consumingProjects;
|
|
100
|
+
_a.label = 4;
|
|
101
|
+
case 4:
|
|
102
|
+
if (!(_i < consumingProjects_1.length)) return [3 /*break*/, 8];
|
|
103
|
+
project = consumingProjects_1[_i];
|
|
104
|
+
return [4 /*yield*/, this.gitLabService.getReleaseBranchNameMilestone(project.id, options.milestone)];
|
|
105
|
+
case 5:
|
|
106
|
+
branchName = _a.sent();
|
|
107
|
+
if (!branchName) {
|
|
108
|
+
utils_1.Logger.logWarning("Release branch in project \"".concat(project.title, "\" with milestone \"").concat(options.milestone, "\" was not found. Skipping project..."));
|
|
109
|
+
return [3 /*break*/, 7];
|
|
110
|
+
}
|
|
111
|
+
return [4 /*yield*/, this.teamCityService.startBuild(TeamCityBuildIDs_1.TeamCityBuildIds[project.id.toString()], branchName)];
|
|
112
|
+
case 6:
|
|
113
|
+
build = _a.sent();
|
|
114
|
+
projectBuildMap[project.title] = build;
|
|
115
|
+
_a.label = 7;
|
|
116
|
+
case 7:
|
|
117
|
+
_i++;
|
|
118
|
+
return [3 /*break*/, 4];
|
|
119
|
+
case 8:
|
|
120
|
+
totalBuilds = Object.keys(projectBuildMap).length;
|
|
121
|
+
if (!totalBuilds) {
|
|
122
|
+
utils_1.Logger.logWarning("No releases found in consuming projects with milestone \"".concat(options.milestone, "\"."));
|
|
123
|
+
return [2 /*return*/, true];
|
|
124
|
+
}
|
|
125
|
+
utils_1.Logger.logSuccess("Successfully started builds in ".concat(totalBuilds, " projects."));
|
|
126
|
+
for (project in projectBuildMap) {
|
|
127
|
+
utils_1.Logger.logInfo("[".concat(project, "]: ").concat(projectBuildMap[project].webUrl));
|
|
128
|
+
}
|
|
129
|
+
return [2 /*return*/, true];
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
StartConsumingProjectBuildsTask = __decorate([
|
|
135
|
+
(0, inversify_1.injectable)(),
|
|
136
|
+
__param(0, (0, inversify_1.inject)(types_1.SERVICES.TeamCityService)),
|
|
137
|
+
__param(1, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
|
|
138
|
+
__metadata("design:paramtypes", [services_1.TeamCityService,
|
|
139
|
+
services_1.GitLabService])
|
|
140
|
+
], StartConsumingProjectBuildsTask);
|
|
141
|
+
return StartConsumingProjectBuildsTask;
|
|
142
|
+
}());
|
|
143
|
+
exports.StartConsumingProjectBuildsTask = StartConsumingProjectBuildsTask;
|