@proteinjs/build 1.0.15 → 1.0.17
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/CHANGELOG.md +16 -0
- package/dist/src/Github.d.ts +31 -0
- package/dist/src/Github.d.ts.map +1 -0
- package/dist/src/Github.js +122 -0
- package/dist/src/Github.js.map +1 -0
- package/dist/src/cleanWorkspace.js +1 -1
- package/dist/src/cleanWorkspace.js.map +1 -1
- package/dist/src/runVersionWorkspace.d.ts +3 -0
- package/dist/src/runVersionWorkspace.d.ts.map +1 -0
- package/dist/src/runVersionWorkspace.js +6 -0
- package/dist/src/runVersionWorkspace.js.map +1 -0
- package/dist/src/testWorkspace.js +1 -1
- package/dist/src/testWorkspace.js.map +1 -1
- package/dist/src/versionWorkspace.d.ts +2 -0
- package/dist/src/versionWorkspace.d.ts.map +1 -0
- package/dist/src/versionWorkspace.js +350 -0
- package/dist/src/versionWorkspace.js.map +1 -0
- package/package.json +6 -4
- package/src/Github.ts +83 -0
- package/src/cleanWorkspace.ts +1 -1
- package/src/runVersionWorkspace.ts +5 -0
- package/src/testWorkspace.ts +1 -1
- package/src/versionWorkspace.ts +195 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,22 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.0.17](https://github.com/proteinjs/build/compare/@proteinjs/build@1.0.16...@proteinjs/build@1.0.17) (2024-04-22)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @proteinjs/build
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [1.0.16](https://github.com/proteinjs/build/compare/@proteinjs/build@1.0.15...@proteinjs/build@1.0.16) (2024-04-19)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @proteinjs/build
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
6
22
|
## [1.0.15](https://github.com/proteinjs/build/compare/@proteinjs/build@1.0.14...@proteinjs/build@1.0.15) (2024-04-19)
|
|
7
23
|
|
|
8
24
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { LocalPackage } from '@proteinjs/util-node';
|
|
2
|
+
export type WorkflowRun = {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
head_sha: string;
|
|
6
|
+
status: string;
|
|
7
|
+
conclusion: string | null;
|
|
8
|
+
};
|
|
9
|
+
export type Commit = {
|
|
10
|
+
owner: string;
|
|
11
|
+
repo: string;
|
|
12
|
+
sha: string;
|
|
13
|
+
};
|
|
14
|
+
export declare class Github {
|
|
15
|
+
private logger;
|
|
16
|
+
private authToken;
|
|
17
|
+
constructor(authToken?: string);
|
|
18
|
+
private getGithubToken;
|
|
19
|
+
/**
|
|
20
|
+
* Check if the workflow run triggered by a commit resulted in packages being built and tested successfully
|
|
21
|
+
*
|
|
22
|
+
* @param workflowName the name of the workflow
|
|
23
|
+
* @param commit the commit that triggered the workflow
|
|
24
|
+
* @param timeout max time to wait for workflow completion
|
|
25
|
+
*
|
|
26
|
+
* @returns true if the ci workflow completed successfully, otherwise throws an error
|
|
27
|
+
*/
|
|
28
|
+
repoCiPassed(workflowName: string, commit: Commit, localPackage: LocalPackage, timeout?: number): Promise<boolean>;
|
|
29
|
+
private getWorkflowRun;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=Github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Github.d.ts","sourceRoot":"","sources":["../../src/Github.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAC,IAAI,CAAC;CACzB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAA;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,SAAS,CAAS;gBAGxB,SAAS,CAAC,EAAE,MAAM;IAKpB,OAAO,CAAC,cAAc;IAOtB;;;;;;;;OAQG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,SAAgB;YAoB9F,cAAc;CAkB7B"}
|
|
@@ -0,0 +1,122 @@
|
|
|
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 (g && (g = 0, op[0] && (_ = 0)), _) 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.Github = void 0;
|
|
40
|
+
var core_1 = require("@octokit/core");
|
|
41
|
+
var util_1 = require("@proteinjs/util");
|
|
42
|
+
var Github = /** @class */ (function () {
|
|
43
|
+
function Github(authToken) {
|
|
44
|
+
this.logger = new util_1.Logger(this.constructor.name);
|
|
45
|
+
this.authToken = authToken ? authToken : this.getGithubToken();
|
|
46
|
+
}
|
|
47
|
+
Github.prototype.getGithubToken = function () {
|
|
48
|
+
if (process.env.GITHUB_TOKEN)
|
|
49
|
+
return process.env.GITHUB_TOKEN;
|
|
50
|
+
throw new Error("GITHUB_TOKEN env variable not set");
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Check if the workflow run triggered by a commit resulted in packages being built and tested successfully
|
|
54
|
+
*
|
|
55
|
+
* @param workflowName the name of the workflow
|
|
56
|
+
* @param commit the commit that triggered the workflow
|
|
57
|
+
* @param timeout max time to wait for workflow completion
|
|
58
|
+
*
|
|
59
|
+
* @returns true if the ci workflow completed successfully, otherwise throws an error
|
|
60
|
+
*/
|
|
61
|
+
Github.prototype.repoCiPassed = function (workflowName, commit, localPackage, timeout) {
|
|
62
|
+
if (timeout === void 0) { timeout = 5 * 60 * 1000; }
|
|
63
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
64
|
+
var startTime, workflowRun;
|
|
65
|
+
return __generator(this, function (_a) {
|
|
66
|
+
switch (_a.label) {
|
|
67
|
+
case 0:
|
|
68
|
+
startTime = Date.now();
|
|
69
|
+
_a.label = 1;
|
|
70
|
+
case 1:
|
|
71
|
+
if (!true) return [3 /*break*/, 4];
|
|
72
|
+
return [4 /*yield*/, this.getWorkflowRun(workflowName, commit)];
|
|
73
|
+
case 2:
|
|
74
|
+
workflowRun = _a.sent();
|
|
75
|
+
if (workflowRun && workflowRun.status === 'completed') {
|
|
76
|
+
if (workflowRun.conclusion === 'success') {
|
|
77
|
+
this.logger.info("(".concat(localPackage.name, ") ci passed for latest version (").concat(localPackage.packageJson.version, ")"));
|
|
78
|
+
return [2 /*return*/, true];
|
|
79
|
+
}
|
|
80
|
+
throw new Error("Workflow run failed: ".concat(workflowName, ", for commit: ").concat(JSON.stringify(commit)));
|
|
81
|
+
}
|
|
82
|
+
if (Date.now() - startTime > timeout)
|
|
83
|
+
throw new Error("Timed out checking for workflow run: ".concat(workflowName, ", for commit: ").concat(JSON.stringify(commit)));
|
|
84
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 10000); })];
|
|
85
|
+
case 3:
|
|
86
|
+
_a.sent();
|
|
87
|
+
return [3 /*break*/, 1];
|
|
88
|
+
case 4: return [2 /*return*/];
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
Github.prototype.getWorkflowRun = function (workflowName, commit) {
|
|
94
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
95
|
+
var octokit, response, workflowRuns;
|
|
96
|
+
return __generator(this, function (_a) {
|
|
97
|
+
switch (_a.label) {
|
|
98
|
+
case 0:
|
|
99
|
+
octokit = new core_1.Octokit({ auth: this.authToken });
|
|
100
|
+
return [4 /*yield*/, octokit.request('GET /repos/{owner}/{repo}/actions/runs', {
|
|
101
|
+
owner: commit.owner,
|
|
102
|
+
repo: commit.repo,
|
|
103
|
+
per_page: 10,
|
|
104
|
+
})];
|
|
105
|
+
case 1:
|
|
106
|
+
response = _a.sent();
|
|
107
|
+
workflowRuns = response.data.workflow_runs.filter(function (run) {
|
|
108
|
+
if (run.head_sha !== commit.sha)
|
|
109
|
+
return false;
|
|
110
|
+
if (workflowName && run.name !== workflowName)
|
|
111
|
+
return false;
|
|
112
|
+
return true;
|
|
113
|
+
});
|
|
114
|
+
return [2 /*return*/, workflowRuns[0]];
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
return Github;
|
|
120
|
+
}());
|
|
121
|
+
exports.Github = Github;
|
|
122
|
+
//# sourceMappingURL=Github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Github.js","sourceRoot":"","sources":["../../src/Github.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAuC;AACvC,wCAAwC;AAiBxC;IAIE,gBACE,SAAkB;QAJZ,WAAM,GAAG,IAAI,aAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAMjD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IACjE,CAAC;IAEO,+BAAc,GAAtB;QACE,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;YAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAElC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED;;;;;;;;OAQG;IACG,6BAAY,GAAlB,UAAmB,YAAoB,EAAE,MAAc,EAAE,YAA0B,EAAE,OAAuB;QAAvB,wBAAA,EAAA,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI;;;;;;wBACtG,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;;;6BACpB,IAAI;wBACW,qBAAM,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,EAAA;;wBAA7D,WAAW,GAAG,SAA+C;wBACnE,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,WAAW,EAAE;4BACrD,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,EAAE;gCACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAI,YAAY,CAAC,IAAI,6CAAmC,YAAY,CAAC,WAAW,CAAC,OAAO,MAAG,CAAC,CAAC;gCAC9G,sBAAO,IAAI,EAAC;6BACb;4BAED,MAAM,IAAI,KAAK,CAAC,+BAAwB,YAAY,2BAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAE,CAAC,CAAC;yBAChG;wBAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO;4BAClC,MAAM,IAAI,KAAK,CAAC,+CAAwC,YAAY,2BAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAE,CAAC,CAAC;wBAEjH,qBAAM,IAAI,OAAO,CAAC,UAAA,OAAO,IAAI,OAAA,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,EAA1B,CAA0B,CAAC,EAAA;;wBAAxD,SAAwD,CAAC;;;;;;KAE5D;IAEa,+BAAc,GAA5B,UAA6B,YAAoB,EAAE,MAAc;;;;;;wBACzD,OAAO,GAAG,IAAI,cAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;wBACrC,qBAAM,OAAO,CAAC,OAAO,CAAC,wCAAwC,EAAE;gCAC/E,KAAK,EAAE,MAAM,CAAC,KAAK;gCACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gCACjB,QAAQ,EAAE,EAAE;6BACb,CAAC,EAAA;;wBAJI,QAAQ,GAAG,SAIf;wBACI,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAA,GAAG;4BACzD,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,GAAG;gCAC7B,OAAO,KAAK,CAAC;4BAEf,IAAI,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;gCAC3C,OAAO,KAAK,CAAC;4BAEf,OAAO,IAAI,CAAC;wBACd,CAAC,CAAkB,CAAC;wBACpB,sBAAO,YAAY,CAAC,CAAC,CAAC,EAAC;;;;KACxB;IACH,aAAC;AAAD,CAAC,AAhED,IAgEC;AAhEY,wBAAM"}
|
|
@@ -79,7 +79,7 @@ var cleanWorkspace = function (workspaceMetadata) { return __awaiter(void 0, voi
|
|
|
79
79
|
_c.label = 3;
|
|
80
80
|
case 3:
|
|
81
81
|
_a = _b, packageMap = _a.packageMap, sortedPackageNames = _a.sortedPackageNames;
|
|
82
|
-
filteredPackageNames = sortedPackageNames.filter(function (packageName) { var _a; return !!((_a = packageMap[packageName].packageJson.scripts) === null || _a === void 0 ? void 0 : _a.clean)
|
|
82
|
+
filteredPackageNames = sortedPackageNames.filter(function (packageName) { var _a; return !!((_a = packageMap[packageName].packageJson.scripts) === null || _a === void 0 ? void 0 : _a.clean); });
|
|
83
83
|
logger.info("> Cleaning ".concat(filteredPackageNames.length, " package").concat(filteredPackageNames.length != 1 ? 's' : '', " in workspace (").concat(workspacePath, ")"));
|
|
84
84
|
_i = 0, filteredPackageNames_1 = filteredPackageNames;
|
|
85
85
|
_c.label = 4;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanWorkspace.js","sourceRoot":"","sources":["../../src/cleanWorkspace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA4B;AAC5B,kDAA0E;AAC1E,wCAAwC;AAEjC,IAAM,cAAc,GAAG,UAAO,iBAAqC;;;;;gBAClE,MAAM,GAAG,IAAI,aAAM,CAAC,gBAAgB,CAAC,CAAC;gBACtC,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;qBACO,iBAAiB,EAAjB,wBAAiB;gBAAG,KAAA,iBAAiB,CAAA;;oBAAG,qBAAM,uBAAW,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAA;;gBAArD,KAAA,SAAqD,CAAA;;;gBAAlI,OAAkI,EAAhI,UAAU,gBAAA,EAAE,kBAAkB,wBAAA;gBAChC,oBAAoB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAA,WAAW,YAAI,OAAA,CAAC,CAAC,CAAA,MAAA,UAAU,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,OAAO,0CAAE,KAAK,CAAA,
|
|
1
|
+
{"version":3,"file":"cleanWorkspace.js","sourceRoot":"","sources":["../../src/cleanWorkspace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA4B;AAC5B,kDAA0E;AAC1E,wCAAwC;AAEjC,IAAM,cAAc,GAAG,UAAO,iBAAqC;;;;;gBAClE,MAAM,GAAG,IAAI,aAAM,CAAC,gBAAgB,CAAC,CAAC;gBACtC,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;qBACO,iBAAiB,EAAjB,wBAAiB;gBAAG,KAAA,iBAAiB,CAAA;;oBAAG,qBAAM,uBAAW,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAA;;gBAArD,KAAA,SAAqD,CAAA;;;gBAAlI,OAAkI,EAAhI,UAAU,gBAAA,EAAE,kBAAkB,wBAAA;gBAChC,oBAAoB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAA,WAAW,YAAI,OAAA,CAAC,CAAC,CAAA,MAAA,UAAU,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,OAAO,0CAAE,KAAK,CAAA,CAAA,EAAA,CAAC,CAAC;gBAE5H,MAAM,CAAC,IAAI,CAAC,qBAAc,oBAAoB,CAAC,MAAM,qBAAW,oBAAoB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,4BAAkB,aAAa,MAAG,CAAC,CAAC;sBACnG,EAApB,6CAAoB;;;qBAApB,CAAA,kCAAoB,CAAA;gBAAnC,WAAW;gBACZ,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;gBACvC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACvD,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAA;;gBAAvD,SAAuD,CAAC;;;gBAHlC,IAAoB,CAAA;;;gBAK5C,MAAM,CAAC,IAAI,CAAC,8BAAuB,oBAAoB,CAAC,MAAM,qBAAW,oBAAoB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,4BAAkB,aAAa,MAAG,CAAC,CAAC;;;;KACzJ,CAAA;AAbY,QAAA,cAAc,kBAa1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runVersionWorkspace.d.ts","sourceRoot":"","sources":["../../src/runVersionWorkspace.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runVersionWorkspace.js","sourceRoot":"","sources":["../../src/runVersionWorkspace.ts"],"names":[],"mappings":";;;AAEA,uDAAqD;AAErD,IAAA,mCAAgB,GAAE,CAAC"}
|
|
@@ -79,7 +79,7 @@ var testWorkspace = function (workspaceMetadata) { return __awaiter(void 0, void
|
|
|
79
79
|
_c.label = 3;
|
|
80
80
|
case 3:
|
|
81
81
|
_a = _b, packageMap = _a.packageMap, sortedPackageNames = _a.sortedPackageNames;
|
|
82
|
-
filteredPackageNames = sortedPackageNames.filter(function (packageName) { var _a; return !!((_a = packageMap[packageName].packageJson.scripts) === null || _a === void 0 ? void 0 : _a.test)
|
|
82
|
+
filteredPackageNames = sortedPackageNames.filter(function (packageName) { var _a; return !!((_a = packageMap[packageName].packageJson.scripts) === null || _a === void 0 ? void 0 : _a.test); });
|
|
83
83
|
logger.info("> Testing ".concat(filteredPackageNames.length, " package").concat(filteredPackageNames.length != 1 ? 's' : '', " in workspace (").concat(workspacePath, ")"));
|
|
84
84
|
_i = 0, filteredPackageNames_1 = filteredPackageNames;
|
|
85
85
|
_c.label = 4;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testWorkspace.js","sourceRoot":"","sources":["../../src/testWorkspace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA4B;AAC5B,kDAA0E;AAC1E,wCAAwC;AAEjC,IAAM,aAAa,GAAG,UAAO,iBAAqC;;;;;gBACjE,MAAM,GAAG,IAAI,aAAM,CAAC,eAAe,CAAC,CAAC;gBACrC,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;qBACO,iBAAiB,EAAjB,wBAAiB;gBAAG,KAAA,iBAAiB,CAAA;;oBAAG,qBAAM,uBAAW,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAA;;gBAArD,KAAA,SAAqD,CAAA;;;gBAAlI,OAAkI,EAAhI,UAAU,gBAAA,EAAE,kBAAkB,wBAAA;gBAChC,oBAAoB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAA,WAAW,YAAI,OAAA,CAAC,CAAC,CAAA,MAAA,UAAU,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,OAAO,0CAAE,IAAI,CAAA,
|
|
1
|
+
{"version":3,"file":"testWorkspace.js","sourceRoot":"","sources":["../../src/testWorkspace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA4B;AAC5B,kDAA0E;AAC1E,wCAAwC;AAEjC,IAAM,aAAa,GAAG,UAAO,iBAAqC;;;;;gBACjE,MAAM,GAAG,IAAI,aAAM,CAAC,eAAe,CAAC,CAAC;gBACrC,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;qBACO,iBAAiB,EAAjB,wBAAiB;gBAAG,KAAA,iBAAiB,CAAA;;oBAAG,qBAAM,uBAAW,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAA;;gBAArD,KAAA,SAAqD,CAAA;;;gBAAlI,OAAkI,EAAhI,UAAU,gBAAA,EAAE,kBAAkB,wBAAA;gBAChC,oBAAoB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAA,WAAW,YAAI,OAAA,CAAC,CAAC,CAAA,MAAA,UAAU,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,OAAO,0CAAE,IAAI,CAAA,CAAA,EAAA,CAAC,CAAC;gBAE3H,MAAM,CAAC,IAAI,CAAC,oBAAa,oBAAoB,CAAC,MAAM,qBAAW,oBAAoB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,4BAAkB,aAAa,MAAG,CAAC,CAAC;sBAClG,EAApB,6CAAoB;;;qBAApB,CAAA,kCAAoB,CAAA;gBAAnC,WAAW;gBACZ,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;gBACvC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAClD,qBAAM,uBAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAA;;gBAA3C,IAAI,CAAC,CAAA,SAAsC,CAAA;oBACzC,wBAAS;gBAEX,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAA;;gBAAtD,SAAsD,CAAC;;;gBANjC,IAAoB,CAAA;;;gBAQ5C,MAAM,CAAC,IAAI,CAAC,6BAAsB,oBAAoB,CAAC,MAAM,qBAAW,oBAAoB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,4BAAkB,aAAa,MAAG,CAAC,CAAC;;;;KACxJ,CAAA;AAhBY,QAAA,aAAa,iBAgBzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versionWorkspace.d.ts","sourceRoot":"","sources":["../../src/versionWorkspace.ts"],"names":[],"mappings":"AAQA,wBAAsB,gBAAgB,kBA0BrC"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
37
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
38
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
39
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
40
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
41
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
42
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
46
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
47
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
48
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
49
|
+
function step(op) {
|
|
50
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
51
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
52
|
+
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;
|
|
53
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
54
|
+
switch (op[0]) {
|
|
55
|
+
case 0: case 1: t = op; break;
|
|
56
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
57
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
58
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
59
|
+
default:
|
|
60
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
61
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
62
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
63
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
64
|
+
if (t[2]) _.ops.pop();
|
|
65
|
+
_.trys.pop(); continue;
|
|
66
|
+
}
|
|
67
|
+
op = body.call(thisArg, _);
|
|
68
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
69
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
73
|
+
exports.versionWorkspace = void 0;
|
|
74
|
+
var path = __importStar(require("path"));
|
|
75
|
+
var child_process_1 = require("child_process");
|
|
76
|
+
var util_node_1 = require("@proteinjs/util-node");
|
|
77
|
+
var util_1 = require("@proteinjs/util");
|
|
78
|
+
var logger = new util_1.Logger('workspace:version');
|
|
79
|
+
function versionWorkspace() {
|
|
80
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
81
|
+
var workspacePath, _a, packageMap, packageGraph, sortedPackageNames, filteredPackageNames, _i, filteredPackageNames_1, packageName, localPackage, dependenciesChanged;
|
|
82
|
+
return __generator(this, function (_b) {
|
|
83
|
+
switch (_b.label) {
|
|
84
|
+
case 0:
|
|
85
|
+
workspacePath = process.cwd();
|
|
86
|
+
return [4 /*yield*/, util_node_1.PackageUtil.getWorkspaceMetadata(workspacePath)];
|
|
87
|
+
case 1:
|
|
88
|
+
_a = _b.sent(), packageMap = _a.packageMap, packageGraph = _a.packageGraph, sortedPackageNames = _a.sortedPackageNames;
|
|
89
|
+
filteredPackageNames = sortedPackageNames.filter(function (packageName) {
|
|
90
|
+
var _a, _b;
|
|
91
|
+
var localPackage = packageMap[packageName];
|
|
92
|
+
return !!((_a = localPackage.packageJson.scripts) === null || _a === void 0 ? void 0 : _a.clean)
|
|
93
|
+
&& !!((_b = localPackage.packageJson.scripts) === null || _b === void 0 ? void 0 : _b.build)
|
|
94
|
+
&& packageName != 'typescript-parser'
|
|
95
|
+
&& !localPackage.packageJson.private;
|
|
96
|
+
});
|
|
97
|
+
logger.info("> Versioning workspace (".concat(workspacePath, ")"));
|
|
98
|
+
_i = 0, filteredPackageNames_1 = filteredPackageNames;
|
|
99
|
+
_b.label = 2;
|
|
100
|
+
case 2:
|
|
101
|
+
if (!(_i < filteredPackageNames_1.length)) return [3 /*break*/, 8];
|
|
102
|
+
packageName = filteredPackageNames_1[_i];
|
|
103
|
+
localPackage = packageMap[packageName];
|
|
104
|
+
return [4 /*yield*/, bumpDependencies(localPackage, packageMap, packageGraph)];
|
|
105
|
+
case 3:
|
|
106
|
+
dependenciesChanged = _b.sent();
|
|
107
|
+
if (!dependenciesChanged)
|
|
108
|
+
return [3 /*break*/, 7];
|
|
109
|
+
return [4 /*yield*/, build(localPackage)];
|
|
110
|
+
case 4:
|
|
111
|
+
_b.sent();
|
|
112
|
+
return [4 /*yield*/, pushChanges(localPackage)];
|
|
113
|
+
case 5:
|
|
114
|
+
_b.sent();
|
|
115
|
+
return [4 /*yield*/, publish(localPackage)];
|
|
116
|
+
case 6:
|
|
117
|
+
_b.sent();
|
|
118
|
+
_b.label = 7;
|
|
119
|
+
case 7:
|
|
120
|
+
_i++;
|
|
121
|
+
return [3 /*break*/, 2];
|
|
122
|
+
case 8: return [4 /*yield*/, pushMetarepo(workspacePath)];
|
|
123
|
+
case 9:
|
|
124
|
+
_b.sent();
|
|
125
|
+
logger.info("> Finished versioning workspace (".concat(workspacePath, ")"));
|
|
126
|
+
return [2 /*return*/];
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
exports.versionWorkspace = versionWorkspace;
|
|
132
|
+
function bumpDependencies(localPackage, packageMap, packageGraph) {
|
|
133
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
134
|
+
var localDependencies, dependenciesChanged, _i, localDependencies_1, localDependency, localDependencyPackage, localDependencyVersion, currentDependencyVersion, newDependencyVersion, bumpPatchVersion, currentVersion;
|
|
135
|
+
return __generator(this, function (_a) {
|
|
136
|
+
switch (_a.label) {
|
|
137
|
+
case 0:
|
|
138
|
+
localDependencies = packageGraph.successors(localPackage.name);
|
|
139
|
+
if (!localDependencies || localDependencies.length == 0)
|
|
140
|
+
return [2 /*return*/, false];
|
|
141
|
+
dependenciesChanged = false;
|
|
142
|
+
for (_i = 0, localDependencies_1 = localDependencies; _i < localDependencies_1.length; _i++) {
|
|
143
|
+
localDependency = localDependencies_1[_i];
|
|
144
|
+
localDependencyPackage = packageMap[localDependency];
|
|
145
|
+
localDependencyVersion = localDependencyPackage.packageJson.version;
|
|
146
|
+
currentDependencyVersion = getDependencyVersion(localDependency, localPackage);
|
|
147
|
+
if (!currentDependencyVersion)
|
|
148
|
+
throw new Error("Package (".concat(localPackage.name, ") has dependency on ").concat(localDependency, ", but cannot find version in ").concat(localPackage.name, "'s package.json"));
|
|
149
|
+
if ((currentDependencyVersion === null || currentDependencyVersion === void 0 ? void 0 : currentDependencyVersion.version) == localDependencyVersion)
|
|
150
|
+
continue;
|
|
151
|
+
newDependencyVersion = { prefix: currentDependencyVersion.prefix, version: localDependencyVersion };
|
|
152
|
+
setDependencyVersion(localDependency, currentDependencyVersion, newDependencyVersion, localPackage);
|
|
153
|
+
dependenciesChanged = true;
|
|
154
|
+
}
|
|
155
|
+
if (!dependenciesChanged) return [3 /*break*/, 2];
|
|
156
|
+
bumpPatchVersion = function (version) { return version.replace(/(\d+)\.(\d+)\.(\d+)$/, function (_, major, minor, patch) { return "".concat(major, ".").concat(minor, ".").concat(parseInt(patch, 10) + 1); }); };
|
|
157
|
+
currentVersion = localPackage.packageJson.version;
|
|
158
|
+
localPackage.packageJson.version = bumpPatchVersion(currentVersion);
|
|
159
|
+
logger.info("(".concat(localPackage.name, ") bumping version from ").concat(currentVersion, " -> ").concat(localPackage.packageJson.version));
|
|
160
|
+
return [4 /*yield*/, util_node_1.Fs.writeFiles([{ path: localPackage.filePath, content: localPackage.packageJson }])];
|
|
161
|
+
case 1:
|
|
162
|
+
_a.sent();
|
|
163
|
+
_a.label = 2;
|
|
164
|
+
case 2: return [2 /*return*/, dependenciesChanged];
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
function getDependencyVersion(dependencyPackageName, localPackage) {
|
|
170
|
+
var currentRawDependencyVersion = localPackage.packageJson.dependencies ? localPackage.packageJson.dependencies[dependencyPackageName] : undefined;
|
|
171
|
+
if (!currentRawDependencyVersion)
|
|
172
|
+
currentRawDependencyVersion = localPackage.packageJson.dependencies ? localPackage.packageJson.devDependencies[dependencyPackageName] : undefined;
|
|
173
|
+
if (!currentRawDependencyVersion)
|
|
174
|
+
return undefined;
|
|
175
|
+
var match = currentRawDependencyVersion.match(/^([~^]?)(\d+\.\d+\.\d+)/);
|
|
176
|
+
return { prefix: match[1], version: match[2] };
|
|
177
|
+
}
|
|
178
|
+
function setDependencyVersion(dependencyPackageName, currentVersion, newVersion, localPackage) {
|
|
179
|
+
var newRawVersion = newVersion.prefix ? newVersion.prefix + newVersion.version : newVersion.version;
|
|
180
|
+
if (localPackage.packageJson.dependencies && localPackage.packageJson.dependencies[dependencyPackageName])
|
|
181
|
+
localPackage.packageJson.dependencies[dependencyPackageName] = newRawVersion;
|
|
182
|
+
else
|
|
183
|
+
localPackage.packageJson.devDependencies[dependencyPackageName] = newRawVersion;
|
|
184
|
+
var currentRawVersion = currentVersion.prefix ? currentVersion.prefix + currentVersion.version : currentVersion.version;
|
|
185
|
+
logger.info("(".concat(localPackage.name, ") updating dependency version of ").concat(dependencyPackageName, " (").concat(currentRawVersion, " -> ").concat(newRawVersion, ")"));
|
|
186
|
+
}
|
|
187
|
+
function build(localPackage) {
|
|
188
|
+
var _a;
|
|
189
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
190
|
+
var packageDir;
|
|
191
|
+
return __generator(this, function (_b) {
|
|
192
|
+
switch (_b.label) {
|
|
193
|
+
case 0:
|
|
194
|
+
packageDir = path.dirname(localPackage.filePath);
|
|
195
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('npm', ['run', 'clean'], { cwd: packageDir }, { logPrefix: "[".concat(localPackage.name, "] ") })];
|
|
196
|
+
case 1:
|
|
197
|
+
_b.sent();
|
|
198
|
+
logger.info("(".concat(localPackage.name, ") cleaned"));
|
|
199
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('npm', ['install'], { cwd: packageDir }, { logPrefix: "[".concat(localPackage.name, "] ") })];
|
|
200
|
+
case 2:
|
|
201
|
+
_b.sent();
|
|
202
|
+
logger.info("(".concat(localPackage.name, ") installed latest dependency versions (").concat(packageDir, ")"));
|
|
203
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('npm', ['run', 'build'], { cwd: packageDir }, { logPrefix: "[".concat(localPackage.name, "] ") })];
|
|
204
|
+
case 3:
|
|
205
|
+
_b.sent();
|
|
206
|
+
logger.info("(".concat(localPackage.name, ") built version ").concat(localPackage.packageJson.version, " (").concat(packageDir, ")"));
|
|
207
|
+
if (!((_a = localPackage.packageJson.scripts) === null || _a === void 0 ? void 0 : _a.test)) return [3 /*break*/, 5];
|
|
208
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('npm', ['run', 'test'], { cwd: packageDir }, { logPrefix: "[".concat(localPackage.name, "] ") })];
|
|
209
|
+
case 4:
|
|
210
|
+
_b.sent();
|
|
211
|
+
logger.info("(".concat(localPackage.name, ") tested version ").concat(localPackage.packageJson.version, " (").concat(packageDir, ")"));
|
|
212
|
+
_b.label = 5;
|
|
213
|
+
case 5: return [2 /*return*/];
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function pushChanges(localPackage) {
|
|
219
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
220
|
+
var packageDir, latestCommitSha, repoInfo, commit, tagName;
|
|
221
|
+
return __generator(this, function (_a) {
|
|
222
|
+
switch (_a.label) {
|
|
223
|
+
case 0:
|
|
224
|
+
packageDir = path.dirname(localPackage.filePath);
|
|
225
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('git', ['add', '.'], { cwd: packageDir }, { logPrefix: "[".concat(localPackage.name, "] ") })];
|
|
226
|
+
case 1:
|
|
227
|
+
_a.sent();
|
|
228
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('git', ['commit', '-m', "chore(version): bumping dependency versions [skip ci]"], { cwd: packageDir }, { logPrefix: "[".concat(localPackage.name, "] ") })];
|
|
229
|
+
case 2:
|
|
230
|
+
_a.sent();
|
|
231
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('git', ['push'], { cwd: packageDir }, { logPrefix: "[".concat(localPackage.name, "] ") })];
|
|
232
|
+
case 3:
|
|
233
|
+
_a.sent();
|
|
234
|
+
logger.info("(".concat(localPackage.name, ") pushed latest version (").concat(localPackage.packageJson.version, ")"));
|
|
235
|
+
return [4 /*yield*/, getLatestCommitSha(packageDir)];
|
|
236
|
+
case 4:
|
|
237
|
+
latestCommitSha = _a.sent();
|
|
238
|
+
return [4 /*yield*/, getRepoInfo(packageDir)];
|
|
239
|
+
case 5:
|
|
240
|
+
repoInfo = _a.sent();
|
|
241
|
+
commit = __assign({ sha: latestCommitSha }, repoInfo);
|
|
242
|
+
tagName = "".concat(localPackage.name, "@").concat(localPackage.packageJson.version);
|
|
243
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('git', ['tag', '-a', tagName, '-m', "Release ".concat(tagName)], { cwd: packageDir }, { logPrefix: "[".concat(localPackage.name, "] ") })];
|
|
244
|
+
case 6:
|
|
245
|
+
_a.sent();
|
|
246
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('git', ['push', 'origin', tagName], { cwd: packageDir }, { logPrefix: "[".concat(localPackage.name, "] ") })];
|
|
247
|
+
case 7:
|
|
248
|
+
_a.sent();
|
|
249
|
+
logger.info("(".concat(localPackage.name, ") pushed tag (").concat(tagName, ")"));
|
|
250
|
+
return [2 /*return*/, commit];
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
function pushMetarepo(dir) {
|
|
256
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
257
|
+
return __generator(this, function (_a) {
|
|
258
|
+
switch (_a.label) {
|
|
259
|
+
case 0: return [4 /*yield*/, (0, util_node_1.cmd)('git', ['add', '.'], { cwd: dir }, { logPrefix: "[workspace] " })];
|
|
260
|
+
case 1:
|
|
261
|
+
_a.sent();
|
|
262
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('git', ['commit', '-m', "chore(version): bumping submodule versions [skip ci]"], { cwd: dir }, { logPrefix: "[workspace] " })];
|
|
263
|
+
case 2:
|
|
264
|
+
_a.sent();
|
|
265
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('git', ['push'], { cwd: dir }, { logPrefix: "[workspace] " })];
|
|
266
|
+
case 3:
|
|
267
|
+
_a.sent();
|
|
268
|
+
logger.info("(workspace) pushed metarepo (".concat(dir, ")"));
|
|
269
|
+
return [2 /*return*/];
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
function getLatestCommitSha(dir) {
|
|
275
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
276
|
+
return __generator(this, function (_a) {
|
|
277
|
+
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
278
|
+
(0, child_process_1.exec)('git rev-parse HEAD', { cwd: dir }, function (error, stdout) {
|
|
279
|
+
if (error) {
|
|
280
|
+
reject(error);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
resolve(stdout.trim());
|
|
284
|
+
});
|
|
285
|
+
})];
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
;
|
|
290
|
+
function getRepoInfo(dir) {
|
|
291
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
292
|
+
return __generator(this, function (_a) {
|
|
293
|
+
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
294
|
+
(0, child_process_1.exec)('git remote -v', { cwd: dir }, function (error, stdout) {
|
|
295
|
+
if (error) {
|
|
296
|
+
reject(error);
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
var lines = stdout.split('\n');
|
|
300
|
+
for (var _i = 0, lines_1 = lines; _i < lines_1.length; _i++) {
|
|
301
|
+
var line = lines_1[_i];
|
|
302
|
+
if (line.startsWith('origin')) {
|
|
303
|
+
var match = line.match(/github\.com[:\/](.+?)\/(.+?)\.git/);
|
|
304
|
+
if (match) {
|
|
305
|
+
var _ = match[0], owner = match[1], repo = match[2];
|
|
306
|
+
resolve({ owner: owner, repo: repo });
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
reject(new Error('Origin remote not found or is not a GitHub repository'));
|
|
312
|
+
});
|
|
313
|
+
})];
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
;
|
|
318
|
+
function publish(localPackage) {
|
|
319
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
320
|
+
var packageDir;
|
|
321
|
+
return __generator(this, function (_a) {
|
|
322
|
+
switch (_a.label) {
|
|
323
|
+
case 0:
|
|
324
|
+
if (localPackage.packageJson.private) {
|
|
325
|
+
logger.warn("Preventing publish of private package: ".concat(localPackage.name));
|
|
326
|
+
return [2 /*return*/];
|
|
327
|
+
}
|
|
328
|
+
if (!localPackage.name.startsWith('@proteinjs/')) {
|
|
329
|
+
logger.warn("Preventing publish of non-proteinjs package: ".concat(localPackage.name));
|
|
330
|
+
return [2 /*return*/];
|
|
331
|
+
}
|
|
332
|
+
packageDir = path.dirname(localPackage.filePath);
|
|
333
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('npm', ['set', "//registry.npmjs.org/:_authToken=".concat(getNpmToken())], { cwd: packageDir }, { logPrefix: "[".concat(localPackage.name, "] ") })];
|
|
334
|
+
case 1:
|
|
335
|
+
_a.sent();
|
|
336
|
+
return [4 /*yield*/, (0, util_node_1.cmd)('npm', ['publish', '--tag', 'latest', '--access', 'public'], { cwd: packageDir }, { logPrefix: "[".concat(localPackage.name, "] ") })];
|
|
337
|
+
case 2:
|
|
338
|
+
_a.sent();
|
|
339
|
+
logger.info("(".concat(localPackage.name, ") published latest version (").concat(localPackage.packageJson.version, ")"));
|
|
340
|
+
return [2 /*return*/];
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
function getNpmToken() {
|
|
346
|
+
if (process.env.NPM_TOKEN)
|
|
347
|
+
return process.env.NPM_TOKEN;
|
|
348
|
+
throw new Error("NPM_TOKEN env variable not set");
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=versionWorkspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versionWorkspace.js","sourceRoot":"","sources":["../../src/versionWorkspace.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proteinjs/build",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.17",
|
|
4
4
|
"description": "Workspace build tools",
|
|
5
5
|
"main": "./dist/generated/index.js",
|
|
6
6
|
"types": "./dist/generated/index.d.ts",
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"build-workspace": "dist/src/runBuildWorkspace.js",
|
|
10
10
|
"test-workspace": "dist/src/runTestWorkspace.js",
|
|
11
11
|
"watch-workspace": "dist/src/runWatchWorkspace.js",
|
|
12
|
-
"workspace": "dist/src/runWorkspaceCommand.js"
|
|
12
|
+
"workspace": "dist/src/runWorkspaceCommand.js",
|
|
13
|
+
"version-workspace": "dist/src/runVersionWorkspace.js"
|
|
13
14
|
},
|
|
14
15
|
"publishConfig": {
|
|
15
16
|
"access": "public"
|
|
@@ -31,8 +32,9 @@
|
|
|
31
32
|
"build-dist": "tsc && webpack --mode production"
|
|
32
33
|
},
|
|
33
34
|
"dependencies": {
|
|
35
|
+
"@octokit/core": "6.1.2",
|
|
34
36
|
"@proteinjs/util": "1.0.18",
|
|
35
|
-
"@proteinjs/util-node": "1.0.
|
|
37
|
+
"@proteinjs/util-node": "1.0.22"
|
|
36
38
|
},
|
|
37
39
|
"devDependencies": {
|
|
38
40
|
"@babel/core": "7.23.7",
|
|
@@ -46,5 +48,5 @@
|
|
|
46
48
|
"webpack": "5.90.0",
|
|
47
49
|
"webpack-cli": "5.1.4"
|
|
48
50
|
},
|
|
49
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "5f32aad7cf2731c5342f94f11e32ab1a782ee558"
|
|
50
52
|
}
|
package/src/Github.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Octokit } from '@octokit/core'
|
|
2
|
+
import { Logger } from '@proteinjs/util'
|
|
3
|
+
import { LocalPackage } from '@proteinjs/util-node'
|
|
4
|
+
|
|
5
|
+
export type WorkflowRun = {
|
|
6
|
+
id: number,
|
|
7
|
+
name: string,
|
|
8
|
+
head_sha: string,
|
|
9
|
+
status: string,
|
|
10
|
+
conclusion: string|null,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type Commit = {
|
|
14
|
+
owner: string,
|
|
15
|
+
repo: string,
|
|
16
|
+
sha: string,
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export class Github {
|
|
20
|
+
private logger = new Logger(this.constructor.name);
|
|
21
|
+
private authToken: string;
|
|
22
|
+
|
|
23
|
+
constructor(
|
|
24
|
+
authToken?: string
|
|
25
|
+
) {
|
|
26
|
+
this.authToken = authToken ? authToken : this.getGithubToken();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private getGithubToken() {
|
|
30
|
+
if (process.env.GITHUB_TOKEN)
|
|
31
|
+
return process.env.GITHUB_TOKEN;
|
|
32
|
+
|
|
33
|
+
throw new Error(`GITHUB_TOKEN env variable not set`);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Check if the workflow run triggered by a commit resulted in packages being built and tested successfully
|
|
38
|
+
*
|
|
39
|
+
* @param workflowName the name of the workflow
|
|
40
|
+
* @param commit the commit that triggered the workflow
|
|
41
|
+
* @param timeout max time to wait for workflow completion
|
|
42
|
+
*
|
|
43
|
+
* @returns true if the ci workflow completed successfully, otherwise throws an error
|
|
44
|
+
*/
|
|
45
|
+
async repoCiPassed(workflowName: string, commit: Commit, localPackage: LocalPackage, timeout = 5 * 60 * 1000) {
|
|
46
|
+
let startTime = Date.now();
|
|
47
|
+
while (true) {
|
|
48
|
+
const workflowRun = await this.getWorkflowRun(workflowName, commit);
|
|
49
|
+
if (workflowRun && workflowRun.status === 'completed') {
|
|
50
|
+
if (workflowRun.conclusion === 'success') {
|
|
51
|
+
this.logger.info(`(${localPackage.name}) ci passed for latest version (${localPackage.packageJson.version})`);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
throw new Error(`Workflow run failed: ${workflowName}, for commit: ${JSON.stringify(commit)}`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (Date.now() - startTime > timeout)
|
|
59
|
+
throw new Error(`Timed out checking for workflow run: ${workflowName}, for commit: ${JSON.stringify(commit)}`);
|
|
60
|
+
|
|
61
|
+
await new Promise(resolve => setTimeout(resolve, 10000));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private async getWorkflowRun(workflowName: string, commit: Commit): Promise<WorkflowRun|undefined> {
|
|
66
|
+
const octokit = new Octokit({ auth: this.authToken });
|
|
67
|
+
const response = await octokit.request('GET /repos/{owner}/{repo}/actions/runs', {
|
|
68
|
+
owner: commit.owner,
|
|
69
|
+
repo: commit.repo,
|
|
70
|
+
per_page: 10,
|
|
71
|
+
});
|
|
72
|
+
const workflowRuns = response.data.workflow_runs.filter(run => {
|
|
73
|
+
if (run.head_sha !== commit.sha)
|
|
74
|
+
return false;
|
|
75
|
+
|
|
76
|
+
if (workflowName && run.name !== workflowName)
|
|
77
|
+
return false;
|
|
78
|
+
|
|
79
|
+
return true;
|
|
80
|
+
}) as WorkflowRun[];
|
|
81
|
+
return workflowRuns[0];
|
|
82
|
+
}
|
|
83
|
+
}
|
package/src/cleanWorkspace.ts
CHANGED
|
@@ -6,7 +6,7 @@ export const cleanWorkspace = async (workspaceMetadata?: WorkspaceMetadata) => {
|
|
|
6
6
|
const logger = new Logger('cleanWorkspace');
|
|
7
7
|
const workspacePath = process.cwd();
|
|
8
8
|
const { packageMap, sortedPackageNames } = workspaceMetadata ? workspaceMetadata : await PackageUtil.getWorkspaceMetadata(workspacePath);
|
|
9
|
-
const filteredPackageNames = sortedPackageNames.filter(packageName => !!packageMap[packageName].packageJson.scripts?.clean
|
|
9
|
+
const filteredPackageNames = sortedPackageNames.filter(packageName => !!packageMap[packageName].packageJson.scripts?.clean);
|
|
10
10
|
|
|
11
11
|
logger.info(`> Cleaning ${filteredPackageNames.length} package${filteredPackageNames.length != 1 ? 's' : ''} in workspace (${workspacePath})`);
|
|
12
12
|
for (let packageName of filteredPackageNames) {
|
package/src/testWorkspace.ts
CHANGED
|
@@ -6,7 +6,7 @@ export const testWorkspace = async (workspaceMetadata?: WorkspaceMetadata) => {
|
|
|
6
6
|
const logger = new Logger('testWorkspace');
|
|
7
7
|
const workspacePath = process.cwd();
|
|
8
8
|
const { packageMap, sortedPackageNames } = workspaceMetadata ? workspaceMetadata : await PackageUtil.getWorkspaceMetadata(workspacePath);
|
|
9
|
-
const filteredPackageNames = sortedPackageNames.filter(packageName => !!packageMap[packageName].packageJson.scripts?.test
|
|
9
|
+
const filteredPackageNames = sortedPackageNames.filter(packageName => !!packageMap[packageName].packageJson.scripts?.test);
|
|
10
10
|
|
|
11
11
|
logger.info(`> Testing ${filteredPackageNames.length} package${filteredPackageNames.length != 1 ? 's' : ''} in workspace (${workspacePath})`);
|
|
12
12
|
for (let packageName of filteredPackageNames) {
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import * as path from 'path'
|
|
2
|
+
import { exec } from 'child_process'
|
|
3
|
+
import { LocalPackage, LocalPackageMap, PackageUtil, cmd, Fs } from '@proteinjs/util-node'
|
|
4
|
+
import { Logger } from '@proteinjs/util'
|
|
5
|
+
import { Commit } from './Github'
|
|
6
|
+
|
|
7
|
+
const logger = new Logger('workspace:version');
|
|
8
|
+
|
|
9
|
+
export async function versionWorkspace() {
|
|
10
|
+
const workspacePath = process.cwd();
|
|
11
|
+
const { packageMap, packageGraph, sortedPackageNames } = await PackageUtil.getWorkspaceMetadata(workspacePath);
|
|
12
|
+
const filteredPackageNames = sortedPackageNames.filter(packageName => {
|
|
13
|
+
const localPackage = packageMap[packageName];
|
|
14
|
+
return !!localPackage.packageJson.scripts?.clean
|
|
15
|
+
&& !!localPackage.packageJson.scripts?.build
|
|
16
|
+
&& packageName != 'typescript-parser'
|
|
17
|
+
&& !localPackage.packageJson.private
|
|
18
|
+
;
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
logger.info(`> Versioning workspace (${workspacePath})`);
|
|
22
|
+
for (let packageName of filteredPackageNames) {
|
|
23
|
+
const localPackage = packageMap[packageName];
|
|
24
|
+
const dependenciesChanged = await bumpDependencies(localPackage, packageMap, packageGraph);
|
|
25
|
+
if (!dependenciesChanged)
|
|
26
|
+
continue;
|
|
27
|
+
|
|
28
|
+
await build(localPackage);
|
|
29
|
+
await pushChanges(localPackage);
|
|
30
|
+
await publish(localPackage);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
await pushMetarepo(workspacePath);
|
|
34
|
+
logger.info(`> Finished versioning workspace (${workspacePath})`);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async function bumpDependencies(localPackage: LocalPackage, packageMap: LocalPackageMap, packageGraph: any) {
|
|
38
|
+
const localDependencies = packageGraph.successors(localPackage.name);
|
|
39
|
+
if (!localDependencies || localDependencies.length == 0)
|
|
40
|
+
return false;
|
|
41
|
+
|
|
42
|
+
let dependenciesChanged = false;
|
|
43
|
+
for (let localDependency of localDependencies) {
|
|
44
|
+
const localDependencyPackage = packageMap[localDependency];
|
|
45
|
+
const localDependencyVersion = localDependencyPackage.packageJson.version as string;
|
|
46
|
+
const currentDependencyVersion = getDependencyVersion(localDependency, localPackage);
|
|
47
|
+
if (!currentDependencyVersion)
|
|
48
|
+
throw new Error(`Package (${localPackage.name}) has dependency on ${localDependency}, but cannot find version in ${localPackage.name}'s package.json`);
|
|
49
|
+
|
|
50
|
+
if (currentDependencyVersion?.version == localDependencyVersion)
|
|
51
|
+
continue;
|
|
52
|
+
|
|
53
|
+
const newDependencyVersion: DependencyVersion = { prefix: currentDependencyVersion.prefix, version: localDependencyVersion };
|
|
54
|
+
setDependencyVersion(localDependency, currentDependencyVersion, newDependencyVersion, localPackage);
|
|
55
|
+
dependenciesChanged = true;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (dependenciesChanged) {
|
|
59
|
+
const bumpPatchVersion = (version: string) => version.replace(/(\d+)\.(\d+)\.(\d+)$/, (_, major, minor, patch) => `${major}.${minor}.${parseInt(patch, 10) + 1}`);
|
|
60
|
+
const currentVersion = localPackage.packageJson.version;
|
|
61
|
+
localPackage.packageJson.version = bumpPatchVersion(currentVersion);
|
|
62
|
+
logger.info(`(${localPackage.name}) bumping version from ${currentVersion} -> ${localPackage.packageJson.version}`);
|
|
63
|
+
await Fs.writeFiles([{ path: localPackage.filePath, content: localPackage.packageJson }]);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return dependenciesChanged;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
type DependencyVersion = { prefix: string|undefined, version: string }
|
|
70
|
+
|
|
71
|
+
function getDependencyVersion(dependencyPackageName: string, localPackage: LocalPackage): DependencyVersion|undefined {
|
|
72
|
+
let currentRawDependencyVersion = localPackage.packageJson.dependencies ? localPackage.packageJson.dependencies[dependencyPackageName] : undefined;
|
|
73
|
+
if (!currentRawDependencyVersion)
|
|
74
|
+
currentRawDependencyVersion = localPackage.packageJson.dependencies ? localPackage.packageJson.devDependencies[dependencyPackageName] : undefined;
|
|
75
|
+
|
|
76
|
+
if (!currentRawDependencyVersion)
|
|
77
|
+
return undefined;
|
|
78
|
+
|
|
79
|
+
const match = currentRawDependencyVersion.match(/^([~^]?)(\d+\.\d+\.\d+)/);
|
|
80
|
+
return { prefix: match[1], version: match[2] };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function setDependencyVersion(dependencyPackageName: string, currentVersion: DependencyVersion, newVersion: DependencyVersion, localPackage: LocalPackage) {
|
|
84
|
+
const newRawVersion = newVersion.prefix ? newVersion.prefix + newVersion.version : newVersion.version;
|
|
85
|
+
if (localPackage.packageJson.dependencies && localPackage.packageJson.dependencies[dependencyPackageName])
|
|
86
|
+
localPackage.packageJson.dependencies[dependencyPackageName] = newRawVersion;
|
|
87
|
+
else
|
|
88
|
+
localPackage.packageJson.devDependencies[dependencyPackageName] = newRawVersion;
|
|
89
|
+
|
|
90
|
+
const currentRawVersion = currentVersion.prefix ? currentVersion.prefix + currentVersion.version : currentVersion.version;
|
|
91
|
+
logger.info(`(${localPackage.name}) updating dependency version of ${dependencyPackageName} (${currentRawVersion} -> ${newRawVersion})`);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async function build(localPackage: LocalPackage) {
|
|
95
|
+
const packageDir = path.dirname(localPackage.filePath);
|
|
96
|
+
await cmd('npm', ['run', 'clean'], { cwd: packageDir }, { logPrefix: `[${localPackage.name}] ` });
|
|
97
|
+
logger.info(`(${localPackage.name}) cleaned`);
|
|
98
|
+
await cmd('npm', ['install'], { cwd: packageDir }, { logPrefix: `[${localPackage.name}] ` });
|
|
99
|
+
logger.info(`(${localPackage.name}) installed latest dependency versions (${packageDir})`);
|
|
100
|
+
await cmd('npm', ['run', 'build'], { cwd: packageDir }, { logPrefix: `[${localPackage.name}] ` });
|
|
101
|
+
logger.info(`(${localPackage.name}) built version ${localPackage.packageJson.version} (${packageDir})`);
|
|
102
|
+
if (localPackage.packageJson.scripts?.test) {
|
|
103
|
+
await cmd('npm', ['run', 'test'], { cwd: packageDir }, { logPrefix: `[${localPackage.name}] ` });
|
|
104
|
+
logger.info(`(${localPackage.name}) tested version ${localPackage.packageJson.version} (${packageDir})`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async function pushChanges(localPackage: LocalPackage): Promise<Commit> {
|
|
109
|
+
const packageDir = path.dirname(localPackage.filePath);
|
|
110
|
+
await cmd('git', ['add', '.'], { cwd: packageDir }, { logPrefix: `[${localPackage.name}] ` });
|
|
111
|
+
await cmd('git', ['commit', '-m', `chore(version): bumping dependency versions [skip ci]`], { cwd: packageDir }, { logPrefix: `[${localPackage.name}] ` });
|
|
112
|
+
await cmd('git', ['push'], { cwd: packageDir }, { logPrefix: `[${localPackage.name}] ` });
|
|
113
|
+
logger.info(`(${localPackage.name}) pushed latest version (${localPackage.packageJson.version})`);
|
|
114
|
+
const latestCommitSha = await getLatestCommitSha(packageDir);
|
|
115
|
+
const repoInfo = await getRepoInfo(packageDir);
|
|
116
|
+
const commit = { sha: latestCommitSha, ...repoInfo };
|
|
117
|
+
const tagName = `${localPackage.name}@${localPackage.packageJson.version}`;
|
|
118
|
+
await cmd('git', ['tag', '-a', tagName, '-m', `Release ${tagName}`], { cwd: packageDir }, { logPrefix: `[${localPackage.name}] ` });
|
|
119
|
+
await cmd('git', ['push', 'origin', tagName], { cwd: packageDir }, { logPrefix: `[${localPackage.name}] ` });
|
|
120
|
+
logger.info(`(${localPackage.name}) pushed tag (${tagName})`);
|
|
121
|
+
return commit;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async function pushMetarepo(dir: string) {
|
|
125
|
+
await cmd('git', ['add', '.'], { cwd: dir }, { logPrefix: `[workspace] ` });
|
|
126
|
+
await cmd('git', ['commit', '-m', `chore(version): bumping submodule versions [skip ci]`], { cwd: dir }, { logPrefix: `[workspace] ` });
|
|
127
|
+
await cmd('git', ['push'], { cwd: dir }, { logPrefix: `[workspace] ` });
|
|
128
|
+
logger.info(`(workspace) pushed metarepo (${dir})`);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
async function getLatestCommitSha(dir: string): Promise<string> {
|
|
132
|
+
return new Promise((resolve, reject) => {
|
|
133
|
+
exec('git rev-parse HEAD', { cwd: dir }, (error, stdout) => {
|
|
134
|
+
if (error) {
|
|
135
|
+
reject(error);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
resolve(stdout.trim());
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
type RepoInfo = {
|
|
144
|
+
owner: string;
|
|
145
|
+
repo: string;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
async function getRepoInfo(dir: string): Promise<RepoInfo> {
|
|
149
|
+
return new Promise((resolve, reject) => {
|
|
150
|
+
exec('git remote -v', { cwd: dir }, (error, stdout) => {
|
|
151
|
+
if (error) {
|
|
152
|
+
reject(error);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const lines = stdout.split('\n');
|
|
157
|
+
for (const line of lines) {
|
|
158
|
+
if (line.startsWith('origin')) {
|
|
159
|
+
const match = line.match(/github\.com[:\/](.+?)\/(.+?)\.git/);
|
|
160
|
+
if (match) {
|
|
161
|
+
const [_, owner, repo] = match;
|
|
162
|
+
resolve({ owner, repo });
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
reject(new Error('Origin remote not found or is not a GitHub repository'));
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
async function publish(localPackage: LocalPackage) {
|
|
174
|
+
if (localPackage.packageJson.private) {
|
|
175
|
+
logger.warn(`Preventing publish of private package: ${localPackage.name}`);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (!localPackage.name.startsWith('@proteinjs/')) {
|
|
180
|
+
logger.warn(`Preventing publish of non-proteinjs package: ${localPackage.name}`);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const packageDir = path.dirname(localPackage.filePath);
|
|
185
|
+
await cmd('npm', ['set', `//registry.npmjs.org/:_authToken=${getNpmToken()}`], { cwd: packageDir }, { logPrefix: `[${localPackage.name}] ` });
|
|
186
|
+
await cmd('npm', ['publish', '--tag', 'latest', '--access', 'public'], { cwd: packageDir }, { logPrefix: `[${localPackage.name}] ` });
|
|
187
|
+
logger.info(`(${localPackage.name}) published latest version (${localPackage.packageJson.version})`);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function getNpmToken() {
|
|
191
|
+
if (process.env.NPM_TOKEN)
|
|
192
|
+
return process.env.NPM_TOKEN;
|
|
193
|
+
|
|
194
|
+
throw new Error(`NPM_TOKEN env variable not set`);
|
|
195
|
+
}
|