@proteinjs/build 1.0.16 → 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 CHANGED
@@ -3,6 +3,14 @@
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
+
6
14
  ## [1.0.16](https://github.com/proteinjs/build/compare/@proteinjs/build@1.0.15...@proteinjs/build@1.0.16) (2024-04-19)
7
15
 
8
16
  **Note:** Version bump only for package @proteinjs/build
@@ -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) && packageName != 'typescript-parser'; });
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,IAAI,WAAW,IAAI,mBAAmB,CAAA,EAAA,CAAC,CAAC;gBAElK,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"}
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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=runVersionWorkspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runVersionWorkspace.d.ts","sourceRoot":"","sources":["../../src/runVersionWorkspace.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ var versionWorkspace_1 = require("./versionWorkspace");
5
+ (0, versionWorkspace_1.versionWorkspace)();
6
+ //# sourceMappingURL=runVersionWorkspace.js.map
@@ -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) && packageName != 'typescript-parser'; });
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,IAAI,WAAW,IAAI,mBAAmB,CAAA,EAAA,CAAC,CAAC;gBAEjK,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"}
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,2 @@
1
+ export declare function versionWorkspace(): Promise<void>;
2
+ //# sourceMappingURL=versionWorkspace.d.ts.map
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA4B;AAC5B,+CAAoC;AACpC,kDAA0F;AAC1F,wCAAwC;AAGxC,IAAM,MAAM,GAAG,IAAI,aAAM,CAAC,mBAAmB,CAAC,CAAC;AAE/C,SAAsB,gBAAgB;;;;;;oBAC9B,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;oBACqB,qBAAM,uBAAW,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAA;;oBAAxG,KAAmD,SAAqD,EAAtG,UAAU,gBAAA,EAAE,YAAY,kBAAA,EAAE,kBAAkB,wBAAA;oBAC9C,oBAAoB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAA,WAAW;;wBAChE,IAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;wBAC7C,OAAO,CAAC,CAAC,CAAA,MAAA,YAAY,CAAC,WAAW,CAAC,OAAO,0CAAE,KAAK,CAAA;+BAC3C,CAAC,CAAC,CAAA,MAAA,YAAY,CAAC,WAAW,CAAC,OAAO,0CAAE,KAAK,CAAA;+BACzC,WAAW,IAAI,mBAAmB;+BAClC,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CACrC;oBACH,CAAC,CAAC,CAAC;oBAEH,MAAM,CAAC,IAAI,CAAC,kCAA2B,aAAa,MAAG,CAAC,CAAC;0BACb,EAApB,6CAAoB;;;yBAApB,CAAA,kCAAoB,CAAA;oBAAnC,WAAW;oBACZ,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;oBACjB,qBAAM,gBAAgB,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,EAAA;;oBAApF,mBAAmB,GAAG,SAA8D;oBAC1F,IAAI,CAAC,mBAAmB;wBACtB,wBAAS;oBAEX,qBAAM,KAAK,CAAC,YAAY,CAAC,EAAA;;oBAAzB,SAAyB,CAAC;oBAC1B,qBAAM,WAAW,CAAC,YAAY,CAAC,EAAA;;oBAA/B,SAA+B,CAAC;oBAChC,qBAAM,OAAO,CAAC,YAAY,CAAC,EAAA;;oBAA3B,SAA2B,CAAC;;;oBARN,IAAoB,CAAA;;wBAW5C,qBAAM,YAAY,CAAC,aAAa,CAAC,EAAA;;oBAAjC,SAAiC,CAAC;oBAClC,MAAM,CAAC,IAAI,CAAC,2CAAoC,aAAa,MAAG,CAAC,CAAC;;;;;CACnE;AA1BD,4CA0BC;AAED,SAAe,gBAAgB,CAAC,YAA0B,EAAE,UAA2B,EAAE,YAAiB;;;;;;oBAClG,iBAAiB,GAAG,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACrE,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,IAAI,CAAC;wBACrD,sBAAO,KAAK,EAAC;oBAEX,mBAAmB,GAAG,KAAK,CAAC;oBAChC,WAA6C,EAAjB,uCAAiB,EAAjB,+BAAiB,EAAjB,IAAiB,EAAE;wBAAtC,eAAe;wBAChB,sBAAsB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;wBACrD,sBAAsB,GAAG,sBAAsB,CAAC,WAAW,CAAC,OAAiB,CAAC;wBAC9E,wBAAwB,GAAG,oBAAoB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;wBACrF,IAAI,CAAC,wBAAwB;4BAC3B,MAAM,IAAI,KAAK,CAAC,mBAAY,YAAY,CAAC,IAAI,iCAAuB,eAAe,0CAAgC,YAAY,CAAC,IAAI,oBAAiB,CAAC,CAAC;wBAEzJ,IAAI,CAAA,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CAAE,OAAO,KAAI,sBAAsB;4BAC7D,SAAS;wBAEL,oBAAoB,GAAsB,EAAE,MAAM,EAAE,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;wBAC7H,oBAAoB,CAAC,eAAe,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAC;wBACpG,mBAAmB,GAAG,IAAI,CAAC;qBAC5B;yBAEG,mBAAmB,EAAnB,wBAAmB;oBACf,gBAAgB,GAAG,UAAC,OAAe,IAAK,OAAA,OAAO,CAAC,OAAO,CAAC,sBAAsB,EAAE,UAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,IAAK,OAAA,UAAG,KAAK,cAAI,KAAK,cAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAE,EAA9C,CAA8C,CAAC,EAAnH,CAAmH,CAAC;oBAC5J,cAAc,GAAG,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC;oBACxD,YAAY,CAAC,WAAW,CAAC,OAAO,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;oBACpE,MAAM,CAAC,IAAI,CAAC,WAAI,YAAY,CAAC,IAAI,oCAA0B,cAAc,iBAAO,YAAY,CAAC,WAAW,CAAC,OAAO,CAAE,CAAC,CAAC;oBACpH,qBAAM,cAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,EAAA;;oBAAzF,SAAyF,CAAC;;wBAG5F,sBAAO,mBAAmB,EAAC;;;;CAC5B;AAID,SAAS,oBAAoB,CAAC,qBAA6B,EAAE,YAA0B;IACrF,IAAI,2BAA2B,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnJ,IAAI,CAAC,2BAA2B;QAC9B,2BAA2B,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpJ,IAAI,CAAC,2BAA2B;QAC9B,OAAO,SAAS,CAAC;IAEnB,IAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC3E,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,oBAAoB,CAAC,qBAA6B,EAAE,cAAiC,EAAE,UAA6B,EAAE,YAA0B;IACvJ,IAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;IACtG,IAAI,YAAY,CAAC,WAAW,CAAC,YAAY,IAAI,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,CAAC;QACvG,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,aAAa,CAAC;;QAE7E,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,qBAAqB,CAAC,GAAG,aAAa,CAAC;IAElF,IAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;IAC1H,MAAM,CAAC,IAAI,CAAC,WAAI,YAAY,CAAC,IAAI,8CAAoC,qBAAqB,eAAK,iBAAiB,iBAAO,aAAa,MAAG,CAAC,CAAC;AAC3I,CAAC;AAED,SAAe,KAAK,CAAC,YAA0B;;;;;;;oBACvC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBACvD,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAI,YAAY,CAAC,IAAI,OAAI,EAAE,CAAC,EAAA;;oBAAjG,SAAiG,CAAC;oBAClG,MAAM,CAAC,IAAI,CAAC,WAAI,YAAY,CAAC,IAAI,cAAW,CAAC,CAAC;oBAC9C,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAI,YAAY,CAAC,IAAI,OAAI,EAAE,CAAC,EAAA;;oBAA5F,SAA4F,CAAC;oBAC7F,MAAM,CAAC,IAAI,CAAC,WAAI,YAAY,CAAC,IAAI,qDAA2C,UAAU,MAAG,CAAC,CAAC;oBAC3F,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAI,YAAY,CAAC,IAAI,OAAI,EAAE,CAAC,EAAA;;oBAAjG,SAAiG,CAAC;oBAClG,MAAM,CAAC,IAAI,CAAC,WAAI,YAAY,CAAC,IAAI,6BAAmB,YAAY,CAAC,WAAW,CAAC,OAAO,eAAK,UAAU,MAAG,CAAC,CAAC;yBACpG,CAAA,MAAA,YAAY,CAAC,WAAW,CAAC,OAAO,0CAAE,IAAI,CAAA,EAAtC,wBAAsC;oBACxC,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAI,YAAY,CAAC,IAAI,OAAI,EAAE,CAAC,EAAA;;oBAAhG,SAAgG,CAAC;oBACjG,MAAM,CAAC,IAAI,CAAC,WAAI,YAAY,CAAC,IAAI,8BAAoB,YAAY,CAAC,WAAW,CAAC,OAAO,eAAK,UAAU,MAAG,CAAC,CAAC;;;;;;CAE5G;AAED,SAAe,WAAW,CAAC,YAA0B;;;;;;oBAC7C,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBACvD,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAI,YAAY,CAAC,IAAI,OAAI,EAAE,CAAC,EAAA;;oBAA7F,SAA6F,CAAC;oBAC9F,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,uDAAuD,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAI,YAAY,CAAC,IAAI,OAAI,EAAE,CAAC,EAAA;;oBAA1J,SAA0J,CAAC;oBAC3J,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAI,YAAY,CAAC,IAAI,OAAI,EAAE,CAAC,EAAA;;oBAAzF,SAAyF,CAAC;oBAC1F,MAAM,CAAC,IAAI,CAAC,WAAI,YAAY,CAAC,IAAI,sCAA4B,YAAY,CAAC,WAAW,CAAC,OAAO,MAAG,CAAC,CAAC;oBAC1E,qBAAM,kBAAkB,CAAC,UAAU,CAAC,EAAA;;oBAAtD,eAAe,GAAG,SAAoC;oBAC3C,qBAAM,WAAW,CAAC,UAAU,CAAC,EAAA;;oBAAxC,QAAQ,GAAG,SAA6B;oBACxC,MAAM,cAAK,GAAG,EAAE,eAAe,IAAK,QAAQ,CAAE,CAAC;oBAC/C,OAAO,GAAG,UAAG,YAAY,CAAC,IAAI,cAAI,YAAY,CAAC,WAAW,CAAC,OAAO,CAAE,CAAC;oBAC3E,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAW,OAAO,CAAE,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAI,YAAY,CAAC,IAAI,OAAI,EAAE,CAAC,EAAA;;oBAAnI,SAAmI,CAAC;oBACpI,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAI,YAAY,CAAC,IAAI,OAAI,EAAE,CAAC,EAAA;;oBAA5G,SAA4G,CAAC;oBAC7G,MAAM,CAAC,IAAI,CAAC,WAAI,YAAY,CAAC,IAAI,2BAAiB,OAAO,MAAG,CAAC,CAAC;oBAC9D,sBAAO,MAAM,EAAC;;;;CACf;AAED,SAAe,YAAY,CAAC,GAAW;;;;wBACrC,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,EAAA;;oBAA3E,SAA2E,CAAC;oBAC5E,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,sDAAsD,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,EAAA;;oBAAvI,SAAuI,CAAC;oBACxI,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,EAAA;;oBAAvE,SAAuE,CAAC;oBACxE,MAAM,CAAC,IAAI,CAAC,uCAAgC,GAAG,MAAG,CAAC,CAAC;;;;;CACrD;AAED,SAAe,kBAAkB,CAAC,GAAW;;;YAC3C,sBAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;oBACjC,IAAA,oBAAI,EAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAC,KAAK,EAAE,MAAM;wBACrD,IAAI,KAAK,EAAE;4BACT,MAAM,CAAC,KAAK,CAAC,CAAC;4BACd,OAAO;yBACR;wBACD,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;oBACzB,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,EAAC;;;CACJ;AAAA,CAAC;AAOF,SAAe,WAAW,CAAC,GAAW;;;YACpC,sBAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;oBACjC,IAAA,oBAAI,EAAC,eAAe,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAC,KAAK,EAAE,MAAM;wBAChD,IAAI,KAAK,EAAE;4BACT,MAAM,CAAC,KAAK,CAAC,CAAC;4BACd,OAAO;yBACR;wBAED,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACjC,KAAmB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;4BAArB,IAAM,IAAI,cAAA;4BACb,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gCAC7B,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;gCAC9D,IAAI,KAAK,EAAE;oCACF,IAAA,CAAC,GAAiB,KAAK,GAAtB,EAAE,KAAK,GAAU,KAAK,GAAf,EAAE,IAAI,GAAI,KAAK,GAAT,CAAU;oCAC/B,OAAO,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC;oCACzB,OAAO;iCACR;6BACF;yBACF;wBAED,MAAM,CAAC,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC;oBAC7E,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,EAAC;;;CACJ;AAAA,CAAC;AAEF,SAAe,OAAO,CAAC,YAA0B;;;;;;oBAC/C,IAAI,YAAY,CAAC,WAAW,CAAC,OAAO,EAAE;wBACpC,MAAM,CAAC,IAAI,CAAC,iDAA0C,YAAY,CAAC,IAAI,CAAE,CAAC,CAAC;wBAC3E,sBAAO;qBACR;oBAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;wBAChD,MAAM,CAAC,IAAI,CAAC,uDAAgD,YAAY,CAAC,IAAI,CAAE,CAAC,CAAC;wBACjF,sBAAO;qBACR;oBAEK,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBACvD,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,2CAAoC,WAAW,EAAE,CAAE,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAI,YAAY,CAAC,IAAI,OAAI,EAAE,CAAC,EAAA;;oBAA7I,SAA6I,CAAC;oBAC9I,qBAAM,IAAA,eAAG,EAAC,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAI,YAAY,CAAC,IAAI,OAAI,EAAE,CAAC,EAAA;;oBAArI,SAAqI,CAAC;oBACtI,MAAM,CAAC,IAAI,CAAC,WAAI,YAAY,CAAC,IAAI,yCAA+B,YAAY,CAAC,WAAW,CAAC,OAAO,MAAG,CAAC,CAAC;;;;;CACtG;AAED,SAAS,WAAW;IAClB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;QACvB,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAE/B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACpD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proteinjs/build",
3
- "version": "1.0.16",
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,6 +32,7 @@
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
37
  "@proteinjs/util-node": "1.0.22"
36
38
  },
@@ -46,5 +48,5 @@
46
48
  "webpack": "5.90.0",
47
49
  "webpack-cli": "5.1.4"
48
50
  },
49
- "gitHead": "10de34aa64b4886c2ab6ea68662f44d1fcf18c31"
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
+ }
@@ -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 && packageName != 'typescript-parser');
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) {
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { versionWorkspace } from './versionWorkspace'
4
+
5
+ versionWorkspace();
@@ -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 && packageName != 'typescript-parser');
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
+ }