@clickview/ship-it 0.0.1 → 0.0.2-dev.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/config.json +6 -0
- package/lib/config.json +6 -0
- package/lib/src/commands/BumpPackagesCommand.js +2 -2
- package/lib/src/commands/InstallPackagesCommand.js +78 -0
- package/lib/src/commands/index.js +1 -0
- package/lib/src/constants/CommandTypeMapping.js +14 -0
- package/lib/src/constants/MonorepoPackageJsonFiles.js +13 -0
- package/lib/src/constants/index.js +18 -0
- package/lib/src/index.js +2 -85
- package/lib/src/interfaces/command-options/BumpPackagesCommandOptions.js +2 -0
- package/lib/src/interfaces/command-options/MilestoneCommandOptions.js +2 -0
- package/lib/src/interfaces/command-options/index.js +18 -0
- package/lib/src/interfaces/index.js +1 -1
- package/lib/src/inversify.config.js +2 -0
- package/lib/src/startup/AddMilestoneCommand.js +75 -0
- package/lib/src/startup/SetupCommands.js +66 -0
- package/lib/src/tasks/BumpPackagesTask.js +95 -243
- package/lib/src/tasks/InstallPackagesTask.js +344 -0
- package/lib/src/tasks/index.js +1 -0
- package/lib/src/types.js +2 -0
- package/package.json +1 -1
package/config.json
ADDED
package/lib/config.json
ADDED
|
@@ -54,13 +54,13 @@ var inversify_1 = require("inversify");
|
|
|
54
54
|
var types_1 = require("../types");
|
|
55
55
|
var BumpPackagesCommand = /** @class */ (function () {
|
|
56
56
|
function BumpPackagesCommand(bumpPackagesTask) {
|
|
57
|
-
this.
|
|
57
|
+
this.bumpPackagesTask = bumpPackagesTask;
|
|
58
58
|
}
|
|
59
59
|
BumpPackagesCommand.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.
|
|
63
|
+
case 0: return [4 /*yield*/, this.bumpPackagesTask.run(options)];
|
|
64
64
|
case 1:
|
|
65
65
|
_a.sent();
|
|
66
66
|
return [2 /*return*/];
|
|
@@ -0,0 +1,78 @@
|
|
|
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.InstallPackagesCommand = void 0;
|
|
52
|
+
require("reflect-metadata");
|
|
53
|
+
var inversify_1 = require("inversify");
|
|
54
|
+
var types_1 = require("../types");
|
|
55
|
+
var InstallPackagesCommand = /** @class */ (function () {
|
|
56
|
+
function InstallPackagesCommand(installPackagesTask) {
|
|
57
|
+
this._installPackagesTask = installPackagesTask;
|
|
58
|
+
}
|
|
59
|
+
InstallPackagesCommand.prototype.run = function (options) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
61
|
+
return __generator(this, function (_a) {
|
|
62
|
+
switch (_a.label) {
|
|
63
|
+
case 0: return [4 /*yield*/, this._installPackagesTask.run(options)];
|
|
64
|
+
case 1:
|
|
65
|
+
_a.sent();
|
|
66
|
+
return [2 /*return*/];
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
InstallPackagesCommand = __decorate([
|
|
72
|
+
(0, inversify_1.injectable)(),
|
|
73
|
+
__param(0, (0, inversify_1.inject)(types_1.TASKS.InstallPackagesTask)),
|
|
74
|
+
__metadata("design:paramtypes", [Object])
|
|
75
|
+
], InstallPackagesCommand);
|
|
76
|
+
return InstallPackagesCommand;
|
|
77
|
+
}());
|
|
78
|
+
exports.InstallPackagesCommand = InstallPackagesCommand;
|
|
@@ -18,6 +18,7 @@ __exportStar(require("./BumpPackagesCommand"), exports);
|
|
|
18
18
|
__exportStar(require("./CreateBranchCommand"), exports);
|
|
19
19
|
__exportStar(require("./CreateMergeRequestCommand"), exports);
|
|
20
20
|
__exportStar(require("./CreateReleaseNotesCommand"), exports);
|
|
21
|
+
__exportStar(require("./InstallPackagesCommand"), exports);
|
|
21
22
|
__exportStar(require("./ReleaseCommand"), exports);
|
|
22
23
|
__exportStar(require("./StatusCommand"), exports);
|
|
23
24
|
__exportStar(require("./VersionCommand"), exports);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommandTypeMapping = void 0;
|
|
4
|
+
var types_1 = require("../types");
|
|
5
|
+
exports.CommandTypeMapping = {
|
|
6
|
+
'status': types_1.COMMANDS.StatusCommand,
|
|
7
|
+
'version': types_1.COMMANDS.VersionCommand,
|
|
8
|
+
'release': types_1.COMMANDS.ReleaseCommand,
|
|
9
|
+
'create-branches': types_1.COMMANDS.CreateBranchCommand,
|
|
10
|
+
'create-mrs': types_1.COMMANDS.CreateMergeRequestCommand,
|
|
11
|
+
'create-notes': types_1.COMMANDS.CreateReleaseNotesCommand,
|
|
12
|
+
'install-packages': types_1.COMMANDS.InstallPackagesCommand,
|
|
13
|
+
'bump-packages': types_1.COMMANDS.BumpPackagesCommand
|
|
14
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MONOREPO_PACKAGE_JSON_FILES = void 0;
|
|
4
|
+
exports.MONOREPO_PACKAGE_JSON_FILES = [
|
|
5
|
+
'packages/libs/analytics/package.json',
|
|
6
|
+
'packages/libs/styles/package.json',
|
|
7
|
+
'packages/libs/tooling/package.json',
|
|
8
|
+
'packages/projects/curator/package.json',
|
|
9
|
+
'packages/projects/library-editor/package.json',
|
|
10
|
+
'packages/projects/lite/package.json',
|
|
11
|
+
'packages/projects/online/package.json',
|
|
12
|
+
'packages/projects/reports/package.json'
|
|
13
|
+
];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./CommandTypeMapping"), exports);
|
|
18
|
+
__exportStar(require("./MonorepoPackageJsonFiles"), exports);
|
package/lib/src/index.js
CHANGED
|
@@ -1,101 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
-
});
|
|
11
|
-
};
|
|
12
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
13
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
14
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
15
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
16
|
-
function step(op) {
|
|
17
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
18
|
-
while (_) try {
|
|
19
|
-
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;
|
|
20
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
21
|
-
switch (op[0]) {
|
|
22
|
-
case 0: case 1: t = op; break;
|
|
23
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
24
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
25
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
26
|
-
default:
|
|
27
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
28
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
29
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
30
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
31
|
-
if (t[2]) _.ops.pop();
|
|
32
|
-
_.trys.pop(); continue;
|
|
33
|
-
}
|
|
34
|
-
op = body.call(thisArg, _);
|
|
35
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
36
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
3
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
40
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
5
|
};
|
|
42
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
7
|
var commander_1 = require("commander");
|
|
44
8
|
var inversify_config_1 = require("./inversify.config");
|
|
45
|
-
var
|
|
46
|
-
var utils_1 = require("./utils");
|
|
9
|
+
var SetupCommands_1 = require("./startup/SetupCommands");
|
|
47
10
|
var config_json_1 = __importDefault(require("../config.json"));
|
|
48
|
-
function processOptions(options) {
|
|
49
|
-
var opts = {
|
|
50
|
-
milestone: options.milestone,
|
|
51
|
-
version: 'minor'
|
|
52
|
-
};
|
|
53
|
-
if (options.projectIds)
|
|
54
|
-
opts.projectIds = utils_1.ProjectIds.getProjectIds(options.projectIds);
|
|
55
|
-
if (options.hotfix && options.major)
|
|
56
|
-
throw new Error('Cannot pass both --hotfix and --major options');
|
|
57
|
-
if (options.major)
|
|
58
|
-
opts.version = 'major';
|
|
59
|
-
if (options.hotfix)
|
|
60
|
-
opts.version = 'patch';
|
|
61
|
-
return opts;
|
|
62
|
-
}
|
|
63
|
-
var commandTypeMapping = {
|
|
64
|
-
'status': types_1.COMMANDS.StatusCommand,
|
|
65
|
-
'version': types_1.COMMANDS.VersionCommand,
|
|
66
|
-
'release': types_1.COMMANDS.ReleaseCommand,
|
|
67
|
-
'create-branches': types_1.COMMANDS.CreateBranchCommand,
|
|
68
|
-
'create-mrs': types_1.COMMANDS.CreateMergeRequestCommand,
|
|
69
|
-
'create-notes': types_1.COMMANDS.CreateReleaseNotesCommand,
|
|
70
|
-
'bump-packages': types_1.COMMANDS.BumpPackagesCommand
|
|
71
|
-
};
|
|
72
|
-
function addCommand(name, description) {
|
|
73
|
-
var _this = this;
|
|
74
|
-
program.command(name)
|
|
75
|
-
.description(description)
|
|
76
|
-
.requiredOption('-m, --milestone <milestone>')
|
|
77
|
-
.option('-p, --projectIds <projectIds...>')
|
|
78
|
-
.option('--hotfix')
|
|
79
|
-
.option('--major')
|
|
80
|
-
.action(function (options) { return __awaiter(_this, void 0, void 0, function () {
|
|
81
|
-
return __generator(this, function (_a) {
|
|
82
|
-
container.get(commandTypeMapping[name])
|
|
83
|
-
.run(processOptions(options));
|
|
84
|
-
return [2 /*return*/];
|
|
85
|
-
});
|
|
86
|
-
}); });
|
|
87
|
-
}
|
|
88
11
|
var program = new commander_1.Command();
|
|
89
12
|
program
|
|
90
13
|
.name('ship-it')
|
|
91
14
|
.description('ClickView Release Manager')
|
|
92
15
|
.version('0.0.0');
|
|
93
16
|
var container = (0, inversify_config_1.createContainer)(config_json_1.default);
|
|
94
|
-
|
|
95
|
-
addCommand('version', 'Display the versions that will be used for the release');
|
|
96
|
-
addCommand('create-branches', 'Create release branches for all projects that are part of a milestone');
|
|
97
|
-
addCommand('create-mrs', 'Create merge requests for all projects that are part of a milestone');
|
|
98
|
-
addCommand('create-notes', 'Builds descriptions for all projects that are part of a milestone');
|
|
99
|
-
addCommand('release', 'Create releases for all projects that are part of a milestone');
|
|
100
|
-
addCommand('bump-packages', 'Bump consuming project npm packages for all projects that are part of a milestone');
|
|
17
|
+
(0, SetupCommands_1.setupCommands)(program, container);
|
|
101
18
|
program.parseAsync();
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./BumpPackagesCommandOptions"), exports);
|
|
18
|
+
__exportStar(require("./MilestoneCommandOptions"), exports);
|
|
@@ -14,9 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./command-options"), exports);
|
|
17
18
|
__exportStar(require("./models"), exports);
|
|
18
19
|
__exportStar(require("./view-models"), exports);
|
|
19
20
|
__exportStar(require("./Config"), exports);
|
|
20
21
|
__exportStar(require("./ShipItCommand"), exports);
|
|
21
|
-
__exportStar(require("./ShipItOptions"), exports);
|
|
22
22
|
__exportStar(require("./ShipItTask"), exports);
|
|
@@ -32,6 +32,7 @@ function createContainer(config) {
|
|
|
32
32
|
container.bind(types_1.TASKS.CreateMergeRequestTask).to(tasks_1.CreateMergeRequestTask);
|
|
33
33
|
container.bind(types_1.TASKS.ValidateDescriptionsTask).to(tasks_1.ValidateDescriptionsTask);
|
|
34
34
|
container.bind(types_1.TASKS.CreateReleaseNotesTask).to(tasks_1.CreateReleaseNotesTask);
|
|
35
|
+
container.bind(types_1.TASKS.InstallPackagesTask).to(tasks_1.InstallPackagesTask);
|
|
35
36
|
container.bind(types_1.TASKS.BumpPackagesTask).to(tasks_1.BumpPackagesTask);
|
|
36
37
|
/**
|
|
37
38
|
* Commands
|
|
@@ -42,6 +43,7 @@ function createContainer(config) {
|
|
|
42
43
|
container.bind(types_1.COMMANDS.CreateMergeRequestCommand).to(commands_1.CreateMergeRequestCommand);
|
|
43
44
|
container.bind(types_1.COMMANDS.ReleaseCommand).to(commands_1.ReleaseCommand);
|
|
44
45
|
container.bind(types_1.COMMANDS.CreateReleaseNotesCommand).to(commands_1.CreateReleaseNotesCommand);
|
|
46
|
+
container.bind(types_1.COMMANDS.InstallPackagesCommand).to(commands_1.InstallPackagesCommand);
|
|
45
47
|
container.bind(types_1.COMMANDS.BumpPackagesCommand).to(commands_1.BumpPackagesCommand);
|
|
46
48
|
return container;
|
|
47
49
|
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
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;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.getAddMilestoneCommand = void 0;
|
|
40
|
+
var constants_1 = require("../constants");
|
|
41
|
+
var utils_1 = require("../utils");
|
|
42
|
+
function processOptions(options) {
|
|
43
|
+
var opts = {
|
|
44
|
+
milestone: options.milestone,
|
|
45
|
+
version: 'minor'
|
|
46
|
+
};
|
|
47
|
+
if (options.projectIds)
|
|
48
|
+
opts.projectIds = utils_1.ProjectIds.getProjectIds(options.projectIds);
|
|
49
|
+
if (options.hotfix && options.major)
|
|
50
|
+
throw new Error('Cannot pass both --hotfix and --major options');
|
|
51
|
+
if (options.major)
|
|
52
|
+
opts.version = 'major';
|
|
53
|
+
if (options.hotfix)
|
|
54
|
+
opts.version = 'patch';
|
|
55
|
+
return opts;
|
|
56
|
+
}
|
|
57
|
+
var getAddMilestoneCommand = function (program, container) {
|
|
58
|
+
return function addMilestoneCommand(name, description) {
|
|
59
|
+
var _this = this;
|
|
60
|
+
program.command(name)
|
|
61
|
+
.description(description)
|
|
62
|
+
.requiredOption('-m, --milestone <milestone>')
|
|
63
|
+
.option('-p, --projectIds <projectIds...>')
|
|
64
|
+
.option('--hotfix')
|
|
65
|
+
.option('--major')
|
|
66
|
+
.action(function (options) { return __awaiter(_this, void 0, void 0, function () {
|
|
67
|
+
return __generator(this, function (_a) {
|
|
68
|
+
container.get(constants_1.CommandTypeMapping[name])
|
|
69
|
+
.run(processOptions(options));
|
|
70
|
+
return [2 /*return*/];
|
|
71
|
+
});
|
|
72
|
+
}); });
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
exports.getAddMilestoneCommand = getAddMilestoneCommand;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
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;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.setupCommands = void 0;
|
|
40
|
+
var constants_1 = require("../constants");
|
|
41
|
+
var AddMilestoneCommand_1 = require("./AddMilestoneCommand");
|
|
42
|
+
function setupCommands(program, container) {
|
|
43
|
+
var _this = this;
|
|
44
|
+
var addMilestoneCommand = (0, AddMilestoneCommand_1.getAddMilestoneCommand)(program, container);
|
|
45
|
+
// All commands below accept the same options
|
|
46
|
+
addMilestoneCommand('status', 'Get the status of all MRs in a milestone');
|
|
47
|
+
addMilestoneCommand('version', 'Display the versions that will be used for the release');
|
|
48
|
+
addMilestoneCommand('create-branches', 'Create release branches for all projects that are part of a milestone');
|
|
49
|
+
addMilestoneCommand('create-mrs', 'Create merge requests for all projects that are part of a milestone');
|
|
50
|
+
addMilestoneCommand('create-notes', 'Builds descriptions for all projects that are part of a milestone');
|
|
51
|
+
addMilestoneCommand('release', 'Create releases for all projects that are part of a milestone');
|
|
52
|
+
addMilestoneCommand('install-packages', 'Install the latest clickview npm packages in all consuming projects that are part of a milestone');
|
|
53
|
+
program.command('bump-packages')
|
|
54
|
+
.description('Bump clickview npm package versions in monorepo to their next version')
|
|
55
|
+
.requiredOption('-b, --branchName <branchName>')
|
|
56
|
+
.option('-p, --preId <preId>')
|
|
57
|
+
.action(function (options) { return __awaiter(_this, void 0, void 0, function () {
|
|
58
|
+
return __generator(this, function (_a) {
|
|
59
|
+
container
|
|
60
|
+
.get(constants_1.CommandTypeMapping['bump-packages'])
|
|
61
|
+
.run(options);
|
|
62
|
+
return [2 /*return*/];
|
|
63
|
+
});
|
|
64
|
+
}); });
|
|
65
|
+
}
|
|
66
|
+
exports.setupCommands = setupCommands;
|
|
@@ -47,302 +47,154 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
47
47
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
48
48
|
}
|
|
49
49
|
};
|
|
50
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
51
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
52
|
-
};
|
|
53
50
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
51
|
exports.BumpPackagesTask = void 0;
|
|
55
52
|
require("reflect-metadata");
|
|
56
53
|
var inversify_1 = require("inversify");
|
|
57
|
-
var
|
|
58
|
-
var semver_1 = __importDefault(require("semver"));
|
|
59
|
-
var child_process_1 = __importDefault(require("child_process"));
|
|
54
|
+
var child_process_1 = require("child_process");
|
|
60
55
|
var types_1 = require("../types");
|
|
61
56
|
var services_1 = require("../services");
|
|
62
57
|
var utils_1 = require("../utils");
|
|
63
|
-
var
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
'packages/projects/lite/package.json',
|
|
70
|
-
'packages/projects/online/package.json',
|
|
71
|
-
'packages/projects/reports/package.json'
|
|
72
|
-
];
|
|
73
|
-
var ROOT_DIRECTORIES = {
|
|
74
|
-
// Curator
|
|
75
|
-
62: 'src/ClickView.Curator.Web/Assets',
|
|
76
|
-
// Library Editor
|
|
77
|
-
534: 'src/ClickView.Cloud',
|
|
78
|
-
// Lite
|
|
79
|
-
822: 'src/ClickView.Lite',
|
|
80
|
-
// Online
|
|
81
|
-
109: 'src/ClickView.Web.Online.Pages',
|
|
82
|
-
// Reports
|
|
83
|
-
970: 'src/ClickView.Analytics.Web'
|
|
84
|
-
};
|
|
58
|
+
var constants_1 = require("../constants");
|
|
59
|
+
var RELEASE_BRANCH_REGEX = /^release\/(\d|\.)+$/;
|
|
60
|
+
var HOTFIX_BRANCH_REGEX = /^hotfix\/(\d|\.)+$/;
|
|
61
|
+
var DEV_VERSION_REGEX = /-dev\.\d+$/;
|
|
62
|
+
var RC_VERSION_REGEX = /-rc\.\d+$/;
|
|
63
|
+
var GENERIC_LERNA_OPTIONS = '--exact --no-git-tag-version --no-push --yes';
|
|
85
64
|
var BumpPackagesTask = /** @class */ (function () {
|
|
86
65
|
function BumpPackagesTask(service) {
|
|
87
|
-
this.
|
|
66
|
+
this.isReleaseBranch = false;
|
|
67
|
+
this.isHotfixBranch = false;
|
|
68
|
+
this.service = service;
|
|
88
69
|
}
|
|
89
70
|
BumpPackagesTask.prototype.run = function (options) {
|
|
90
71
|
return __awaiter(this, void 0, void 0, function () {
|
|
91
|
-
var
|
|
92
|
-
return __generator(this, function (
|
|
93
|
-
switch (
|
|
72
|
+
var mergeRequest, isValid, lernaVersionCmd;
|
|
73
|
+
return __generator(this, function (_a) {
|
|
74
|
+
switch (_a.label) {
|
|
94
75
|
case 0:
|
|
95
|
-
utils_1.Logger.logTask('Bumping npm
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (!monorepo) {
|
|
102
|
-
utils_1.Logger.logError("Monorepo was not in this release");
|
|
76
|
+
utils_1.Logger.logTask('Bumping clickview npm package versions');
|
|
77
|
+
this.isReleaseBranch = RELEASE_BRANCH_REGEX.test(options.branchName);
|
|
78
|
+
this.isHotfixBranch = HOTFIX_BRANCH_REGEX.test(options.branchName);
|
|
79
|
+
mergeRequest = this.service.getMergeRequest(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.branchName);
|
|
80
|
+
if (!mergeRequest) {
|
|
81
|
+
utils_1.Logger.logError("Merge request for branch ".concat(options.branchName, " could not be found."));
|
|
103
82
|
return [2 /*return*/, false];
|
|
104
83
|
}
|
|
105
|
-
|
|
106
|
-
|
|
84
|
+
isValid = this.validateOptions(options);
|
|
85
|
+
if (!isValid)
|
|
107
86
|
return [2 /*return*/, false];
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
utils_1.Logger.logError("[".concat(monorepo.title, "] branch does not exist"));
|
|
87
|
+
return [4 /*yield*/, this.getLernaVersionCmd(options)];
|
|
88
|
+
case 1:
|
|
89
|
+
lernaVersionCmd = _a.sent();
|
|
90
|
+
if (!lernaVersionCmd) {
|
|
91
|
+
utils_1.Logger.logError('Something went wrong while trying to detect which versioning script to run with Lerna.');
|
|
114
92
|
return [2 /*return*/, false];
|
|
115
93
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
versions = _c.sent();
|
|
119
|
-
utils_1.Logger.logMessage("Versions identified for ".concat(monorepoBranchName));
|
|
120
|
-
Object.keys(versions).forEach(function (key) {
|
|
121
|
-
utils_1.Logger.logMessage("- [".concat(key, "]: ").concat(versions[key]));
|
|
122
|
-
});
|
|
123
|
-
// let cont = true;
|
|
124
|
-
utils_1.Logger.logMessage('\nBumping packages:\n');
|
|
125
|
-
_i = 0, consumingProjects_1 = consumingProjects;
|
|
126
|
-
_c.label = 4;
|
|
127
|
-
case 4:
|
|
128
|
-
if (!(_i < consumingProjects_1.length)) return [3 /*break*/, 8];
|
|
129
|
-
project = consumingProjects_1[_i];
|
|
130
|
-
return [4 /*yield*/, this.getBranchName(project.id, options.version)];
|
|
131
|
-
case 5:
|
|
132
|
-
branchName = _c.sent();
|
|
133
|
-
// TODO: potentially add a validate branches task and removing the branch checking from this task
|
|
134
|
-
// so that bump packages can't be run until create release is run
|
|
135
|
-
if (!branchName) {
|
|
136
|
-
utils_1.Logger.logError("[".concat(project.title, "]: branch does not exist"));
|
|
137
|
-
return [3 /*break*/, 7];
|
|
138
|
-
}
|
|
139
|
-
return [4 /*yield*/, this.updateAndSavePackageFiles(project, options.milestone, branchName, versions)];
|
|
140
|
-
case 6:
|
|
141
|
-
_c.sent();
|
|
142
|
-
_c.label = 7;
|
|
143
|
-
case 7:
|
|
144
|
-
_i++;
|
|
145
|
-
return [3 /*break*/, 4];
|
|
146
|
-
case 8:
|
|
147
|
-
for (_a = 0, consumingProjects_2 = consumingProjects; _a < consumingProjects_2.length; _a++) {
|
|
148
|
-
project = consumingProjects_2[_a];
|
|
149
|
-
utils_1.Logger.logInfo("[".concat(project.title, "]: Running npm i --package-lock-only"));
|
|
150
|
-
this.npmInstall(project, options.milestone);
|
|
151
|
-
utils_1.Logger.logInfo('\n');
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* TODO: Need to not commit when there's no changes
|
|
155
|
-
*/
|
|
156
|
-
utils_1.Logger.logMessage('Committing files');
|
|
157
|
-
_b = 0, consumingProjects_3 = consumingProjects;
|
|
158
|
-
_c.label = 9;
|
|
159
|
-
case 9:
|
|
160
|
-
if (!(_b < consumingProjects_3.length)) return [3 /*break*/, 13];
|
|
161
|
-
project = consumingProjects_3[_b];
|
|
162
|
-
return [4 /*yield*/, this.getBranchName(project.id, options.version)];
|
|
163
|
-
case 10:
|
|
164
|
-
branchName = _c.sent();
|
|
165
|
-
if (!branchName) {
|
|
166
|
-
utils_1.Logger.logError("[".concat(project.title, "]: branch does not exist"));
|
|
167
|
-
return [3 /*break*/, 12];
|
|
168
|
-
}
|
|
169
|
-
return [4 /*yield*/, this.commitUpdatedFiles(project, options.milestone, branchName)];
|
|
170
|
-
case 11:
|
|
171
|
-
_c.sent();
|
|
172
|
-
utils_1.Logger.logMessage("[".concat(project.title, "]: File changes committed"));
|
|
173
|
-
_c.label = 12;
|
|
174
|
-
case 12:
|
|
175
|
-
_b++;
|
|
176
|
-
return [3 /*break*/, 9];
|
|
177
|
-
case 13: return [2 /*return*/, true];
|
|
94
|
+
(0, child_process_1.execSync)(lernaVersionCmd);
|
|
95
|
+
return [2 /*return*/, true];
|
|
178
96
|
}
|
|
179
97
|
});
|
|
180
98
|
});
|
|
181
99
|
};
|
|
182
|
-
BumpPackagesTask.prototype.
|
|
100
|
+
BumpPackagesTask.prototype.validateOptions = function (options) {
|
|
101
|
+
var isValidReleaseBranch = this.isReleaseBranch || this.isHotfixBranch;
|
|
102
|
+
if (options.preId && options.preId !== 'rc' && options.preId !== 'dev') {
|
|
103
|
+
utils_1.Logger.logError("Argument for \"preId\" can only be \"rc\" or \"dev\". You entered: ".concat(options.preId));
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
if (options.preId === 'dev' && isValidReleaseBranch) {
|
|
107
|
+
utils_1.Logger.logError('Dev versions cannot be generated on release or hotfix branches.');
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
if (options.preId === 'rc' && !isValidReleaseBranch) {
|
|
111
|
+
utils_1.Logger.logError('Release Candidate versions can only be generated on release or hotfix branches.');
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
if (!options.preId && !isValidReleaseBranch) {
|
|
115
|
+
utils_1.Logger.logError('Production package versions can only be generated on release or hotfix branches.');
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
return true;
|
|
119
|
+
};
|
|
120
|
+
BumpPackagesTask.prototype.getFileText = function (projectId, branchName, fileName) {
|
|
183
121
|
return __awaiter(this, void 0, void 0, function () {
|
|
184
|
-
var
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
case 0:
|
|
189
|
-
rootDir = ROOT_DIRECTORIES[project.id];
|
|
190
|
-
outputPath = this.getOutputPath(project, milestone);
|
|
191
|
-
_b = {
|
|
192
|
-
filePath: "".concat(rootDir, "/package.json")
|
|
193
|
-
};
|
|
194
|
-
return [4 /*yield*/, fs_extra_1.default.readFile("".concat(outputPath, "/package.json"), 'utf8')];
|
|
122
|
+
var file, buff;
|
|
123
|
+
return __generator(this, function (_a) {
|
|
124
|
+
switch (_a.label) {
|
|
125
|
+
case 0: return [4 /*yield*/, this.service.getFile(projectId, branchName, fileName)];
|
|
195
126
|
case 1:
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
return [4 /*yield*/, fs_extra_1.default.readFile("".concat(outputPath, "/package-lock.json"), 'utf8')];
|
|
202
|
-
case 2:
|
|
203
|
-
commitFiles = _a.concat([(_c.content = _d.sent(),
|
|
204
|
-
_c)]);
|
|
205
|
-
return [4 /*yield*/, this._service.commit(project.id, branchName, 'Bumping @clickview npm packages', commitFiles)];
|
|
206
|
-
case 3:
|
|
207
|
-
_d.sent();
|
|
208
|
-
return [2 /*return*/];
|
|
127
|
+
file = _a.sent();
|
|
128
|
+
if (!file)
|
|
129
|
+
return [2 /*return*/, ''];
|
|
130
|
+
buff = Buffer.from(file.content, 'base64');
|
|
131
|
+
return [2 /*return*/, buff.toString('utf-8')];
|
|
209
132
|
}
|
|
210
133
|
});
|
|
211
134
|
});
|
|
212
135
|
};
|
|
213
|
-
BumpPackagesTask.prototype.
|
|
214
|
-
var outputPath = this.getOutputPath(project, milestone);
|
|
215
|
-
child_process_1.default.execSync('npm i --package-lock-only', {
|
|
216
|
-
cwd: outputPath,
|
|
217
|
-
// Uncomment if we want to silence
|
|
218
|
-
// stdio: 'pipe'
|
|
219
|
-
});
|
|
220
|
-
};
|
|
221
|
-
BumpPackagesTask.prototype.updateAndSavePackageFiles = function (project, milestone, branchName, versions) {
|
|
136
|
+
BumpPackagesTask.prototype.getLernaVersionCmd = function (options) {
|
|
222
137
|
return __awaiter(this, void 0, void 0, function () {
|
|
223
|
-
var
|
|
138
|
+
var hasBumpedOnce;
|
|
224
139
|
return __generator(this, function (_a) {
|
|
225
140
|
switch (_a.label) {
|
|
226
|
-
case 0:
|
|
227
|
-
rootDir = ROOT_DIRECTORIES[project.id];
|
|
228
|
-
return [4 /*yield*/, this.getFileText(project.id, branchName, "".concat(rootDir, "/package.json"))];
|
|
141
|
+
case 0: return [4 /*yield*/, this.hasBumpedOnce(options.branchName)];
|
|
229
142
|
case 1:
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
_a.sent();
|
|
251
|
-
return [2 /*return*/];
|
|
143
|
+
hasBumpedOnce = _a.sent();
|
|
144
|
+
if (options.preId === 'rc') {
|
|
145
|
+
if (hasBumpedOnce)
|
|
146
|
+
return [2 /*return*/, "lerna version prerelease --preid rc ".concat(GENERIC_LERNA_OPTIONS)];
|
|
147
|
+
if (this.isReleaseBranch)
|
|
148
|
+
return [2 /*return*/, "lerna version preminor --preid rc ".concat(GENERIC_LERNA_OPTIONS)];
|
|
149
|
+
if (this.isHotfixBranch)
|
|
150
|
+
return [2 /*return*/, "lerna version prepatch --preid rc ".concat(GENERIC_LERNA_OPTIONS)];
|
|
151
|
+
}
|
|
152
|
+
if (options.preId === 'dev') {
|
|
153
|
+
if (hasBumpedOnce)
|
|
154
|
+
return [2 /*return*/, "lerna version prerelease --preid dev ".concat(GENERIC_LERNA_OPTIONS)];
|
|
155
|
+
return [2 /*return*/, "lerna version prepatch --preid dev ".concat(GENERIC_LERNA_OPTIONS)];
|
|
156
|
+
}
|
|
157
|
+
if (this.isReleaseBranch)
|
|
158
|
+
return [2 /*return*/, "lerna version minor"];
|
|
159
|
+
if (this.isHotfixBranch)
|
|
160
|
+
return [2 /*return*/, "lerna version patch"];
|
|
161
|
+
// Should never be reached
|
|
162
|
+
return [2 /*return*/, ''];
|
|
252
163
|
}
|
|
253
164
|
});
|
|
254
165
|
});
|
|
255
166
|
};
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
if (!versions[key])
|
|
261
|
-
return;
|
|
262
|
-
var oldVersion = deps[key];
|
|
263
|
-
var newVersion = versions[key];
|
|
264
|
-
if (oldVersion === newVersion) {
|
|
265
|
-
utils_1.Logger.logWarning("- [".concat(key, "]: ").concat(versions[key], " is up to date"));
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
if (semver_1.default.compare(oldVersion, newVersion) === 1) {
|
|
269
|
-
utils_1.Logger.logError("- [".concat(key, "]: ").concat(deps[key], " -> ").concat(versions[key], " downgrade detected"));
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
packageJson = packageJson.replace("\"".concat(key, "\": \"").concat(deps[key], "\""), "\"".concat(key, "\": \"").concat(versions[key], "\""));
|
|
273
|
-
utils_1.Logger.logMessage("- [".concat(key, "]: ").concat(deps[key], " -> ").concat(versions[key]));
|
|
274
|
-
});
|
|
275
|
-
return packageJson;
|
|
276
|
-
};
|
|
277
|
-
BumpPackagesTask.prototype.getPackageVersions = function (branchName) {
|
|
167
|
+
/**
|
|
168
|
+
* If a package in the release already has a version
|
|
169
|
+
*/
|
|
170
|
+
BumpPackagesTask.prototype.hasBumpedOnce = function (branchName) {
|
|
278
171
|
return __awaiter(this, void 0, void 0, function () {
|
|
279
|
-
var
|
|
172
|
+
var _i, MONOREPO_PACKAGE_JSON_FILES_1, file, text, json;
|
|
280
173
|
return __generator(this, function (_a) {
|
|
281
174
|
switch (_a.label) {
|
|
282
175
|
case 0:
|
|
283
|
-
|
|
284
|
-
_i = 0, MONOREPO_PACKAGES_FILES_1 = MONOREPO_PACKAGES_FILES;
|
|
176
|
+
_i = 0, MONOREPO_PACKAGE_JSON_FILES_1 = constants_1.MONOREPO_PACKAGE_JSON_FILES;
|
|
285
177
|
_a.label = 1;
|
|
286
178
|
case 1:
|
|
287
|
-
if (!(_i <
|
|
288
|
-
file =
|
|
179
|
+
if (!(_i < MONOREPO_PACKAGE_JSON_FILES_1.length)) return [3 /*break*/, 4];
|
|
180
|
+
file = MONOREPO_PACKAGE_JSON_FILES_1[_i];
|
|
289
181
|
return [4 /*yield*/, this.getFileText(utils_1.ProjectIds.MONOREPO_PROJECT_ID, branchName, file)];
|
|
290
182
|
case 2:
|
|
291
183
|
text = _a.sent();
|
|
292
|
-
json = JSON.parse(text);
|
|
293
|
-
|
|
184
|
+
json = JSON.parse(JSON.stringify(text));
|
|
185
|
+
if (RC_VERSION_REGEX.test(json.version))
|
|
186
|
+
return [2 /*return*/, true];
|
|
187
|
+
if (DEV_VERSION_REGEX.test(json.version))
|
|
188
|
+
return [2 /*return*/, true];
|
|
294
189
|
_a.label = 3;
|
|
295
190
|
case 3:
|
|
296
191
|
_i++;
|
|
297
192
|
return [3 /*break*/, 1];
|
|
298
|
-
case 4: return [2 /*return*/,
|
|
193
|
+
case 4: return [2 /*return*/, false];
|
|
299
194
|
}
|
|
300
195
|
});
|
|
301
196
|
});
|
|
302
197
|
};
|
|
303
|
-
BumpPackagesTask.prototype.getFileText = function (projectId, branchName, fileName) {
|
|
304
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
305
|
-
var file, buff;
|
|
306
|
-
return __generator(this, function (_a) {
|
|
307
|
-
switch (_a.label) {
|
|
308
|
-
case 0: return [4 /*yield*/, this._service.getFile(projectId, branchName, fileName)];
|
|
309
|
-
case 1:
|
|
310
|
-
file = _a.sent();
|
|
311
|
-
if (!file)
|
|
312
|
-
return [2 /*return*/, ''];
|
|
313
|
-
buff = Buffer.from(file.content, 'base64');
|
|
314
|
-
return [2 /*return*/, buff.toString('utf-8')];
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
});
|
|
318
|
-
};
|
|
319
|
-
BumpPackagesTask.prototype.getBranchName = function (projectId, version) {
|
|
320
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
321
|
-
var currentVersionTag, nextVersion, branchName, branch;
|
|
322
|
-
return __generator(this, function (_a) {
|
|
323
|
-
switch (_a.label) {
|
|
324
|
-
case 0: return [4 /*yield*/, this._service.getCurrentVersionTag(projectId)];
|
|
325
|
-
case 1:
|
|
326
|
-
currentVersionTag = _a.sent();
|
|
327
|
-
if (!currentVersionTag)
|
|
328
|
-
return [2 /*return*/, null];
|
|
329
|
-
return [4 /*yield*/, utils_1.Versions.getNextVersion(currentVersionTag.name, version)];
|
|
330
|
-
case 2:
|
|
331
|
-
nextVersion = _a.sent();
|
|
332
|
-
branchName = utils_1.BranchNames.getRelease(nextVersion);
|
|
333
|
-
return [4 /*yield*/, this._service.getBranch(projectId, branchName)];
|
|
334
|
-
case 3:
|
|
335
|
-
branch = _a.sent();
|
|
336
|
-
if (!branch)
|
|
337
|
-
return [2 /*return*/, null];
|
|
338
|
-
return [2 /*return*/, branchName];
|
|
339
|
-
}
|
|
340
|
-
});
|
|
341
|
-
});
|
|
342
|
-
};
|
|
343
|
-
BumpPackagesTask.prototype.getOutputPath = function (project, milestone) {
|
|
344
|
-
return "./temp/".concat(milestone, "/").concat(project.title);
|
|
345
|
-
};
|
|
346
198
|
BumpPackagesTask = __decorate([
|
|
347
199
|
(0, inversify_1.injectable)(),
|
|
348
200
|
__param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
|
|
@@ -0,0 +1,344 @@
|
|
|
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.InstallPackagesTask = void 0;
|
|
55
|
+
require("reflect-metadata");
|
|
56
|
+
var inversify_1 = require("inversify");
|
|
57
|
+
var fs_extra_1 = __importDefault(require("fs-extra"));
|
|
58
|
+
var semver_1 = __importDefault(require("semver"));
|
|
59
|
+
var child_process_1 = __importDefault(require("child_process"));
|
|
60
|
+
var types_1 = require("../types");
|
|
61
|
+
var services_1 = require("../services");
|
|
62
|
+
var utils_1 = require("../utils");
|
|
63
|
+
var constants_1 = require("../constants");
|
|
64
|
+
var ROOT_DIRECTORIES = {
|
|
65
|
+
// Curator
|
|
66
|
+
62: 'src/ClickView.Curator.Web/Assets',
|
|
67
|
+
// Library Editor
|
|
68
|
+
534: 'src/ClickView.Cloud',
|
|
69
|
+
// Lite
|
|
70
|
+
822: 'src/ClickView.Lite',
|
|
71
|
+
// Online
|
|
72
|
+
109: 'src/ClickView.Web.Online.Pages',
|
|
73
|
+
// Reports
|
|
74
|
+
970: 'src/ClickView.Analytics.Web'
|
|
75
|
+
};
|
|
76
|
+
var InstallPackagesTask = /** @class */ (function () {
|
|
77
|
+
function InstallPackagesTask(service) {
|
|
78
|
+
this._service = service;
|
|
79
|
+
}
|
|
80
|
+
InstallPackagesTask.prototype.run = function (options) {
|
|
81
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
82
|
+
var projects, monorepo, consumingProjects, monorepoBranchName, versions, _i, consumingProjects_1, project, branchName, _a, consumingProjects_2, project, _b, consumingProjects_3, project, branchName;
|
|
83
|
+
return __generator(this, function (_c) {
|
|
84
|
+
switch (_c.label) {
|
|
85
|
+
case 0:
|
|
86
|
+
utils_1.Logger.logTask('Installing clickview npm packages in consuming projects');
|
|
87
|
+
return [4 /*yield*/, this._service.getProjects(options)];
|
|
88
|
+
case 1:
|
|
89
|
+
projects = _c.sent();
|
|
90
|
+
monorepo = projects.find(function (p) { return p.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID; });
|
|
91
|
+
consumingProjects = projects.filter(function (p) { return p.id.toString() !== utils_1.ProjectIds.MONOREPO_PROJECT_ID; });
|
|
92
|
+
if (!monorepo) {
|
|
93
|
+
utils_1.Logger.logError("Monorepo was not in this release");
|
|
94
|
+
return [2 /*return*/, false];
|
|
95
|
+
}
|
|
96
|
+
if (!consumingProjects.length) {
|
|
97
|
+
utils_1.Logger.logError("No projects that consume monorepo could be found");
|
|
98
|
+
return [2 /*return*/, false];
|
|
99
|
+
}
|
|
100
|
+
return [4 /*yield*/, this.getBranchName(monorepo.id, options.version)];
|
|
101
|
+
case 2:
|
|
102
|
+
monorepoBranchName = _c.sent();
|
|
103
|
+
if (!monorepoBranchName) {
|
|
104
|
+
utils_1.Logger.logError("[".concat(monorepo.title, "] branch does not exist"));
|
|
105
|
+
return [2 /*return*/, false];
|
|
106
|
+
}
|
|
107
|
+
return [4 /*yield*/, this.getPackageVersions(monorepoBranchName)];
|
|
108
|
+
case 3:
|
|
109
|
+
versions = _c.sent();
|
|
110
|
+
utils_1.Logger.logMessage("Versions identified for ".concat(monorepoBranchName));
|
|
111
|
+
Object.keys(versions).forEach(function (key) {
|
|
112
|
+
utils_1.Logger.logMessage("- [".concat(key, "]: ").concat(versions[key]));
|
|
113
|
+
});
|
|
114
|
+
// let cont = true;
|
|
115
|
+
utils_1.Logger.logMessage('\nInstalling packages:\n');
|
|
116
|
+
_i = 0, consumingProjects_1 = consumingProjects;
|
|
117
|
+
_c.label = 4;
|
|
118
|
+
case 4:
|
|
119
|
+
if (!(_i < consumingProjects_1.length)) return [3 /*break*/, 8];
|
|
120
|
+
project = consumingProjects_1[_i];
|
|
121
|
+
return [4 /*yield*/, this.getBranchName(project.id, options.version)];
|
|
122
|
+
case 5:
|
|
123
|
+
branchName = _c.sent();
|
|
124
|
+
// TODO: potentially add a validate branches task and removing the branch checking from this task
|
|
125
|
+
// so that install-packages can't be run until create release is run
|
|
126
|
+
if (!branchName) {
|
|
127
|
+
utils_1.Logger.logError("[".concat(project.title, "]: branch does not exist"));
|
|
128
|
+
return [3 /*break*/, 7];
|
|
129
|
+
}
|
|
130
|
+
return [4 /*yield*/, this.updateAndSavePackageFiles(project, options.milestone, branchName, versions)];
|
|
131
|
+
case 6:
|
|
132
|
+
_c.sent();
|
|
133
|
+
_c.label = 7;
|
|
134
|
+
case 7:
|
|
135
|
+
_i++;
|
|
136
|
+
return [3 /*break*/, 4];
|
|
137
|
+
case 8:
|
|
138
|
+
for (_a = 0, consumingProjects_2 = consumingProjects; _a < consumingProjects_2.length; _a++) {
|
|
139
|
+
project = consumingProjects_2[_a];
|
|
140
|
+
utils_1.Logger.logInfo("[".concat(project.title, "]: Running npm i --package-lock-only"));
|
|
141
|
+
this.npmInstall(project, options.milestone);
|
|
142
|
+
utils_1.Logger.logInfo('\n');
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* TODO: Need to not commit when there's no changes
|
|
146
|
+
*/
|
|
147
|
+
utils_1.Logger.logMessage('Committing files');
|
|
148
|
+
_b = 0, consumingProjects_3 = consumingProjects;
|
|
149
|
+
_c.label = 9;
|
|
150
|
+
case 9:
|
|
151
|
+
if (!(_b < consumingProjects_3.length)) return [3 /*break*/, 13];
|
|
152
|
+
project = consumingProjects_3[_b];
|
|
153
|
+
return [4 /*yield*/, this.getBranchName(project.id, options.version)];
|
|
154
|
+
case 10:
|
|
155
|
+
branchName = _c.sent();
|
|
156
|
+
if (!branchName) {
|
|
157
|
+
utils_1.Logger.logError("[".concat(project.title, "]: branch does not exist"));
|
|
158
|
+
return [3 /*break*/, 12];
|
|
159
|
+
}
|
|
160
|
+
return [4 /*yield*/, this.commitUpdatedFiles(project, options.milestone, branchName)];
|
|
161
|
+
case 11:
|
|
162
|
+
_c.sent();
|
|
163
|
+
utils_1.Logger.logMessage("[".concat(project.title, "]: File changes committed"));
|
|
164
|
+
_c.label = 12;
|
|
165
|
+
case 12:
|
|
166
|
+
_b++;
|
|
167
|
+
return [3 /*break*/, 9];
|
|
168
|
+
case 13: return [2 /*return*/, true];
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
InstallPackagesTask.prototype.commitUpdatedFiles = function (project, milestone, branchName) {
|
|
174
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
175
|
+
var rootDir, outputPath, commitFiles, _a;
|
|
176
|
+
var _b, _c;
|
|
177
|
+
return __generator(this, function (_d) {
|
|
178
|
+
switch (_d.label) {
|
|
179
|
+
case 0:
|
|
180
|
+
rootDir = ROOT_DIRECTORIES[project.id];
|
|
181
|
+
outputPath = this.getOutputPath(project, milestone);
|
|
182
|
+
_b = {
|
|
183
|
+
filePath: "".concat(rootDir, "/package.json")
|
|
184
|
+
};
|
|
185
|
+
return [4 /*yield*/, fs_extra_1.default.readFile("".concat(outputPath, "/package.json"), 'utf8')];
|
|
186
|
+
case 1:
|
|
187
|
+
_a = [(_b.content = _d.sent(),
|
|
188
|
+
_b)];
|
|
189
|
+
_c = {
|
|
190
|
+
filePath: "".concat(rootDir, "/package-lock.json")
|
|
191
|
+
};
|
|
192
|
+
return [4 /*yield*/, fs_extra_1.default.readFile("".concat(outputPath, "/package-lock.json"), 'utf8')];
|
|
193
|
+
case 2:
|
|
194
|
+
commitFiles = _a.concat([(_c.content = _d.sent(),
|
|
195
|
+
_c)]);
|
|
196
|
+
return [4 /*yield*/, this._service.commit(project.id, branchName, 'Installing @clickview npm packages', commitFiles)];
|
|
197
|
+
case 3:
|
|
198
|
+
_d.sent();
|
|
199
|
+
return [2 /*return*/];
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
};
|
|
204
|
+
InstallPackagesTask.prototype.npmInstall = function (project, milestone) {
|
|
205
|
+
var outputPath = this.getOutputPath(project, milestone);
|
|
206
|
+
child_process_1.default.execSync('npm i --package-lock-only', {
|
|
207
|
+
cwd: outputPath,
|
|
208
|
+
// Uncomment if we want to silence
|
|
209
|
+
// stdio: 'pipe'
|
|
210
|
+
});
|
|
211
|
+
};
|
|
212
|
+
InstallPackagesTask.prototype.updateAndSavePackageFiles = function (project, milestone, branchName, versions) {
|
|
213
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
214
|
+
var rootDir, packageJson, packageLock, packageJsonObj, outputPath;
|
|
215
|
+
return __generator(this, function (_a) {
|
|
216
|
+
switch (_a.label) {
|
|
217
|
+
case 0:
|
|
218
|
+
rootDir = ROOT_DIRECTORIES[project.id];
|
|
219
|
+
return [4 /*yield*/, this.getFileText(project.id, branchName, "".concat(rootDir, "/package.json"))];
|
|
220
|
+
case 1:
|
|
221
|
+
packageJson = _a.sent();
|
|
222
|
+
return [4 /*yield*/, this.getFileText(project.id, branchName, "".concat(rootDir, "/package-lock.json"))];
|
|
223
|
+
case 2:
|
|
224
|
+
packageLock = _a.sent();
|
|
225
|
+
packageJsonObj = JSON.parse(packageJson);
|
|
226
|
+
utils_1.Logger.logMessage(project.title);
|
|
227
|
+
/**
|
|
228
|
+
* Annoyingly some projects have clickview packages sitting in dependencies
|
|
229
|
+
* and others have it in devDependencies
|
|
230
|
+
*/
|
|
231
|
+
if (packageJsonObj.dependencies)
|
|
232
|
+
packageJson = this.replaceVersions(packageJson, versions, packageJsonObj.dependencies);
|
|
233
|
+
if (packageJsonObj.devDependencies)
|
|
234
|
+
packageJson = this.replaceVersions(packageJson, versions, packageJsonObj.devDependencies);
|
|
235
|
+
outputPath = this.getOutputPath(project, milestone);
|
|
236
|
+
return [4 /*yield*/, fs_extra_1.default.outputFile("".concat(outputPath, "/package.json"), packageJson, { encoding: 'utf8' })];
|
|
237
|
+
case 3:
|
|
238
|
+
_a.sent();
|
|
239
|
+
return [4 /*yield*/, fs_extra_1.default.outputFile("".concat(outputPath, "/package-lock.json"), packageLock, { encoding: 'utf8' })];
|
|
240
|
+
case 4:
|
|
241
|
+
_a.sent();
|
|
242
|
+
return [2 /*return*/];
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
};
|
|
247
|
+
InstallPackagesTask.prototype.replaceVersions = function (packageJson, versions, deps) {
|
|
248
|
+
Object.keys(deps).forEach(function (key) {
|
|
249
|
+
if (!key.startsWith('@clickview'))
|
|
250
|
+
return;
|
|
251
|
+
if (!versions[key])
|
|
252
|
+
return;
|
|
253
|
+
var oldVersion = deps[key];
|
|
254
|
+
var newVersion = versions[key];
|
|
255
|
+
if (oldVersion === newVersion) {
|
|
256
|
+
utils_1.Logger.logWarning("- [".concat(key, "]: ").concat(versions[key], " is up to date"));
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
if (semver_1.default.compare(oldVersion, newVersion) === 1) {
|
|
260
|
+
utils_1.Logger.logError("- [".concat(key, "]: ").concat(deps[key], " -> ").concat(versions[key], " downgrade detected"));
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
packageJson = packageJson.replace("\"".concat(key, "\": \"").concat(deps[key], "\""), "\"".concat(key, "\": \"").concat(versions[key], "\""));
|
|
264
|
+
utils_1.Logger.logMessage("- [".concat(key, "]: ").concat(deps[key], " -> ").concat(versions[key]));
|
|
265
|
+
});
|
|
266
|
+
return packageJson;
|
|
267
|
+
};
|
|
268
|
+
InstallPackagesTask.prototype.getPackageVersions = function (branchName) {
|
|
269
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
270
|
+
var monorepoPackages, _i, MONOREPO_PACKAGE_JSON_FILES_1, file, text, json;
|
|
271
|
+
return __generator(this, function (_a) {
|
|
272
|
+
switch (_a.label) {
|
|
273
|
+
case 0:
|
|
274
|
+
monorepoPackages = {};
|
|
275
|
+
_i = 0, MONOREPO_PACKAGE_JSON_FILES_1 = constants_1.MONOREPO_PACKAGE_JSON_FILES;
|
|
276
|
+
_a.label = 1;
|
|
277
|
+
case 1:
|
|
278
|
+
if (!(_i < MONOREPO_PACKAGE_JSON_FILES_1.length)) return [3 /*break*/, 4];
|
|
279
|
+
file = MONOREPO_PACKAGE_JSON_FILES_1[_i];
|
|
280
|
+
return [4 /*yield*/, this.getFileText(utils_1.ProjectIds.MONOREPO_PROJECT_ID, branchName, file)];
|
|
281
|
+
case 2:
|
|
282
|
+
text = _a.sent();
|
|
283
|
+
json = JSON.parse(text);
|
|
284
|
+
monorepoPackages[json.name] = json.version;
|
|
285
|
+
_a.label = 3;
|
|
286
|
+
case 3:
|
|
287
|
+
_i++;
|
|
288
|
+
return [3 /*break*/, 1];
|
|
289
|
+
case 4: return [2 /*return*/, monorepoPackages];
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
};
|
|
294
|
+
InstallPackagesTask.prototype.getFileText = function (projectId, branchName, fileName) {
|
|
295
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
296
|
+
var file, buff;
|
|
297
|
+
return __generator(this, function (_a) {
|
|
298
|
+
switch (_a.label) {
|
|
299
|
+
case 0: return [4 /*yield*/, this._service.getFile(projectId, branchName, fileName)];
|
|
300
|
+
case 1:
|
|
301
|
+
file = _a.sent();
|
|
302
|
+
if (!file)
|
|
303
|
+
return [2 /*return*/, ''];
|
|
304
|
+
buff = Buffer.from(file.content, 'base64');
|
|
305
|
+
return [2 /*return*/, buff.toString('utf-8')];
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
};
|
|
310
|
+
InstallPackagesTask.prototype.getBranchName = function (projectId, version) {
|
|
311
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
312
|
+
var currentVersionTag, nextVersion, branchName, branch;
|
|
313
|
+
return __generator(this, function (_a) {
|
|
314
|
+
switch (_a.label) {
|
|
315
|
+
case 0: return [4 /*yield*/, this._service.getCurrentVersionTag(projectId)];
|
|
316
|
+
case 1:
|
|
317
|
+
currentVersionTag = _a.sent();
|
|
318
|
+
if (!currentVersionTag)
|
|
319
|
+
return [2 /*return*/, null];
|
|
320
|
+
return [4 /*yield*/, utils_1.Versions.getNextVersion(currentVersionTag.name, version)];
|
|
321
|
+
case 2:
|
|
322
|
+
nextVersion = _a.sent();
|
|
323
|
+
branchName = utils_1.BranchNames.getRelease(nextVersion);
|
|
324
|
+
return [4 /*yield*/, this._service.getBranch(projectId, branchName)];
|
|
325
|
+
case 3:
|
|
326
|
+
branch = _a.sent();
|
|
327
|
+
if (!branch)
|
|
328
|
+
return [2 /*return*/, null];
|
|
329
|
+
return [2 /*return*/, branchName];
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
};
|
|
334
|
+
InstallPackagesTask.prototype.getOutputPath = function (project, milestone) {
|
|
335
|
+
return "./temp/".concat(milestone, "/").concat(project.title);
|
|
336
|
+
};
|
|
337
|
+
InstallPackagesTask = __decorate([
|
|
338
|
+
(0, inversify_1.injectable)(),
|
|
339
|
+
__param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
|
|
340
|
+
__metadata("design:paramtypes", [services_1.GitLabService])
|
|
341
|
+
], InstallPackagesTask);
|
|
342
|
+
return InstallPackagesTask;
|
|
343
|
+
}());
|
|
344
|
+
exports.InstallPackagesTask = InstallPackagesTask;
|
package/lib/src/tasks/index.js
CHANGED
|
@@ -19,6 +19,7 @@ __exportStar(require("./BumpVersionTxtTask"), exports);
|
|
|
19
19
|
__exportStar(require("./CreateBranchTask"), exports);
|
|
20
20
|
__exportStar(require("./CreateMergeRequestTask"), exports);
|
|
21
21
|
__exportStar(require("./CreateReleaseNotesTask"), exports);
|
|
22
|
+
__exportStar(require("./InstallPackagesTask"), exports);
|
|
22
23
|
__exportStar(require("./ValidateCommitsTask"), exports);
|
|
23
24
|
__exportStar(require("./ValidateDescriptionsTask"), exports);
|
|
24
25
|
__exportStar(require("./ValidateTask"), exports);
|
package/lib/src/types.js
CHANGED
|
@@ -19,6 +19,7 @@ exports.TASKS = {
|
|
|
19
19
|
CreateMergeRequestTask: Symbol.for('CreateMergeRequestTask'),
|
|
20
20
|
ValidateDescriptionsTask: Symbol.for('ValidateDescriptionsTask'),
|
|
21
21
|
CreateReleaseNotesTask: Symbol.for('CreateReleaseNotesTask'),
|
|
22
|
+
InstallPackagesTask: Symbol.for('InstallPackagesTask'),
|
|
22
23
|
BumpPackagesTask: Symbol.for('BumpPackagesTask')
|
|
23
24
|
};
|
|
24
25
|
exports.COMMANDS = {
|
|
@@ -28,5 +29,6 @@ exports.COMMANDS = {
|
|
|
28
29
|
CreateBranchCommand: Symbol.for('CreateBranchCommand'),
|
|
29
30
|
CreateMergeRequestCommand: Symbol.for('CreateMergeRequestCommand'),
|
|
30
31
|
CreateReleaseNotesCommand: Symbol.for('CreateReleaseNotesCommand'),
|
|
32
|
+
InstallPackagesCommand: Symbol.for('InstallPackagesCommand'),
|
|
31
33
|
BumpPackagesCommand: Symbol.for('BumpPackagesCommand')
|
|
32
34
|
};
|