@pipeline-builder/pipeline-manager 4.4.20 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +17 -5
- package/dist/commands/upgrade.d.ts +80 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +342 -0
- package/dist/utils/error-handler.js +5 -1
- package/dist/utils/request-context.d.ts.map +1 -1
- package/dist/utils/request-context.js +6 -1
- package/dist/utils/update-notice.d.ts +25 -0
- package/dist/utils/update-notice.d.ts.map +1 -0
- package/dist/utils/update-notice.js +100 -0
- package/package.json +4 -4
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
|
+
import { CLIENT_VERSION_HEADER } from '@pipeline-builder/api-core';
|
|
4
5
|
import { correlationHeaders, sanitizeCorrelationValue } from '@pipeline-builder/pipeline-core';
|
|
6
|
+
import { APP_VERSION } from '../config/cli.constants.js';
|
|
5
7
|
/**
|
|
6
8
|
* The audit-correlation headers every platform call from this CLI carries, so
|
|
7
9
|
* a server-side audit row joins back to the run that caused it.
|
|
@@ -19,6 +21,8 @@ import { correlationHeaders, sanitizeCorrelationValue } from '@pipeline-builder/
|
|
|
19
21
|
* plugin verify, security-report), once the command knows it
|
|
20
22
|
* ({@link setPipelineId}). The quota service's usage ledger records it, so
|
|
21
23
|
* "what spent our calls?" can answer "this pipeline's builds".
|
|
24
|
+
* - `X-Pb-Client-Version` — this CLI's version, so a platform with
|
|
25
|
+
* `PIPELINE_MANAGER_MIN_VERSION` set can answer 426 "run --upgrade".
|
|
22
26
|
*
|
|
23
27
|
* Never an ARN — nothing here can carry an AWS account id.
|
|
24
28
|
*/
|
|
@@ -52,6 +56,7 @@ export function requestCorrelationHeaders(env = process.env) {
|
|
|
52
56
|
const pipeline = sanitizeCorrelationValue(pipelineId);
|
|
53
57
|
if (pipeline)
|
|
54
58
|
headers[PIPELINE_ID_HEADER] = pipeline;
|
|
59
|
+
headers[CLIENT_VERSION_HEADER] = APP_VERSION;
|
|
55
60
|
return headers;
|
|
56
61
|
}
|
|
57
62
|
/** @internal Test-only: forget the invocation id. */
|
|
@@ -59,4 +64,4 @@ export function _resetInvocationIdForTests() {
|
|
|
59
64
|
invocationId = undefined;
|
|
60
65
|
pipelineId = undefined;
|
|
61
66
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1jb250ZXh0LmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVxdWVzdC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFekQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILElBQUksWUFBZ0MsQ0FBQztBQUNyQyxJQUFJLFVBQThCLENBQUM7QUFFbkMsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQztBQUVsRCxnR0FBZ0c7QUFDaEcsTUFBTSxVQUFVLGFBQWEsQ0FBQyxFQUFzQjtJQUNsRCxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxVQUFVLGVBQWUsQ0FBQyxFQUFVO0lBQ3hDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVELDBGQUEwRjtBQUMxRixNQUFNLFVBQVUsZUFBZTtJQUM3QixZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7SUFDOUIsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELDJGQUEyRjtBQUMzRixNQUFNLFVBQVUseUJBQXlCLENBQUMsR0FBRyxHQUFzQixPQUFPLENBQUMsR0FBRztJQUM1RSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUM7UUFDakMsU0FBUyxFQUFFLGVBQWUsRUFBRTtRQUM1QixnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNsRSxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN6RSxDQUFDLENBQUM7SUFDSCw2RUFBNkU7SUFDN0Usc0JBQXNCO0lBQ3RCLE1BQU0sUUFBUSxHQUFHLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUTtRQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUNyRCxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxXQUFXLENBQUM7SUFDN0MsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLFlBQVksR0FBRyxTQUFTLENBQUM7SUFDekIsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBDTElFTlRfVkVSU0lPTl9IRUFERVIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBjb3JyZWxhdGlvbkhlYWRlcnMsIHNhbml0aXplQ29ycmVsYXRpb25WYWx1ZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHsgQVBQX1ZFUlNJT04gfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5cbi8qKlxuICogVGhlIGF1ZGl0LWNvcnJlbGF0aW9uIGhlYWRlcnMgZXZlcnkgcGxhdGZvcm0gY2FsbCBmcm9tIHRoaXMgQ0xJIGNhcnJpZXMsIHNvXG4gKiBhIHNlcnZlci1zaWRlIGF1ZGl0IHJvdyBqb2lucyBiYWNrIHRvIHRoZSBydW4gdGhhdCBjYXVzZWQgaXQuXG4gKlxuICogLSBgWC1SZXF1ZXN0LUlkYCDigJQgdGhlIGNvbW1hbmQncyBleGVjdXRpb24gaWQgKHRoZSBgW0VYRS3igKZdYCBwcmludGVkIGluIHRoZVxuICogICBoZWFkZXIgYW5kIHRoZSBsb2NhbCBhdWRpdCBsb2cpLCBvciBhIHV1aWQgZm9yIHRoaXMgcHJvY2VzcyB3aGVuIG5vIGNvbW1hbmRcbiAqICAgaGVhZGVyIHdhcyBwcmludGVkLlxuICogLSBgWC1Db2RlQnVpbGQtQnVpbGQtSWRgIOKAlCBDT0RFQlVJTERfQlVJTERfSUQgKGA8cHJvamVjdD46PHV1aWQ+YCkgd2hlbiBydW5uaW5nXG4gKiAgIGluc2lkZSBDb2RlQnVpbGQuXG4gKiAtIGBYLVBpcGVsaW5lLUV4ZWN1dGlvbi1JZGAg4oCUIFBJUEVMSU5FX0VYRUNVVElPTl9JRCwgd2hpY2ggdGhlIHN5bnRoIGluamVjdHMgaW50b1xuICogICBldmVyeSBDb2RlQnVpbGQgc3RlcCBmcm9tIGAje2NvZGVwaXBlbGluZS5QaXBlbGluZUV4ZWN1dGlvbklkfWAuIFNlbnQgb25seVxuICogICB3aGVuIHNldDogQ09ERUJVSUxEX0lOSVRJQVRPUiAoYGNvZGVwaXBlbGluZS88bmFtZT5gKSBuYW1lcyB0aGUgcGlwZWxpbmUsIG5vdFxuICogICB0aGUgZXhlY3V0aW9uLCBzbyBub3RoaW5nIGlzIGRlcml2ZWQgZnJvbSBpdC5cbiAqIC0gYFgtUGlwZWxpbmUtSWRgIOKAlCB0aGUgcGxhdGZvcm0gcGlwZWxpbmUgYSBjb21tYW5kIHdvcmtzIG9uIChzeW50aCwgZGVwbG95LFxuICogICBwbHVnaW4gdmVyaWZ5LCBzZWN1cml0eS1yZXBvcnQpLCBvbmNlIHRoZSBjb21tYW5kIGtub3dzIGl0XG4gKiAgICh7QGxpbmsgc2V0UGlwZWxpbmVJZH0pLiBUaGUgcXVvdGEgc2VydmljZSdzIHVzYWdlIGxlZGdlciByZWNvcmRzIGl0LCBzb1xuICogICBcIndoYXQgc3BlbnQgb3VyIGNhbGxzP1wiIGNhbiBhbnN3ZXIgXCJ0aGlzIHBpcGVsaW5lJ3MgYnVpbGRzXCIuXG4gKiAtIGBYLVBiLUNsaWVudC1WZXJzaW9uYCDigJQgdGhpcyBDTEkncyB2ZXJzaW9uLCBzbyBhIHBsYXRmb3JtIHdpdGhcbiAqICAgYFBJUEVMSU5FX01BTkFHRVJfTUlOX1ZFUlNJT05gIHNldCBjYW4gYW5zd2VyIDQyNiBcInJ1biAtLXVwZ3JhZGVcIi5cbiAqXG4gKiBOZXZlciBhbiBBUk4g4oCUIG5vdGhpbmcgaGVyZSBjYW4gY2FycnkgYW4gQVdTIGFjY291bnQgaWQuXG4gKi9cblxubGV0IGludm9jYXRpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xubGV0IHBpcGVsaW5lSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuLyoqIFRoZSBoZWFkZXIgdGhlIHBsYXRmb3JtJ3MgcXVvdGEgYXR0cmlidXRpb24gcmVhZHMgdGhlIHBpcGVsaW5lIGZyb20uICovXG5leHBvcnQgY29uc3QgUElQRUxJTkVfSURfSEVBREVSID0gJ1gtUGlwZWxpbmUtSWQnO1xuXG4vKiogTmFtZSB0aGUgcGlwZWxpbmUgdGhpcyBpbnZvY2F0aW9uJ3MgcGxhdGZvcm0gY2FsbHMgYXJlIG1hZGUgZm9yICh1bnNldCB3aXRoIGB1bmRlZmluZWRgKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQaXBlbGluZUlkKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgcGlwZWxpbmVJZCA9IGlkO1xufVxuXG4vKiogQWRvcHQgdGhlIGNvbW1hbmQncyBleGVjdXRpb24gaWQgYXMgdGhpcyBpbnZvY2F0aW9uJ3MgcmVxdWVzdCBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnZvY2F0aW9uSWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICBpbnZvY2F0aW9uSWQgPSBpZDtcbn1cblxuLyoqIFRoaXMgaW52b2NhdGlvbidzIHJlcXVlc3QgaWQg4oCUIHRoZSBjb21tYW5kJ3MgZXhlY3V0aW9uIGlkLCBlbHNlIGEgcGVyLXByb2Nlc3MgdXVpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZvY2F0aW9uSWQoKTogc3RyaW5nIHtcbiAgaW52b2NhdGlvbklkID8/PSByYW5kb21VVUlEKCk7XG4gIHJldHVybiBpbnZvY2F0aW9uSWQ7XG59XG5cbi8qKiBUaGUgY29ycmVsYXRpb24gaGVhZGVycyBmb3IgdGhpcyBpbnZvY2F0aW9uICh2YWx1ZXMgc2FuaXRpemVkLCB1bmtub3duIGlkcyBvbWl0dGVkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0Q29ycmVsYXRpb25IZWFkZXJzKGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSBwcm9jZXNzLmVudik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBpbkNvZGVCdWlsZCA9IEJvb2xlYW4oZW52LkNPREVCVUlMRF9CVUlMRF9JRCk7XG4gIGNvbnN0IGhlYWRlcnMgPSBjb3JyZWxhdGlvbkhlYWRlcnMoe1xuICAgIHJlcXVlc3RJZDogZ2V0SW52b2NhdGlvbklkKCksXG4gICAgY29kZUJ1aWxkQnVpbGRJZDogaW5Db2RlQnVpbGQgPyBlbnYuQ09ERUJVSUxEX0JVSUxEX0lEIDogdW5kZWZpbmVkLFxuICAgIHBpcGVsaW5lRXhlY3V0aW9uSWQ6IGluQ29kZUJ1aWxkID8gZW52LlBJUEVMSU5FX0VYRUNVVElPTl9JRCA6IHVuZGVmaW5lZCxcbiAgfSk7XG4gIC8vIFNhbWUgc2FuaXRpemVyIGFzIHRoZSBvdGhlciBpZHM6IGEgdmFsdWUgdGhhdCBpc24ndCBhIHBsYWluIGlkIGlzIGRyb3BwZWQsXG4gIC8vIG5ldmVyIHNlbnQgbWFuZ2xlZC5cbiAgY29uc3QgcGlwZWxpbmUgPSBzYW5pdGl6ZUNvcnJlbGF0aW9uVmFsdWUocGlwZWxpbmVJZCk7XG4gIGlmIChwaXBlbGluZSkgaGVhZGVyc1tQSVBFTElORV9JRF9IRUFERVJdID0gcGlwZWxpbmU7XG4gIGhlYWRlcnNbQ0xJRU5UX1ZFUlNJT05fSEVBREVSXSA9IEFQUF9WRVJTSU9OO1xuICByZXR1cm4gaGVhZGVycztcbn1cblxuLyoqIEBpbnRlcm5hbCBUZXN0LW9ubHk6IGZvcmdldCB0aGUgaW52b2NhdGlvbiBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRJbnZvY2F0aW9uSWRGb3JUZXN0cygpOiB2b2lkIHtcbiAgaW52b2NhdGlvbklkID0gdW5kZWZpbmVkO1xuICBwaXBlbGluZUlkID0gdW5kZWZpbmVkO1xufVxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const NO_UPDATE_CHECK_ENV = "PIPELINE_MANAGER_NO_UPDATE_CHECK";
|
|
2
|
+
export declare const CHECK_INTERVAL_MS: number;
|
|
3
|
+
export interface UpdateCache {
|
|
4
|
+
checkedAt: number;
|
|
5
|
+
latest?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface NoticeContext {
|
|
8
|
+
argv: string[];
|
|
9
|
+
env: NodeJS.ProcessEnv;
|
|
10
|
+
isTTY: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** Whether the notice (and its background refresh) may run at all. */
|
|
13
|
+
export declare function updateCheckEnabled({ argv, env, isTTY }: NoticeContext): boolean;
|
|
14
|
+
/** The notice line for `current` given the cache, or null when there is nothing newer. */
|
|
15
|
+
export declare function noticeFor(current: string, cache: UpdateCache | null): string | null;
|
|
16
|
+
/** Whether the cache is due for a refresh at `now`. */
|
|
17
|
+
export declare function isStale(cache: UpdateCache | null, now: number): boolean;
|
|
18
|
+
export declare function readCache(file: string): UpdateCache | null;
|
|
19
|
+
export declare function defaultCacheFile(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Wire the notice for this process: read the cache now, refresh it in the
|
|
22
|
+
* background when stale, and print on exit when a newer release is known.
|
|
23
|
+
*/
|
|
24
|
+
export declare function scheduleUpdateNotice(ctx?: NoticeContext, file?: string, now?: number): void;
|
|
25
|
+
//# sourceMappingURL=update-notice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-notice.d.ts","sources":["../../src/utils/update-notice.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AACtE,eAAO,MAAM,iBAAiB,QAAsB,CAAC;AAGrD,MAAM,WAAW,WAAW;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAEnE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,aAAa,GAAG,OAAO,CAI/E;AAED,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAMnF;AAED,uDAAuD;AACvD,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAO1D;AAsBD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,aAAuG,EAC5G,IAAI,GAAE,MAA2B,EACjC,GAAG,GAAE,MAAmB,GACvB,IAAI,CAgBN"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* "A newer pipeline-manager is available" — printed to stderr when a command
|
|
5
|
+
* exits, from a cache refreshed at most once a day by a DETACHED background
|
|
6
|
+
* process, so no command ever waits on the registry.
|
|
7
|
+
*
|
|
8
|
+
* Silent when: `PIPELINE_MANAGER_NO_UPDATE_CHECK` is set, `CI` is set, stderr
|
|
9
|
+
* is not a terminal, `--quiet` / `--token` output is wanted, or the command is
|
|
10
|
+
* itself `--upgrade` / `--upgrade-check`. It never fails a command: every
|
|
11
|
+
* error here is swallowed.
|
|
12
|
+
*/
|
|
13
|
+
import { spawn } from 'node:child_process';
|
|
14
|
+
import { mkdirSync, readFileSync } from 'node:fs';
|
|
15
|
+
import { homedir } from 'node:os';
|
|
16
|
+
import { dirname, join } from 'node:path';
|
|
17
|
+
import { compareSemver, isSemver } from '@pipeline-builder/api-core';
|
|
18
|
+
import pico from 'picocolors';
|
|
19
|
+
import { APP_NAME, APP_VERSION } from '../config/cli.constants.js';
|
|
20
|
+
export const NO_UPDATE_CHECK_ENV = 'PIPELINE_MANAGER_NO_UPDATE_CHECK';
|
|
21
|
+
export const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
22
|
+
const PACKAGE_NAME = '@pipeline-builder/pipeline-manager';
|
|
23
|
+
/** Whether the notice (and its background refresh) may run at all. */
|
|
24
|
+
export function updateCheckEnabled({ argv, env, isTTY }) {
|
|
25
|
+
if (env[NO_UPDATE_CHECK_ENV] || env.CI || env.NODE_ENV === 'test')
|
|
26
|
+
return false;
|
|
27
|
+
if (!isTTY)
|
|
28
|
+
return false;
|
|
29
|
+
return !argv.some((a) => a === '--quiet' || a === '--token' || a === '--upgrade' || a === '--upgrade-check');
|
|
30
|
+
}
|
|
31
|
+
/** The notice line for `current` given the cache, or null when there is nothing newer. */
|
|
32
|
+
export function noticeFor(current, cache) {
|
|
33
|
+
const latest = cache?.latest;
|
|
34
|
+
if (!latest || !isSemver(latest) || !isSemver(current))
|
|
35
|
+
return null;
|
|
36
|
+
if (compareSemver(latest, current) <= 0)
|
|
37
|
+
return null;
|
|
38
|
+
return `${pico.yellow('Update available')} ${current} → ${pico.green(latest)}: run ${pico.cyan(`${APP_NAME} --upgrade`)}`
|
|
39
|
+
+ pico.dim(` (silence with ${NO_UPDATE_CHECK_ENV}=1)`);
|
|
40
|
+
}
|
|
41
|
+
/** Whether the cache is due for a refresh at `now`. */
|
|
42
|
+
export function isStale(cache, now) {
|
|
43
|
+
return !cache || !Number.isFinite(cache.checkedAt) || now - cache.checkedAt >= CHECK_INTERVAL_MS || cache.checkedAt > now;
|
|
44
|
+
}
|
|
45
|
+
export function readCache(file) {
|
|
46
|
+
try {
|
|
47
|
+
const parsed = JSON.parse(readFileSync(file, 'utf8'));
|
|
48
|
+
return typeof parsed.checkedAt === 'number' ? parsed : null;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The detached refresher: asks the registry for `latest` and writes the cache.
|
|
56
|
+
* It stamps `checkedAt` even when the lookup fails, so an offline machine
|
|
57
|
+
* retries tomorrow rather than on every command.
|
|
58
|
+
*/
|
|
59
|
+
const REFRESH_SCRIPT = `
|
|
60
|
+
const { execFileSync } = require('node:child_process');
|
|
61
|
+
const { writeFileSync, renameSync } = require('node:fs');
|
|
62
|
+
const [file, pkg] = process.argv.slice(1);
|
|
63
|
+
let latest;
|
|
64
|
+
try {
|
|
65
|
+
const out = execFileSync('npm', ['view', pkg + '@latest', 'version', '--json'], { encoding: 'utf8', timeout: 20000, stdio: ['ignore', 'pipe', 'ignore'], shell: process.platform === 'win32' });
|
|
66
|
+
const v = JSON.parse(out);
|
|
67
|
+
if (typeof v === 'string') latest = v;
|
|
68
|
+
} catch {}
|
|
69
|
+
const tmp = file + '.' + process.pid;
|
|
70
|
+
writeFileSync(tmp, JSON.stringify({ checkedAt: Date.now(), latest }));
|
|
71
|
+
renameSync(tmp, file);
|
|
72
|
+
`;
|
|
73
|
+
export function defaultCacheFile() {
|
|
74
|
+
return join(homedir(), '.pipeline-manager', 'update-check.json');
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Wire the notice for this process: read the cache now, refresh it in the
|
|
78
|
+
* background when stale, and print on exit when a newer release is known.
|
|
79
|
+
*/
|
|
80
|
+
export function scheduleUpdateNotice(ctx = { argv: process.argv.slice(2), env: process.env, isTTY: Boolean(process.stderr.isTTY) }, file = defaultCacheFile(), now = Date.now()) {
|
|
81
|
+
try {
|
|
82
|
+
if (!updateCheckEnabled(ctx))
|
|
83
|
+
return;
|
|
84
|
+
const cache = readCache(file);
|
|
85
|
+
if (isStale(cache, now)) {
|
|
86
|
+
// ~/.pipeline-manager is also the CREDENTIAL store (credential-store.ts
|
|
87
|
+
// makes it 0700, but only when creating it) — if this runs first it must
|
|
88
|
+
// not leave that directory world-readable.
|
|
89
|
+
mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
|
|
90
|
+
spawn(process.execPath, ['-e', REFRESH_SCRIPT, file, PACKAGE_NAME], { detached: true, stdio: 'ignore', windowsHide: true }).unref();
|
|
91
|
+
}
|
|
92
|
+
const line = noticeFor(APP_VERSION, cache);
|
|
93
|
+
if (line)
|
|
94
|
+
process.once('exit', () => { process.stderr.write(`\n${line}\n`); });
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Never let the update notice break a command.
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLW5vdGljZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3VwZGF0ZS1ub3RpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGtDQUFrQyxDQUFDO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLFlBQVksR0FBRyxvQ0FBb0MsQ0FBQztBQVUxRCxzRUFBc0U7QUFDdEUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQWlCO0lBQ3BFLElBQUksR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNoRixJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVB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QUFPLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEksQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxJQUFJO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLCtDQUErQztJQUNqRCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFwiQSBuZXdlciBwaXBlbGluZS1tYW5hZ2VyIGlzIGF2YWlsYWJsZVwiIOKAlCBwcmludGVkIHRvIHN0ZGVyciB3aGVuIGEgY29tbWFuZFxuICogZXhpdHMsIGZyb20gYSBjYWNoZSByZWZyZXNoZWQgYXQgbW9zdCBvbmNlIGEgZGF5IGJ5IGEgREVUQUNIRUQgYmFja2dyb3VuZFxuICogcHJvY2Vzcywgc28gbm8gY29tbWFuZCBldmVyIHdhaXRzIG9uIHRoZSByZWdpc3RyeS5cbiAqXG4gKiBTaWxlbnQgd2hlbjogYFBJUEVMSU5FX01BTkFHRVJfTk9fVVBEQVRFX0NIRUNLYCBpcyBzZXQsIGBDSWAgaXMgc2V0LCBzdGRlcnJcbiAqIGlzIG5vdCBhIHRlcm1pbmFsLCBgLS1xdWlldGAgLyBgLS10b2tlbmAgb3V0cHV0IGlzIHdhbnRlZCwgb3IgdGhlIGNvbW1hbmQgaXNcbiAqIGl0c2VsZiBgLS11cGdyYWRlYCAvIGAtLXVwZ3JhZGUtY2hlY2tgLiBJdCBuZXZlciBmYWlscyBhIGNvbW1hbmQ6IGV2ZXJ5XG4gKiBlcnJvciBoZXJlIGlzIHN3YWxsb3dlZC5cbiAqL1xuXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBjb21wYXJlU2VtdmVyLCBpc1NlbXZlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgQVBQX05BTUUsIEFQUF9WRVJTSU9OIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuXG5leHBvcnQgY29uc3QgTk9fVVBEQVRFX0NIRUNLX0VOViA9ICdQSVBFTElORV9NQU5BR0VSX05PX1VQREFURV9DSEVDSyc7XG5leHBvcnQgY29uc3QgQ0hFQ0tfSU5URVJWQUxfTVMgPSAyNCAqIDYwICogNjAgKiAxMDAwO1xuY29uc3QgUEFDS0FHRV9OQU1FID0gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLW1hbmFnZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUNhY2hlIHsgY2hlY2tlZEF0OiBudW1iZXI7IGxhdGVzdD86IHN0cmluZyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlQ29udGV4dCB7XG4gIGFyZ3Y6IHN0cmluZ1tdO1xuICBlbnY6IE5vZGVKUy5Qcm9jZXNzRW52O1xuICBpc1RUWTogYm9vbGVhbjtcbn1cblxuLyoqIFdoZXRoZXIgdGhlIG5vdGljZSAoYW5kIGl0cyBiYWNrZ3JvdW5kIHJlZnJlc2gpIG1heSBydW4gYXQgYWxsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUNoZWNrRW5hYmxlZCh7IGFyZ3YsIGVudiwgaXNUVFkgfTogTm90aWNlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAoZW52W05PX1VQREFURV9DSEVDS19FTlZdIHx8IGVudi5DSSB8fCBlbnYuTk9ERV9FTlYgPT09ICd0ZXN0JykgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzVFRZKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAhYXJndi5zb21lKChhKSA9PiBhID09PSAnLS1xdWlldCcgfHwgYSA9PT0gJy0tdG9rZW4nIHx8IGEgPT09ICctLXVwZ3JhZGUnIHx8IGEgPT09ICctLXVwZ3JhZGUtY2hlY2snKTtcbn1cblxuLyoqIFRoZSBub3RpY2UgbGluZSBmb3IgYGN1cnJlbnRgIGdpdmVuIHRoZSBjYWNoZSwgb3IgbnVsbCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgbmV3ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gbm90aWNlRm9yKGN1cnJlbnQ6IHN0cmluZywgY2FjaGU6IFVwZGF0ZUNhY2hlIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBsYXRlc3QgPSBjYWNoZT8ubGF0ZXN0O1xuICBpZiAoIWxhdGVzdCB8fCAhaXNTZW12ZXIobGF0ZXN0KSB8fCAhaXNTZW12ZXIoY3VycmVudCkpIHJldHVybiBudWxsO1xuICBpZiAoY29tcGFyZVNlbXZlcihsYXRlc3QsIGN1cnJlbnQpIDw9IDApIHJldHVybiBudWxsO1xuICByZXR1cm4gYCR7cGljby55ZWxsb3coJ1VwZGF0ZSBhdmFpbGFibGUnKX0gJHtjdXJyZW50fSDihpIgJHtwaWNvLmdyZWVuKGxhdGVzdCl9OiBydW4gJHtwaWNvLmN5YW4oYCR7QVBQX05BTUV9IC0tdXBncmFkZWApfWBcbiAgICArIHBpY28uZGltKGAgKHNpbGVuY2Ugd2l0aCAke05PX1VQREFURV9DSEVDS19FTlZ9PTEpYCk7XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBjYWNoZSBpcyBkdWUgZm9yIGEgcmVmcmVzaCBhdCBgbm93YC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YWxlKGNhY2hlOiBVcGRhdGVDYWNoZSB8IG51bGwsIG5vdzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAhY2FjaGUgfHwgIU51bWJlci5pc0Zpbml0ZShjYWNoZS5jaGVja2VkQXQpIHx8IG5vdyAtIGNhY2hlLmNoZWNrZWRBdCA+PSBDSEVDS19JTlRFUlZBTF9NUyB8fCBjYWNoZS5jaGVja2VkQXQgPiBub3c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ2FjaGUoZmlsZTogc3RyaW5nKTogVXBkYXRlQ2FjaGUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhmaWxlLCAndXRmOCcpKSBhcyBVcGRhdGVDYWNoZTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZC5jaGVja2VkQXQgPT09ICdudW1iZXInID8gcGFyc2VkIDogbnVsbDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgZGV0YWNoZWQgcmVmcmVzaGVyOiBhc2tzIHRoZSByZWdpc3RyeSBmb3IgYGxhdGVzdGAgYW5kIHdyaXRlcyB0aGUgY2FjaGUuXG4gKiBJdCBzdGFtcHMgYGNoZWNrZWRBdGAgZXZlbiB3aGVuIHRoZSBsb29rdXAgZmFpbHMsIHNvIGFuIG9mZmxpbmUgbWFjaGluZVxuICogcmV0cmllcyB0b21vcnJvdyByYXRoZXIgdGhhbiBvbiBldmVyeSBjb21tYW5kLlxuICovXG5jb25zdCBSRUZSRVNIX1NDUklQVCA9IGBcbmNvbnN0IHsgZXhlY0ZpbGVTeW5jIH0gPSByZXF1aXJlKCdub2RlOmNoaWxkX3Byb2Nlc3MnKTtcbmNvbnN0IHsgd3JpdGVGaWxlU3luYywgcmVuYW1lU3luYyB9ID0gcmVxdWlyZSgnbm9kZTpmcycpO1xuY29uc3QgW2ZpbGUsIHBrZ10gPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMSk7XG5sZXQgbGF0ZXN0O1xudHJ5IHtcbiAgY29uc3Qgb3V0ID0gZXhlY0ZpbGVTeW5jKCducG0nLCBbJ3ZpZXcnLCBwa2cgKyAnQGxhdGVzdCcsICd2ZXJzaW9uJywgJy0tanNvbiddLCB7IGVuY29kaW5nOiAndXRmOCcsIHRpbWVvdXQ6IDIwMDAwLCBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdpZ25vcmUnXSwgc2hlbGw6IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgfSk7XG4gIGNvbnN0IHYgPSBKU09OLnBhcnNlKG91dCk7XG4gIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGxhdGVzdCA9IHY7XG59IGNhdGNoIHt9XG5jb25zdCB0bXAgPSBmaWxlICsgJy4nICsgcHJvY2Vzcy5waWQ7XG53cml0ZUZpbGVTeW5jKHRtcCwgSlNPTi5zdHJpbmdpZnkoeyBjaGVja2VkQXQ6IERhdGUubm93KCksIGxhdGVzdCB9KSk7XG5yZW5hbWVTeW5jKHRtcCwgZmlsZSk7XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdENhY2hlRmlsZSgpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lZGlyKCksICcucGlwZWxpbmUtbWFuYWdlcicsICd1cGRhdGUtY2hlY2suanNvbicpO1xufVxuXG4vKipcbiAqIFdpcmUgdGhlIG5vdGljZSBmb3IgdGhpcyBwcm9jZXNzOiByZWFkIHRoZSBjYWNoZSBub3csIHJlZnJlc2ggaXQgaW4gdGhlXG4gKiBiYWNrZ3JvdW5kIHdoZW4gc3RhbGUsIGFuZCBwcmludCBvbiBleGl0IHdoZW4gYSBuZXdlciByZWxlYXNlIGlzIGtub3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVOb3RpY2UoXG4gIGN0eDogTm90aWNlQ29udGV4dCA9IHsgYXJndjogcHJvY2Vzcy5hcmd2LnNsaWNlKDIpLCBlbnY6IHByb2Nlc3MuZW52LCBpc1RUWTogQm9vbGVhbihwcm9jZXNzLnN0ZGVyci5pc1RUWSkgfSxcbiAgZmlsZTogc3RyaW5nID0gZGVmYXVsdENhY2hlRmlsZSgpLFxuICBub3c6IG51bWJlciA9IERhdGUubm93KCksXG4pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBpZiAoIXVwZGF0ZUNoZWNrRW5hYmxlZChjdHgpKSByZXR1cm47XG4gICAgY29uc3QgY2FjaGUgPSByZWFkQ2FjaGUoZmlsZSk7XG4gICAgaWYgKGlzU3RhbGUoY2FjaGUsIG5vdykpIHtcbiAgICAgIC8vIH4vLnBpcGVsaW5lLW1hbmFnZXIgaXMgYWxzbyB0aGUgQ1JFREVOVElBTCBzdG9yZSAoY3JlZGVudGlhbC1zdG9yZS50c1xuICAgICAgLy8gbWFrZXMgaXQgMDcwMCwgYnV0IG9ubHkgd2hlbiBjcmVhdGluZyBpdCkg4oCUIGlmIHRoaXMgcnVucyBmaXJzdCBpdCBtdXN0XG4gICAgICAvLyBub3QgbGVhdmUgdGhhdCBkaXJlY3Rvcnkgd29ybGQtcmVhZGFibGUuXG4gICAgICBta2RpclN5bmMoZGlybmFtZShmaWxlKSwgeyByZWN1cnNpdmU6IHRydWUsIG1vZGU6IDBvNzAwIH0pO1xuICAgICAgc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgWyctZScsIFJFRlJFU0hfU0NSSVBULCBmaWxlLCBQQUNLQUdFX05BTUVdLCB7IGRldGFjaGVkOiB0cnVlLCBzdGRpbzogJ2lnbm9yZScsIHdpbmRvd3NIaWRlOiB0cnVlIH0pLnVucmVmKCk7XG4gICAgfVxuICAgIGNvbnN0IGxpbmUgPSBub3RpY2VGb3IoQVBQX1ZFUlNJT04sIGNhY2hlKTtcbiAgICBpZiAobGluZSkgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4geyBwcm9jZXNzLnN0ZGVyci53cml0ZShgXFxuJHtsaW5lfVxcbmApOyB9KTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gTmV2ZXIgbGV0IHRoZSB1cGRhdGUgbm90aWNlIGJyZWFrIGEgY29tbWFuZC5cbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"@aws-sdk/client-secrets-manager": "3.1160.0",
|
|
34
34
|
"@aws-sdk/client-sqs": "3.1160.0",
|
|
35
35
|
"@aws-sdk/client-sts": "3.1160.0",
|
|
36
|
-
"@pipeline-builder/ai-core": "4.3.
|
|
37
|
-
"@pipeline-builder/api-core": "5.2.
|
|
38
|
-
"@pipeline-builder/pipeline-core": "4.4.
|
|
36
|
+
"@pipeline-builder/ai-core": "4.3.8",
|
|
37
|
+
"@pipeline-builder/api-core": "5.2.8",
|
|
38
|
+
"@pipeline-builder/pipeline-core": "4.4.9",
|
|
39
39
|
"aws-cdk-lib": "2.275.0",
|
|
40
40
|
"axios": "1.21.1",
|
|
41
41
|
"commander": "15.1.0",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"registry": "https://registry.npmjs.org/",
|
|
107
107
|
"provenance": true
|
|
108
108
|
},
|
|
109
|
-
"version": "4.
|
|
109
|
+
"version": "4.5.0",
|
|
110
110
|
"bugs": {
|
|
111
111
|
"url": "https://github.com/mwashburn160/pipeline-builder/issues"
|
|
112
112
|
},
|