@camunda8/cli 2.6.0-alpha.5 → 2.6.0-alpha.9
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/EXAMPLES.md +46 -0
- package/dist/client.d.ts +8 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +5 -6
- package/dist/client.js.map +1 -1
- package/dist/commands/completion.js +1 -1
- package/dist/commands/deployments.d.ts.map +1 -1
- package/dist/commands/deployments.js +2 -1
- package/dist/commands/deployments.js.map +1 -1
- package/dist/commands/process-instances.d.ts +2 -1
- package/dist/commands/process-instances.d.ts.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +2 -1
- package/dist/commands/run.js.map +1 -1
- package/dist/default-plugins/cluster/README.md +38 -2
- package/dist/default-plugins/cluster/c8ctl-plugin.js +637 -35
- package/package.json +6 -6
package/EXAMPLES.md
CHANGED
|
@@ -831,6 +831,9 @@ c8 cluster start
|
|
|
831
831
|
# Start a specific version
|
|
832
832
|
c8 cluster start 8.9.0-alpha5
|
|
833
833
|
|
|
834
|
+
# Start the latest cached release for a major.minor version
|
|
835
|
+
c8 cluster start 8.8
|
|
836
|
+
|
|
834
837
|
# Start with debug output (streams raw c8run logs)
|
|
835
838
|
c8 cluster start --debug
|
|
836
839
|
```
|
|
@@ -841,6 +844,49 @@ c8 cluster start --debug
|
|
|
841
844
|
c8 cluster stop
|
|
842
845
|
```
|
|
843
846
|
|
|
847
|
+
### Cluster Status
|
|
848
|
+
|
|
849
|
+
```bash
|
|
850
|
+
# Check if a cluster is running and see connection details
|
|
851
|
+
c8 cluster status
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
### Stream Logs
|
|
855
|
+
|
|
856
|
+
```bash
|
|
857
|
+
# Stream log output from the running cluster (Ctrl+C to stop)
|
|
858
|
+
c8 cluster logs
|
|
859
|
+
```
|
|
860
|
+
|
|
861
|
+
### List Installed Versions
|
|
862
|
+
|
|
863
|
+
```bash
|
|
864
|
+
# Show locally cached versions and version aliases
|
|
865
|
+
c8 cluster list
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
### List Available Remote Versions
|
|
869
|
+
|
|
870
|
+
```bash
|
|
871
|
+
# Query the Camunda Download Center for all available versions
|
|
872
|
+
c8 cluster list-remote
|
|
873
|
+
```
|
|
874
|
+
|
|
875
|
+
### Install a Version Without Starting
|
|
876
|
+
|
|
877
|
+
```bash
|
|
878
|
+
# Pre-download a version for later use
|
|
879
|
+
c8 cluster install 8.8
|
|
880
|
+
c8 cluster install alpha
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
### Delete a Cached Version
|
|
884
|
+
|
|
885
|
+
```bash
|
|
886
|
+
# Remove a locally cached version to reclaim disk space
|
|
887
|
+
c8 cluster delete 8.8
|
|
888
|
+
```
|
|
889
|
+
|
|
844
890
|
### Typical Local Development Workflow
|
|
845
891
|
|
|
846
892
|
```bash
|
package/dist/client.d.ts
CHANGED
|
@@ -17,14 +17,16 @@ export declare const DEFAULT_PAGE_SIZE = 100;
|
|
|
17
17
|
export declare const DEFAULT_MAX_ITEMS = 1000000;
|
|
18
18
|
/**
|
|
19
19
|
* Paginated API response shape (the page metadata lives alongside items).
|
|
20
|
+
* Matches the SDK 8.9+ SearchQueryResponse structure where page fields are
|
|
21
|
+
* required but cursors are nullable.
|
|
20
22
|
*/
|
|
21
23
|
type PagedResponse<T> = {
|
|
22
|
-
items
|
|
23
|
-
page
|
|
24
|
-
totalItems
|
|
25
|
-
endCursor
|
|
26
|
-
startCursor
|
|
27
|
-
hasMoreTotalItems
|
|
24
|
+
items: T[];
|
|
25
|
+
page: {
|
|
26
|
+
totalItems: number | bigint;
|
|
27
|
+
endCursor: string | null;
|
|
28
|
+
startCursor: string | null;
|
|
29
|
+
hasMoreTotalItems: boolean;
|
|
28
30
|
};
|
|
29
31
|
};
|
|
30
32
|
/**
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAGnH;;GAEG;AACH,wBAAgB,YAAY,CAC1B,WAAW,CAAC,EAAE,MAAM,EACpB,mBAAmB,GAAE,OAAO,CAAC,cAAc,CAAM,GAChD,aAAa,CAgCf;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,UAAY,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAGnH;;GAEG;AACH,wBAAgB,YAAY,CAC1B,WAAW,CAAC,EAAE,MAAM,EACpB,mBAAmB,GAAE,OAAO,CAAC,cAAc,CAAM,GAChD,aAAa,CAgCf;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,UAAY,CAAC;AAE3C;;;;GAIG;AACH,KAAK,aAAa,CAAC,CAAC,IAAI;IACtB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;QAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,iBAAiB,EAAE,OAAO,CAAC;KAC5B,CAAC;CACH,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAChE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,QAAQ,SAAoB,EAC5B,QAAQ,SAAoB,GAC3B,OAAO,CAAC,CAAC,EAAE,CAAC,CAsCd"}
|
package/dist/client.js
CHANGED
|
@@ -70,21 +70,20 @@ export async function fetchAllPages(searchFn, filter = {}, pageSize = DEFAULT_PA
|
|
|
70
70
|
},
|
|
71
71
|
};
|
|
72
72
|
const result = await searchFn(pageFilter, consistencyOpts);
|
|
73
|
-
if (result.items
|
|
73
|
+
if (result.items.length) {
|
|
74
74
|
allItems.push(...result.items);
|
|
75
75
|
}
|
|
76
76
|
if (allItems.length >= maxItems) {
|
|
77
77
|
allItems.length = maxItems;
|
|
78
78
|
break;
|
|
79
79
|
}
|
|
80
|
-
const endCursor = result.page
|
|
81
|
-
|
|
82
|
-
const totalItems = result.page?.totalItems !== undefined ? Number(result.page.totalItems) : undefined;
|
|
80
|
+
const endCursor = result.page.endCursor;
|
|
81
|
+
const totalItems = Number(result.page.totalItems);
|
|
83
82
|
if (!endCursor || seenCursors.has(endCursor))
|
|
84
83
|
break;
|
|
85
|
-
if (
|
|
84
|
+
if (allItems.length >= totalItems)
|
|
86
85
|
break;
|
|
87
|
-
if (!result.items
|
|
86
|
+
if (!result.items.length)
|
|
88
87
|
break;
|
|
89
88
|
seenCursors.add(endCursor);
|
|
90
89
|
cursor = endCursor;
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAA2C,MAAM,qCAAqC,CAAC;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,WAAoB,EACpB,sBAA+C,EAAE;IAEjD,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAEjD,kCAAkC;IAClC,MAAM,SAAS,GAAsC;QACnD,oBAAoB,EAAE,MAAM,CAAC,OAAO;KACrC,CAAC;IAEF,qCAAqC;IACrC,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAC3C,SAAS,CAAC,qBAAqB,GAAG,OAAO,CAAC;QAC1C,SAAS,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC9C,SAAS,CAAC,qBAAqB,GAAG,MAAM,CAAC,YAAY,CAAC;QACtD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,SAAS,CAAC,sBAAsB,GAAG,MAAM,CAAC,QAAQ,CAAC;QACrD,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,SAAS,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChD,CAAC;IACH,CAAC;IACD,0CAA0C;SACrC,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC5C,SAAS,CAAC,qBAAqB,GAAG,OAAO,CAAC;QAC1C,SAAS,CAAC,2BAA2B,GAAG,MAAM,CAAC,QAAQ,CAAC;QACxD,SAAS,CAAC,2BAA2B,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC1D,CAAC;IACD,oBAAoB;SACf,CAAC;QACJ,SAAS,CAAC,qBAAqB,GAAG,MAAM,CAAC;IAC3C,CAAC;IAED,OAAO,mBAAmB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,mBAAmB,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,7 +45,7 @@ _c8ctl_completions() {
|
|
|
45
45
|
local which_resources="profile"
|
|
46
46
|
local output_resources="json text"
|
|
47
47
|
local completion_resources="bash zsh fish"
|
|
48
|
-
local cluster_resources="start stop"
|
|
48
|
+
local cluster_resources="start stop status list list-remote install delete log logs"
|
|
49
49
|
local help_resources="list get create complete await search deploy run watch cancel resolve fail activate publish correlate upgrade downgrade init profiles profile plugin plugins cluster"
|
|
50
50
|
|
|
51
51
|
# Global flags
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../../src/commands/deployments.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../../src/commands/deployments.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6MH;;GAEG;AACH,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAgMhB"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { getLogger } from "../logger.js";
|
|
5
5
|
import { createClient } from "../client.js";
|
|
6
6
|
import { resolveTenantId, resolveClusterConfig } from "../config.js";
|
|
7
|
+
import { TenantId } from '@camunda8/orchestration-cluster-api';
|
|
7
8
|
import { c8ctl } from "../runtime.js";
|
|
8
9
|
import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs';
|
|
9
10
|
import { join, dirname, extname, basename, relative } from 'node:path';
|
|
@@ -277,7 +278,7 @@ export async function deploy(paths, options) {
|
|
|
277
278
|
});
|
|
278
279
|
// Create deployment request - convert buffers to File objects with proper MIME types
|
|
279
280
|
const result = await client.createDeployment({
|
|
280
|
-
tenantId,
|
|
281
|
+
tenantId: TenantId.assumeExists(tenantId),
|
|
281
282
|
resources: resources.map(r => {
|
|
282
283
|
// Determine MIME type based on extension
|
|
283
284
|
const ext = r.name.split('.').pop()?.toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployments.js","sourceRoot":"","sources":["../../src/commands/deployments.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deployments.js","sourceRoot":"","sources":["../../src/commands/deployments.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Process instance commands
|
|
3
3
|
*/
|
|
4
4
|
import { type SortOrder } from '../logger.ts';
|
|
5
|
+
import type { ProcessInstanceResult } from '@camunda8/orchestration-cluster-api';
|
|
5
6
|
/**
|
|
6
7
|
* List process instances
|
|
7
8
|
*/
|
|
@@ -17,7 +18,7 @@ export declare function listProcessInstances(options: {
|
|
|
17
18
|
between?: string;
|
|
18
19
|
dateField?: string;
|
|
19
20
|
}): Promise<{
|
|
20
|
-
items:
|
|
21
|
+
items: ProcessInstanceResult[];
|
|
21
22
|
total?: number;
|
|
22
23
|
} | undefined>;
|
|
23
24
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-instances.d.ts","sourceRoot":"","sources":["../../src/commands/process-instances.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"process-instances.d.ts","sourceRoot":"","sources":["../../src/commands/process-instances.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAK7D,OAAO,KAAK,EAA0C,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAEzH;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAiE1E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsChB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC;IACV,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,GAAG,SAAS,CAAC,CAwGb;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH;;GAEG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDhB"}
|
package/dist/commands/run.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { getLogger } from "../logger.js";
|
|
5
5
|
import { createClient } from "../client.js";
|
|
6
6
|
import { resolveTenantId } from "../config.js";
|
|
7
|
+
import { TenantId } from '@camunda8/orchestration-cluster-api';
|
|
7
8
|
import { readFileSync } from 'node:fs';
|
|
8
9
|
/**
|
|
9
10
|
* Extract process ID from BPMN file
|
|
@@ -31,7 +32,7 @@ export async function run(path, options) {
|
|
|
31
32
|
// Deploy the BPMN file - convert to File object with proper MIME type
|
|
32
33
|
const fileName = path.split('/').pop() || 'process.bpmn';
|
|
33
34
|
const deployResult = await client.createDeployment({
|
|
34
|
-
tenantId,
|
|
35
|
+
tenantId: TenantId.assumeExists(tenantId),
|
|
35
36
|
resources: [new File([Buffer.from(content)], fileName, { type: 'application/xml' })],
|
|
36
37
|
});
|
|
37
38
|
logger.success('Deployment successful', deployResult.deploymentKey.toString());
|
package/dist/commands/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;GAEG;AACH,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAY,EAAE,OAGvC;IACC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,iBAAiB;QACjB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC;QAEpC,sEAAsE;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,cAAc,CAAC;QACzD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC;YACjD,QAAQ;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# c8ctl-plugin-cluster
|
|
2
2
|
|
|
3
|
-
A default [c8ctl](https://github.com/camunda/c8ctl) plugin that provides an opinionated way to download, start, and
|
|
3
|
+
A default [c8ctl](https://github.com/camunda/c8ctl) plugin that provides an opinionated way to download, start, stop, and inspect a local Camunda 8 cluster using [c8run](https://docs.camunda.io/docs/self-managed/setup/deploy/local/c8run/).
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
6
6
|
|
|
@@ -12,7 +12,10 @@ c8ctl cluster start 8.9.0-alpha5
|
|
|
12
12
|
c8ctl cluster start stable
|
|
13
13
|
c8ctl cluster start alpha
|
|
14
14
|
|
|
15
|
-
#
|
|
15
|
+
# Start with a major.minor version (rolling release)
|
|
16
|
+
c8ctl cluster start 8.8
|
|
17
|
+
|
|
18
|
+
# Starting without specifying a version defaults to stable
|
|
16
19
|
c8ctl cluster start
|
|
17
20
|
|
|
18
21
|
# Start with debug output (streams raw c8run logs)
|
|
@@ -20,6 +23,24 @@ c8ctl cluster start --debug
|
|
|
20
23
|
|
|
21
24
|
# Stop the running cluster
|
|
22
25
|
c8ctl cluster stop
|
|
26
|
+
|
|
27
|
+
# Check whether a cluster is running and see connection details
|
|
28
|
+
c8ctl cluster status
|
|
29
|
+
|
|
30
|
+
# Stream log output from the running cluster
|
|
31
|
+
c8ctl cluster logs
|
|
32
|
+
|
|
33
|
+
# List locally cached versions and available aliases
|
|
34
|
+
c8ctl cluster list
|
|
35
|
+
|
|
36
|
+
# List all versions available on the remote download server
|
|
37
|
+
c8ctl cluster list-remote
|
|
38
|
+
|
|
39
|
+
# Download a version without starting it
|
|
40
|
+
c8ctl cluster install 8.8
|
|
41
|
+
|
|
42
|
+
# Remove a locally cached version to reclaim disk space
|
|
43
|
+
c8ctl cluster delete 8.8
|
|
23
44
|
```
|
|
24
45
|
|
|
25
46
|
## Version aliases
|
|
@@ -34,6 +55,15 @@ plugin update.
|
|
|
34
55
|
| `stable` | Highest minor release that is GA (e.g. `8.8`) |
|
|
35
56
|
| `alpha` | Highest minor release overall (e.g. `8.9`) |
|
|
36
57
|
|
|
58
|
+
A `<major>.<minor>` version like `8.8` or `8.9` is also treated as a rolling
|
|
59
|
+
release — the download server's `8.8/` directory is updated in-place with new
|
|
60
|
+
patch releases.
|
|
61
|
+
|
|
62
|
+
### `start` vs `install` update behavior
|
|
63
|
+
|
|
64
|
+
- **`start`** uses the local version if available. A non-blocking remote check runs in the background — if a newer rolling release exists, a hint is printed (e.g. *"A newer server version is available. Install it with: c8ctl cluster install 8.8"*). If the network is unreachable, the hint is silently skipped.
|
|
65
|
+
- **`install`** always checks the remote for a newer rolling release (via ETag comparison) and re-downloads if one is available.
|
|
66
|
+
|
|
37
67
|
If the download server is unreachable, the aliases fall back to the values
|
|
38
68
|
shipped in the plugin's `package.json`.
|
|
39
69
|
|
|
@@ -43,6 +73,12 @@ shipped in the plugin's `package.json`.
|
|
|
43
73
|
2. **Cache**: Stores downloaded binaries in a platform-specific cache directory
|
|
44
74
|
3. **Start**: Launches c8run in the background and waits for the cluster to become healthy
|
|
45
75
|
4. **Stop**: Gracefully shuts down the running cluster
|
|
76
|
+
5. **Status**: Reports whether a cluster is running by checking the active marker file and the live health endpoint
|
|
77
|
+
6. **Logs**: Streams log output (camunda.log, connectors.log) from the running cluster using `tail -f`
|
|
78
|
+
7. **List**: Shows all locally cached versions and the current resolved values of available version aliases
|
|
79
|
+
8. **List-remote**: Queries the Camunda Download Center and displays all available versions
|
|
80
|
+
9. **Install**: Downloads a specific version without starting it, useful for pre-caching
|
|
81
|
+
10. **Delete**: Removes a locally cached version to reclaim disk space
|
|
46
82
|
|
|
47
83
|
### Cache locations
|
|
48
84
|
|
|
@@ -39,6 +39,24 @@ function isVersionAlias(versionSpec) {
|
|
|
39
39
|
return KNOWN_ALIAS_NAMES.has(versionSpec);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Detect a major.minor version pattern (e.g. "8.8", "8.9", "9.0").
|
|
44
|
+
* These are rolling releases on the download server and behave like aliases:
|
|
45
|
+
* their content changes over time, so ETag-based update checks apply.
|
|
46
|
+
*/
|
|
47
|
+
export function isMinorVersionPattern(versionSpec) {
|
|
48
|
+
return /^\d+\.\d+$/.test(versionSpec);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* A "rolling version" is any version spec whose remote content can change
|
|
53
|
+
* over time: named aliases (stable, alpha) and major.minor patterns (8.8, 8.9).
|
|
54
|
+
* Pinned versions like 8.9.0-alpha5 are NOT rolling.
|
|
55
|
+
*/
|
|
56
|
+
export function isRollingVersion(versionSpec) {
|
|
57
|
+
return isVersionAlias(versionSpec) || isMinorVersionPattern(versionSpec);
|
|
58
|
+
}
|
|
59
|
+
|
|
42
60
|
/**
|
|
43
61
|
* Fetch the c8run download directory listing and discover the latest
|
|
44
62
|
* stable and alpha minor versions.
|
|
@@ -114,11 +132,50 @@ async function getDynamicAliases() {
|
|
|
114
132
|
return _dynamicAliases;
|
|
115
133
|
}
|
|
116
134
|
|
|
117
|
-
async function resolveVersion(versionSpec) {
|
|
135
|
+
async function resolveVersion(versionSpec, { preferLocal = false, cacheDir } = {}) {
|
|
118
136
|
if (!isVersionAlias(versionSpec)) return versionSpec;
|
|
137
|
+
|
|
138
|
+
// When preferLocal is set (e.g. start), try the persisted alias mapping first
|
|
139
|
+
if (preferLocal && cacheDir) {
|
|
140
|
+
const local = readLocalAliasMapping(cacheDir, versionSpec);
|
|
141
|
+
if (local) return local;
|
|
142
|
+
}
|
|
143
|
+
|
|
119
144
|
const dynamic = await getDynamicAliases();
|
|
120
|
-
|
|
121
|
-
|
|
145
|
+
const resolved = dynamic?.[versionSpec] ?? _fallbackAliases[versionSpec] ?? versionSpec;
|
|
146
|
+
|
|
147
|
+
// Persist the resolved mapping for future offline use
|
|
148
|
+
if (cacheDir && dynamic?.[versionSpec]) {
|
|
149
|
+
storeLocalAliasMapping(cacheDir, versionSpec, resolved);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return resolved;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function getAliasMappingPath(cacheDir, alias) {
|
|
156
|
+
return join(cacheDir, `alias-${alias}.resolved`);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function readLocalAliasMapping(cacheDir, alias) {
|
|
160
|
+
const filePath = getAliasMappingPath(cacheDir, alias);
|
|
161
|
+
if (!existsSync(filePath)) return null;
|
|
162
|
+
try {
|
|
163
|
+
const value = readFileSync(filePath, 'utf-8').trim();
|
|
164
|
+
// Only use the cached mapping if the version is actually installed
|
|
165
|
+
const config = { cacheDir, version: value };
|
|
166
|
+
return isC8RunInstalled(config) ? value : null;
|
|
167
|
+
} catch {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function storeLocalAliasMapping(cacheDir, alias, resolved) {
|
|
173
|
+
try {
|
|
174
|
+
mkdirSync(cacheDir, { recursive: true });
|
|
175
|
+
writeFileSync(getAliasMappingPath(cacheDir, alias), resolved);
|
|
176
|
+
} catch {
|
|
177
|
+
// Best-effort — don't break the command if we can't persist
|
|
178
|
+
}
|
|
122
179
|
}
|
|
123
180
|
|
|
124
181
|
async function getVersionAliasEntries() {
|
|
@@ -138,15 +195,22 @@ export function _resetDynamicAliasCache() {
|
|
|
138
195
|
|
|
139
196
|
export const metadata = {
|
|
140
197
|
name: 'cluster',
|
|
141
|
-
description: 'Download, start, and
|
|
198
|
+
description: 'Download, start, stop, and inspect a local Camunda 8 cluster',
|
|
142
199
|
commands: {
|
|
143
200
|
'cluster': {
|
|
144
201
|
description:
|
|
145
|
-
'Manage local Camunda 8 cluster —
|
|
202
|
+
'Manage local Camunda 8 cluster — start, stop, status, logs, install, delete, or list versions',
|
|
146
203
|
examples: [
|
|
147
|
-
{ command: 'c8ctl cluster start', description: 'Start a local Camunda 8 cluster (latest
|
|
204
|
+
{ command: 'c8ctl cluster start', description: 'Start a local Camunda 8 cluster (latest stable)' },
|
|
205
|
+
{ command: 'c8ctl cluster start 8.8', description: 'Start the latest cached 8.8.x release' },
|
|
148
206
|
{ command: 'c8ctl cluster start 8.9.0-alpha5', description: 'Start a specific version' },
|
|
149
207
|
{ command: 'c8ctl cluster stop', description: 'Stop the running cluster' },
|
|
208
|
+
{ command: 'c8ctl cluster status', description: 'Show whether a cluster is running and how to connect' },
|
|
209
|
+
{ command: 'c8ctl cluster logs', description: 'Stream log output from the running cluster' },
|
|
210
|
+
{ command: 'c8ctl cluster list', description: 'List locally cached versions and available aliases' },
|
|
211
|
+
{ command: 'c8ctl cluster list-remote', description: 'List all versions available on the remote download server' },
|
|
212
|
+
{ command: 'c8ctl cluster install 8.8', description: 'Download a version without starting it' },
|
|
213
|
+
{ command: 'c8ctl cluster delete 8.8', description: 'Remove a locally cached version' },
|
|
150
214
|
],
|
|
151
215
|
},
|
|
152
216
|
},
|
|
@@ -176,6 +240,8 @@ function getLogger() {
|
|
|
176
240
|
const ACTIVE_MARKER_FILE = 'cluster.active';
|
|
177
241
|
const VERSION_MARKER_FILE = 'cluster.version';
|
|
178
242
|
const CLUSTER_STARTUP_TIMEOUT_MS = 120000;
|
|
243
|
+
const HEALTH_CHECK_TIMEOUT_MS = 3_000;
|
|
244
|
+
const ALIAS_COLUMN_WIDTH = 22;
|
|
179
245
|
|
|
180
246
|
function getCacheDir() {
|
|
181
247
|
const envDir = process.env.C8RUN_CACHE_DIR;
|
|
@@ -245,31 +311,59 @@ export function validateVersionSpec(versionSpec) {
|
|
|
245
311
|
// Download & installation
|
|
246
312
|
// ---------------------------------------------------------------------------
|
|
247
313
|
|
|
314
|
+
function getInstalledVersionsList(cacheDir) {
|
|
315
|
+
if (!existsSync(cacheDir)) return [];
|
|
316
|
+
return readdirSync(cacheDir, { withFileTypes: true })
|
|
317
|
+
.filter((entry) => entry.isDirectory() && entry.name.startsWith('c8run-'))
|
|
318
|
+
.map((entry) => entry.name.slice('c8run-'.length))
|
|
319
|
+
.sort();
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
function formatLocalVersionsHint(cacheDir) {
|
|
323
|
+
const versions = getInstalledVersionsList(cacheDir);
|
|
324
|
+
if (versions.length === 0) {
|
|
325
|
+
return 'No versions are installed locally.';
|
|
326
|
+
}
|
|
327
|
+
return `Locally available versions:\n${versions.map(v => ` ${v}`).join('\n')}`;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function getDownloadUrl(version) {
|
|
331
|
+
const platformInfo = getPlatformIdentifier();
|
|
332
|
+
return `https://downloads.camunda.cloud/release/camunda/c8run/${version}/camunda8-run-${version}-${platformInfo.platform}-${platformInfo.arch}.${platformInfo.extension}`;
|
|
333
|
+
}
|
|
334
|
+
|
|
248
335
|
async function downloadC8Run(config) {
|
|
249
336
|
const logger = getLogger();
|
|
250
337
|
const version = config.version;
|
|
251
|
-
const platformInfo = getPlatformIdentifier();
|
|
252
338
|
|
|
253
|
-
const downloadUrl =
|
|
254
|
-
`https://downloads.camunda.cloud/release/camunda/c8run/${version}/camunda8-run-${version}-${platformInfo.platform}-${platformInfo.arch}.${platformInfo.extension}`;
|
|
339
|
+
const downloadUrl = getDownloadUrl(version);
|
|
255
340
|
|
|
256
|
-
logger.info(`Downloading Camunda ${version} for ${
|
|
341
|
+
logger.info(`Downloading Camunda ${version} for ${getPlatformIdentifier().platform}...`);
|
|
257
342
|
|
|
258
343
|
const cacheDir = config.cacheDir;
|
|
259
344
|
mkdirSync(cacheDir, { recursive: true });
|
|
260
345
|
|
|
346
|
+
const platformInfo = getPlatformIdentifier();
|
|
261
347
|
const targetFile = join(
|
|
262
348
|
cacheDir,
|
|
263
349
|
`c8run-${version}-${platformInfo.platform}-${platformInfo.arch}.${platformInfo.extension}`,
|
|
264
350
|
);
|
|
265
351
|
|
|
266
|
-
const response = await fetch(downloadUrl)
|
|
352
|
+
const response = await fetch(downloadUrl).catch((error) => {
|
|
353
|
+
throw new Error(
|
|
354
|
+
`Cannot reach the Camunda Download Center.\n` +
|
|
355
|
+
`URL: ${downloadUrl}\n` +
|
|
356
|
+
`Error: ${error.message}\n\n` +
|
|
357
|
+
formatLocalVersionsHint(cacheDir),
|
|
358
|
+
);
|
|
359
|
+
});
|
|
267
360
|
|
|
268
361
|
if (!response.ok) {
|
|
269
362
|
throw new Error(
|
|
270
363
|
`Failed to download c8run ${version}: HTTP ${response.status}\n` +
|
|
271
364
|
`URL: ${downloadUrl}\n` +
|
|
272
|
-
`Please check the version exists or try a different version
|
|
365
|
+
`Please check the version exists or try a different version.\n\n` +
|
|
366
|
+
formatLocalVersionsHint(cacheDir),
|
|
273
367
|
);
|
|
274
368
|
}
|
|
275
369
|
|
|
@@ -283,6 +377,11 @@ async function downloadC8Run(config) {
|
|
|
283
377
|
);
|
|
284
378
|
}
|
|
285
379
|
|
|
380
|
+
const etag = response.headers.get('etag') || response.headers.get('last-modified') || null;
|
|
381
|
+
// Note: 'etag' values are quoted strings (e.g. '"abc123"') while 'last-modified'
|
|
382
|
+
// values are date strings. Both are used as opaque version tokens for equality
|
|
383
|
+
// comparison — the format difference does not affect correctness.
|
|
384
|
+
|
|
286
385
|
const fileStream = createWriteStream(targetFile);
|
|
287
386
|
|
|
288
387
|
let downloadedSize = 0;
|
|
@@ -318,7 +417,7 @@ async function downloadC8Run(config) {
|
|
|
318
417
|
`Downloaded and saved to ${targetFile} (${Math.floor(downloadedSize / 1024 / 1024)} MB)`,
|
|
319
418
|
);
|
|
320
419
|
|
|
321
|
-
return targetFile;
|
|
420
|
+
return { archivePath: targetFile, etag };
|
|
322
421
|
}
|
|
323
422
|
|
|
324
423
|
async function extractArchive(archivePath, targetDir) {
|
|
@@ -417,7 +516,7 @@ export function getC8RunBinaryPath(config) {
|
|
|
417
516
|
return binaryPath;
|
|
418
517
|
}
|
|
419
518
|
|
|
420
|
-
export function purgeInstalledVersion(config) {
|
|
519
|
+
export function purgeInstalledVersion(config, { reason } = {}) {
|
|
421
520
|
const logger = getLogger();
|
|
422
521
|
const installDir = join(config.cacheDir, `c8run-${config.version}`);
|
|
423
522
|
const platformInfo = getPlatformIdentifier();
|
|
@@ -427,31 +526,115 @@ export function purgeInstalledVersion(config) {
|
|
|
427
526
|
);
|
|
428
527
|
|
|
429
528
|
if (existsSync(installDir)) {
|
|
430
|
-
|
|
529
|
+
const msg = reason || 'since a newer version is available';
|
|
530
|
+
logger.info(`Removing cached installation for ${config.version} ${msg}...`);
|
|
431
531
|
rmSync(installDir, { recursive: true });
|
|
432
532
|
}
|
|
433
533
|
if (existsSync(archiveFile)) {
|
|
434
534
|
rmSync(archiveFile);
|
|
435
535
|
}
|
|
536
|
+
|
|
537
|
+
// Remove stored ETag so the next install records a fresh one
|
|
538
|
+
const etagFile = getETagFilePath(config);
|
|
539
|
+
if (existsSync(etagFile)) {
|
|
540
|
+
rmSync(etagFile);
|
|
541
|
+
}
|
|
436
542
|
}
|
|
437
543
|
|
|
438
|
-
|
|
439
|
-
|
|
544
|
+
function getETagFilePath(config) {
|
|
545
|
+
return join(config.cacheDir, `c8run-${config.version}.etag`);
|
|
546
|
+
}
|
|
440
547
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
if (
|
|
444
|
-
|
|
548
|
+
export function readStoredETag(config) {
|
|
549
|
+
const etagFile = getETagFilePath(config);
|
|
550
|
+
if (!existsSync(etagFile)) return null;
|
|
551
|
+
try {
|
|
552
|
+
return readFileSync(etagFile, 'utf-8').trim() || null;
|
|
553
|
+
} catch {
|
|
554
|
+
return null;
|
|
445
555
|
}
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
export function storeETag(config, etag) {
|
|
559
|
+
mkdirSync(config.cacheDir, { recursive: true });
|
|
560
|
+
writeFileSync(getETagFilePath(config), etag);
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
export async function hasNewerVersionAvailable(config) {
|
|
564
|
+
const storedETag = readStoredETag(config);
|
|
565
|
+
|
|
566
|
+
const downloadUrl = getDownloadUrl(config.version);
|
|
567
|
+
let remoteETag;
|
|
568
|
+
const controller = new AbortController();
|
|
569
|
+
const timeout = setTimeout(() => controller.abort(), 5_000);
|
|
570
|
+
try {
|
|
571
|
+
const response = await fetch(downloadUrl, { method: 'HEAD', signal: controller.signal });
|
|
572
|
+
if (!response.ok) {
|
|
573
|
+
// Can't determine — keep the current installation
|
|
574
|
+
return false;
|
|
575
|
+
}
|
|
576
|
+
remoteETag = response.headers.get('etag') || response.headers.get('last-modified');
|
|
577
|
+
if (!remoteETag) {
|
|
578
|
+
// Server provides no version signal — keep the current installation
|
|
579
|
+
return false;
|
|
580
|
+
}
|
|
581
|
+
} catch {
|
|
582
|
+
// Network error — keep the current installation (allows offline use)
|
|
583
|
+
return false;
|
|
584
|
+
} finally {
|
|
585
|
+
clearTimeout(timeout);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
if (!storedETag) {
|
|
589
|
+
// No ETag stored yet (e.g. first run after upgrade to this version).
|
|
590
|
+
// Record the current remote ETag so future checks can compare, but
|
|
591
|
+
// do NOT treat this as "update available" — the existing install is fine.
|
|
592
|
+
storeETag(config, remoteETag);
|
|
593
|
+
return false;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
return remoteETag !== storedETag;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
export async function ensureC8RunInstalled(config) {
|
|
600
|
+
const logger = getLogger();
|
|
446
601
|
|
|
447
602
|
if (isC8RunInstalled(config)) {
|
|
448
|
-
|
|
449
|
-
|
|
603
|
+
if (config.checkForUpdates) {
|
|
604
|
+
// Explicitly asked to check for updates (e.g. install subcommand with a rolling version)
|
|
605
|
+
const hasUpdate = await hasNewerVersionAvailable(config);
|
|
606
|
+
if (!hasUpdate) {
|
|
607
|
+
logger.info(`c8run ${config.version} is already installed and up to date.`);
|
|
608
|
+
return;
|
|
609
|
+
}
|
|
610
|
+
purgeInstalledVersion(config);
|
|
611
|
+
} else {
|
|
612
|
+
// Use local installation as-is (start subcommand, or pinned version)
|
|
613
|
+
logger.info(`c8run ${config.version} is already installed.`);
|
|
614
|
+
|
|
615
|
+
// For rolling versions on start, do a bounded non-blocking check and hint.
|
|
616
|
+
// We store the promise so tests can await it, but we don't block the caller.
|
|
617
|
+
if (config.checkForUpdateHint) {
|
|
618
|
+
config._hintPromise = hasNewerVersionAvailable(config)
|
|
619
|
+
.then((hasUpdate) => {
|
|
620
|
+
if (hasUpdate) {
|
|
621
|
+
logger.info(
|
|
622
|
+
`A newer server version is available. Install it with: c8ctl cluster install ${config.version}`,
|
|
623
|
+
);
|
|
624
|
+
}
|
|
625
|
+
})
|
|
626
|
+
.catch(() => {
|
|
627
|
+
// Swallow — offline or timeout, don't bother the user
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
return;
|
|
632
|
+
}
|
|
450
633
|
}
|
|
451
634
|
|
|
452
635
|
logger.info('No local installation found. Setting up...');
|
|
453
636
|
|
|
454
|
-
const archivePath = await downloadC8Run(config);
|
|
637
|
+
const { archivePath, etag } = await downloadC8Run(config);
|
|
455
638
|
|
|
456
639
|
const installDir = join(config.cacheDir, `c8run-${config.version}`);
|
|
457
640
|
await extractArchive(archivePath, installDir);
|
|
@@ -464,6 +647,11 @@ export async function ensureC8RunInstalled(config) {
|
|
|
464
647
|
const binaryPath = getC8RunBinaryPath(config);
|
|
465
648
|
await chmod(binaryPath, 0o755);
|
|
466
649
|
|
|
650
|
+
// Store the ETag for rolling versions so future checks can detect new releases
|
|
651
|
+
if (config.isRolling && etag) {
|
|
652
|
+
storeETag(config, etag);
|
|
653
|
+
}
|
|
654
|
+
|
|
467
655
|
logger.info(`c8run ${config.version} installed successfully.`);
|
|
468
656
|
}
|
|
469
657
|
|
|
@@ -730,6 +918,310 @@ async function stopC8Run(config) {
|
|
|
730
918
|
logger.info('Cluster stopped.');
|
|
731
919
|
}
|
|
732
920
|
|
|
921
|
+
// ---------------------------------------------------------------------------
|
|
922
|
+
// Status
|
|
923
|
+
// ---------------------------------------------------------------------------
|
|
924
|
+
|
|
925
|
+
const CLUSTER_URLS = {
|
|
926
|
+
operate: 'http://localhost:8080/operate',
|
|
927
|
+
tasklist: 'http://localhost:8080/tasklist',
|
|
928
|
+
zeebeGrpc: 'localhost:26500',
|
|
929
|
+
zeebeRest: 'http://localhost:8080/v2/',
|
|
930
|
+
health: 'http://localhost:9600/actuator/health',
|
|
931
|
+
};
|
|
932
|
+
|
|
933
|
+
export async function clusterStatus(cacheDir) {
|
|
934
|
+
const logger = getLogger();
|
|
935
|
+
const markerFile = join(cacheDir, ACTIVE_MARKER_FILE);
|
|
936
|
+
const versionFile = join(cacheDir, VERSION_MARKER_FILE);
|
|
937
|
+
|
|
938
|
+
const markerExists = existsSync(markerFile);
|
|
939
|
+
const version = markerExists && existsSync(versionFile)
|
|
940
|
+
? readFileSync(versionFile, 'utf-8').trim() || null
|
|
941
|
+
: null;
|
|
942
|
+
|
|
943
|
+
// Check live health endpoint regardless of marker
|
|
944
|
+
let isHealthy = false;
|
|
945
|
+
try {
|
|
946
|
+
const controller = new AbortController();
|
|
947
|
+
const timeout = setTimeout(() => controller.abort(), HEALTH_CHECK_TIMEOUT_MS);
|
|
948
|
+
try {
|
|
949
|
+
const response = await fetch(CLUSTER_URLS.health, { signal: controller.signal });
|
|
950
|
+
if (response.ok) {
|
|
951
|
+
const data = await response.json();
|
|
952
|
+
isHealthy = data.status === 'UP';
|
|
953
|
+
}
|
|
954
|
+
} finally {
|
|
955
|
+
clearTimeout(timeout);
|
|
956
|
+
}
|
|
957
|
+
} catch {
|
|
958
|
+
// Health endpoint not reachable
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
let status;
|
|
962
|
+
if (isHealthy) {
|
|
963
|
+
status = 'running';
|
|
964
|
+
} else if (markerExists) {
|
|
965
|
+
status = 'starting or unresponsive';
|
|
966
|
+
} else {
|
|
967
|
+
status = 'stopped';
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
if (globalThis.c8ctl?.getLogger().mode === 'json') {
|
|
971
|
+
logger.json({ status, version, urls: isHealthy ? CLUSTER_URLS : undefined });
|
|
972
|
+
return;
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
if (!markerExists && !isHealthy) {
|
|
976
|
+
console.log('Cluster status: stopped');
|
|
977
|
+
console.log('');
|
|
978
|
+
console.log(' Start with: c8ctl cluster start');
|
|
979
|
+
return;
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
console.log(`Cluster status: ${status}`);
|
|
983
|
+
if (version) {
|
|
984
|
+
console.log(` Version: ${version}`);
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
if (isHealthy) {
|
|
988
|
+
console.log('');
|
|
989
|
+
console.log(' - Operate: ' + CLUSTER_URLS.operate);
|
|
990
|
+
console.log(' - Tasklist: ' + CLUSTER_URLS.tasklist);
|
|
991
|
+
console.log(' - Zeebe GRPC: ' + CLUSTER_URLS.zeebeGrpc);
|
|
992
|
+
console.log(' - Zeebe REST: ' + CLUSTER_URLS.zeebeRest);
|
|
993
|
+
console.log(' - Health: ' + CLUSTER_URLS.health);
|
|
994
|
+
console.log('');
|
|
995
|
+
console.log(' Default credentials: demo / demo');
|
|
996
|
+
} else {
|
|
997
|
+
console.log('');
|
|
998
|
+
console.log(' The cluster appears to have been started but is not yet responding.');
|
|
999
|
+
console.log(' Run "c8ctl cluster status" again in a moment, or check the logs.');
|
|
1000
|
+
}
|
|
1001
|
+
console.log('');
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
// ---------------------------------------------------------------------------
|
|
1005
|
+
// List cached versions
|
|
1006
|
+
// ---------------------------------------------------------------------------
|
|
1007
|
+
|
|
1008
|
+
export async function listInstalledVersions(cacheDir) {
|
|
1009
|
+
const logger = getLogger();
|
|
1010
|
+
|
|
1011
|
+
const installedVersions = getInstalledVersionsList(cacheDir)
|
|
1012
|
+
.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
|
|
1013
|
+
|
|
1014
|
+
const aliasEntries = await getVersionAliasEntries();
|
|
1015
|
+
|
|
1016
|
+
if (globalThis.c8ctl?.getLogger().mode === 'json') {
|
|
1017
|
+
logger.json({
|
|
1018
|
+
installed: installedVersions,
|
|
1019
|
+
aliases: Object.fromEntries(aliasEntries),
|
|
1020
|
+
});
|
|
1021
|
+
return;
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
if (installedVersions.length === 0) {
|
|
1025
|
+
console.log('No versions installed locally.');
|
|
1026
|
+
console.log('');
|
|
1027
|
+
console.log(' Install one with: c8ctl cluster start [version]');
|
|
1028
|
+
} else {
|
|
1029
|
+
console.log('Installed versions:');
|
|
1030
|
+
for (const v of installedVersions) {
|
|
1031
|
+
console.log(` ${v}`);
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
console.log('');
|
|
1036
|
+
console.log('Version aliases (dynamically resolved):');
|
|
1037
|
+
for (const [alias, resolved] of aliasEntries) {
|
|
1038
|
+
console.log(` ${alias.padEnd(ALIAS_COLUMN_WIDTH)} → ${resolved}`);
|
|
1039
|
+
}
|
|
1040
|
+
console.log('');
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
// ---------------------------------------------------------------------------
|
|
1044
|
+
// List remote versions
|
|
1045
|
+
// ---------------------------------------------------------------------------
|
|
1046
|
+
|
|
1047
|
+
export async function listRemoteVersions() {
|
|
1048
|
+
const logger = getLogger();
|
|
1049
|
+
|
|
1050
|
+
let html;
|
|
1051
|
+
try {
|
|
1052
|
+
const response = await fetch(DOWNLOAD_BASE_URL);
|
|
1053
|
+
if (!response.ok) {
|
|
1054
|
+
throw new Error(`HTTP ${response.status}`);
|
|
1055
|
+
}
|
|
1056
|
+
html = await response.text();
|
|
1057
|
+
} catch (error) {
|
|
1058
|
+
logger.error(`Failed to query the Camunda Download Center: ${error}`);
|
|
1059
|
+
logger.info('Check your network connection and try again.');
|
|
1060
|
+
process.exit(1);
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
// Extract all versioned directories (minor versions like "8.8/" and alpha like "8.9.0-alpha5/")
|
|
1064
|
+
const versionMatches = [...html.matchAll(/href="([\d]+\.[\d]+(?:\.\d+)?(?:-[A-Za-z0-9._-]+)?)\/"/g)]
|
|
1065
|
+
.map(m => m[1]);
|
|
1066
|
+
|
|
1067
|
+
if (versionMatches.length === 0) {
|
|
1068
|
+
logger.warn('No versions found on the remote server.');
|
|
1069
|
+
return;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
const sorted = [...new Set(versionMatches)].sort((a, b) => {
|
|
1073
|
+
// Sort by major.minor, then full string with numeric comparison for patches/alphas
|
|
1074
|
+
const [aMaj, aMin] = a.split('.').map(Number);
|
|
1075
|
+
const [bMaj, bMin] = b.split('.').map(Number);
|
|
1076
|
+
return aMaj - bMaj || aMin - bMin || a.localeCompare(b, undefined, { numeric: true });
|
|
1077
|
+
});
|
|
1078
|
+
|
|
1079
|
+
const aliasEntries = await getVersionAliasEntries();
|
|
1080
|
+
|
|
1081
|
+
if (globalThis.c8ctl?.getLogger().mode === 'json') {
|
|
1082
|
+
logger.json({
|
|
1083
|
+
versions: sorted,
|
|
1084
|
+
aliases: Object.fromEntries(aliasEntries),
|
|
1085
|
+
});
|
|
1086
|
+
return;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
console.log('Available versions on remote:');
|
|
1090
|
+
for (const v of sorted) {
|
|
1091
|
+
console.log(` ${v}`);
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
console.log('');
|
|
1095
|
+
console.log('Version aliases (dynamically resolved):');
|
|
1096
|
+
for (const [alias, resolved] of aliasEntries) {
|
|
1097
|
+
console.log(` ${alias.padEnd(ALIAS_COLUMN_WIDTH)} → ${resolved}`);
|
|
1098
|
+
}
|
|
1099
|
+
console.log('');
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
// ---------------------------------------------------------------------------
|
|
1103
|
+
// Delete cached version
|
|
1104
|
+
// ---------------------------------------------------------------------------
|
|
1105
|
+
|
|
1106
|
+
export async function deleteVersion(cacheDir, versionSpec) {
|
|
1107
|
+
const logger = getLogger();
|
|
1108
|
+
|
|
1109
|
+
if (!versionSpec) {
|
|
1110
|
+
logger.error('Please specify a version to delete. Example: c8ctl cluster delete 8.8');
|
|
1111
|
+
process.exit(1);
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
validateVersionSpec(versionSpec);
|
|
1115
|
+
|
|
1116
|
+
// Resolve named aliases (stable/alpha) to the actual cached version name.
|
|
1117
|
+
// Major.minor patterns like 8.8 are used as-is since the cache dir is named c8run-8.8.
|
|
1118
|
+
const resolvedVersion = isVersionAlias(versionSpec)
|
|
1119
|
+
? await resolveVersion(versionSpec)
|
|
1120
|
+
: versionSpec;
|
|
1121
|
+
|
|
1122
|
+
// Prevent deleting a currently running version
|
|
1123
|
+
const versionFile = join(cacheDir, VERSION_MARKER_FILE);
|
|
1124
|
+
const markerFile = join(cacheDir, ACTIVE_MARKER_FILE);
|
|
1125
|
+
|
|
1126
|
+
if (existsSync(markerFile) && existsSync(versionFile)) {
|
|
1127
|
+
const runningVersion = readFileSync(versionFile, 'utf-8').trim();
|
|
1128
|
+
if (runningVersion === resolvedVersion) {
|
|
1129
|
+
logger.error(
|
|
1130
|
+
`Version ${resolvedVersion} is currently running. Stop it first with: c8ctl cluster stop`
|
|
1131
|
+
);
|
|
1132
|
+
process.exit(1);
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
const config = { cacheDir, version: resolvedVersion };
|
|
1137
|
+
|
|
1138
|
+
if (!isC8RunInstalled(config)) {
|
|
1139
|
+
logger.warn(`Version ${versionSpec} is not installed locally.`);
|
|
1140
|
+
return;
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
purgeInstalledVersion(config, { reason: 'as requested' });
|
|
1144
|
+
logger.info(`Version ${versionSpec} has been deleted.`);
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
// ---------------------------------------------------------------------------
|
|
1148
|
+
// Logs
|
|
1149
|
+
// ---------------------------------------------------------------------------
|
|
1150
|
+
|
|
1151
|
+
const LOG_FILES = ['camunda.log', 'connectors.log'];
|
|
1152
|
+
|
|
1153
|
+
export async function streamLogs(cacheDir) {
|
|
1154
|
+
const logger = getLogger();
|
|
1155
|
+
const markerFile = join(cacheDir, ACTIVE_MARKER_FILE);
|
|
1156
|
+
const versionFile = join(cacheDir, VERSION_MARKER_FILE);
|
|
1157
|
+
|
|
1158
|
+
if (!existsSync(markerFile)) {
|
|
1159
|
+
logger.warn('No cluster is currently running.');
|
|
1160
|
+
logger.info('Start one with: c8ctl cluster start');
|
|
1161
|
+
return;
|
|
1162
|
+
}
|
|
1163
|
+
|
|
1164
|
+
const version = existsSync(versionFile)
|
|
1165
|
+
? readFileSync(versionFile, 'utf-8').trim()
|
|
1166
|
+
: null;
|
|
1167
|
+
|
|
1168
|
+
if (!version) {
|
|
1169
|
+
logger.error('Cannot determine running cluster version. Try restarting the cluster.');
|
|
1170
|
+
process.exit(1);
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
const config = { cacheDir, version };
|
|
1174
|
+
let binaryPath;
|
|
1175
|
+
try {
|
|
1176
|
+
binaryPath = getC8RunBinaryPath(config);
|
|
1177
|
+
} catch {
|
|
1178
|
+
logger.error(`Cannot find c8run binary for version ${version}.`);
|
|
1179
|
+
process.exit(1);
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
const binaryDir = dirname(binaryPath);
|
|
1183
|
+
const logDir = join(binaryDir, 'log');
|
|
1184
|
+
|
|
1185
|
+
const existingLogs = LOG_FILES
|
|
1186
|
+
.map(f => join(logDir, f))
|
|
1187
|
+
.filter(f => existsSync(f));
|
|
1188
|
+
|
|
1189
|
+
if (existingLogs.length === 0) {
|
|
1190
|
+
logger.warn(`No log files found in ${logDir}`);
|
|
1191
|
+
logger.info('The cluster may still be starting. Try again in a moment.');
|
|
1192
|
+
return;
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
logger.info(`Streaming logs from ${logDir} (Ctrl+C to stop)...`);
|
|
1196
|
+
logger.info('');
|
|
1197
|
+
|
|
1198
|
+
// Use tail -f to follow all log files
|
|
1199
|
+
const tailArgs = ['-f', ...existingLogs];
|
|
1200
|
+
const tail = spawn('tail', tailArgs, { stdio: 'inherit' });
|
|
1201
|
+
|
|
1202
|
+
// Forward SIGINT to tail process for clean exit
|
|
1203
|
+
const sigintHandler = () => {
|
|
1204
|
+
tail.kill('SIGINT');
|
|
1205
|
+
};
|
|
1206
|
+
process.on('SIGINT', sigintHandler);
|
|
1207
|
+
|
|
1208
|
+
await new Promise((resolve, reject) => {
|
|
1209
|
+
const cleanup = () => {
|
|
1210
|
+
process.removeListener('SIGINT', sigintHandler);
|
|
1211
|
+
};
|
|
1212
|
+
|
|
1213
|
+
tail.once('close', () => {
|
|
1214
|
+
cleanup();
|
|
1215
|
+
resolve();
|
|
1216
|
+
});
|
|
1217
|
+
|
|
1218
|
+
tail.once('error', (error) => {
|
|
1219
|
+
cleanup();
|
|
1220
|
+
reject(error);
|
|
1221
|
+
});
|
|
1222
|
+
});
|
|
1223
|
+
}
|
|
1224
|
+
|
|
733
1225
|
// ---------------------------------------------------------------------------
|
|
734
1226
|
// Argument parsing helper
|
|
735
1227
|
// ---------------------------------------------------------------------------
|
|
@@ -782,39 +1274,127 @@ export function parsePluginArgs(args) {
|
|
|
782
1274
|
// Plugin commands export
|
|
783
1275
|
// ---------------------------------------------------------------------------
|
|
784
1276
|
|
|
1277
|
+
const VALID_SUBCOMMANDS = ['start', 'stop', 'status', 'list', 'list-remote', 'install', 'delete', 'log', 'logs'];
|
|
1278
|
+
|
|
785
1279
|
export const commands = {
|
|
786
1280
|
'cluster': async (args) => {
|
|
787
1281
|
const logger = getLogger();
|
|
788
1282
|
const parsed = parsePluginArgs(args);
|
|
789
1283
|
|
|
790
|
-
if (!parsed.subcommand || !
|
|
1284
|
+
if (!parsed.subcommand || !VALID_SUBCOMMANDS.includes(parsed.subcommand)) {
|
|
791
1285
|
console.log('Usage:');
|
|
792
1286
|
console.log(' c8ctl cluster start [<version>] [--debug]');
|
|
793
|
-
console.log(' c8ctl cluster stop
|
|
1287
|
+
console.log(' c8ctl cluster stop');
|
|
1288
|
+
console.log(' c8ctl cluster status');
|
|
1289
|
+
console.log(' c8ctl cluster logs (alias: log)');
|
|
1290
|
+
console.log(' c8ctl cluster list');
|
|
1291
|
+
console.log(' c8ctl cluster list-remote');
|
|
1292
|
+
console.log(' c8ctl cluster install <version>');
|
|
1293
|
+
console.log(' c8ctl cluster delete <version>');
|
|
794
1294
|
console.log('');
|
|
795
1295
|
console.log('Subcommands:');
|
|
796
|
-
console.log(' start
|
|
797
|
-
console.log(' stop
|
|
1296
|
+
console.log(' start Download (if needed) and start a local Camunda 8 cluster');
|
|
1297
|
+
console.log(' stop Stop the running local Camunda 8 cluster');
|
|
1298
|
+
console.log(' status Show whether a cluster is running and connection details');
|
|
1299
|
+
console.log(' logs Stream log output from the running cluster');
|
|
1300
|
+
console.log(' list List locally cached versions and available version aliases');
|
|
1301
|
+
console.log(' list-remote List all versions available on the remote download server');
|
|
1302
|
+
console.log(' install Download a version without starting it');
|
|
1303
|
+
console.log(' delete Remove a locally cached version to reclaim disk space');
|
|
798
1304
|
console.log('');
|
|
799
1305
|
console.log('Options:');
|
|
800
|
-
console.log(' <version> Camunda version or
|
|
1306
|
+
console.log(' <version> Camunda version, alias, or major.minor (default: stable)');
|
|
801
1307
|
console.log(' --c8-version <version> Alternative flag form for version');
|
|
802
1308
|
console.log(' --debug Stream raw c8run output during start');
|
|
803
1309
|
console.log('');
|
|
804
|
-
console.log('
|
|
1310
|
+
console.log('A <version> can be:');
|
|
1311
|
+
console.log(' stable / alpha Named aliases (dynamically resolved to latest)');
|
|
1312
|
+
console.log(' 8.8, 8.9 Major.minor — rolling release for that minor');
|
|
1313
|
+
console.log(' 8.9.0-alpha5 Exact pinned version');
|
|
1314
|
+
console.log('');
|
|
1315
|
+
console.log(' start uses a local version if available (no remote check).');
|
|
1316
|
+
console.log(' install always checks the remote for a newer rolling release.');
|
|
1317
|
+
console.log('');
|
|
1318
|
+
console.log('Version aliases (dynamically resolved):')
|
|
805
1319
|
for (const [alias, resolved] of await getVersionAliasEntries()) {
|
|
806
|
-
console.log(` ${alias.padEnd(
|
|
1320
|
+
console.log(` ${alias.padEnd(ALIAS_COLUMN_WIDTH)} → ${resolved}`);
|
|
807
1321
|
}
|
|
808
1322
|
console.log('');
|
|
809
1323
|
console.log('Examples:');
|
|
810
|
-
console.log(' c8ctl cluster start # Start using default alias (
|
|
1324
|
+
console.log(' c8ctl cluster start # Start using default alias (stable)');
|
|
811
1325
|
console.log(' c8ctl cluster start stable # Start latest stable release');
|
|
1326
|
+
console.log(' c8ctl cluster start 8.8 # Start latest cached 8.8.x release');
|
|
812
1327
|
console.log(' c8ctl cluster start 8.9.0-alpha5 # Start specific version');
|
|
813
1328
|
console.log(' c8ctl cluster stop');
|
|
1329
|
+
console.log(' c8ctl cluster status');
|
|
1330
|
+
console.log(' c8ctl cluster logs (alias: log)');
|
|
1331
|
+
console.log(' c8ctl cluster list');
|
|
1332
|
+
console.log(' c8ctl cluster list-remote');
|
|
1333
|
+
console.log(' c8ctl cluster install 8.8');
|
|
1334
|
+
console.log(' c8ctl cluster delete 8.8');
|
|
1335
|
+
return;
|
|
1336
|
+
}
|
|
1337
|
+
|
|
1338
|
+
if (parsed.subcommand === 'status') {
|
|
1339
|
+
try {
|
|
1340
|
+
await clusterStatus(getCacheDir());
|
|
1341
|
+
} catch (error) {
|
|
1342
|
+
logger.error(`Failed to get cluster status: ${error}`);
|
|
1343
|
+
process.exit(1);
|
|
1344
|
+
}
|
|
1345
|
+
return;
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1348
|
+
if (parsed.subcommand === 'list') {
|
|
1349
|
+
try {
|
|
1350
|
+
await listInstalledVersions(getCacheDir());
|
|
1351
|
+
} catch (error) {
|
|
1352
|
+
logger.error(`Failed to list versions: ${error}`);
|
|
1353
|
+
process.exit(1);
|
|
1354
|
+
}
|
|
1355
|
+
return;
|
|
1356
|
+
}
|
|
1357
|
+
|
|
1358
|
+
if (parsed.subcommand === 'list-remote') {
|
|
1359
|
+
try {
|
|
1360
|
+
await listRemoteVersions();
|
|
1361
|
+
} catch (error) {
|
|
1362
|
+
logger.error(`Failed to list remote versions: ${error}`);
|
|
1363
|
+
process.exit(1);
|
|
1364
|
+
}
|
|
1365
|
+
return;
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1368
|
+
if (parsed.subcommand === 'log' || parsed.subcommand === 'logs') {
|
|
1369
|
+
try {
|
|
1370
|
+
await streamLogs(getCacheDir());
|
|
1371
|
+
} catch (error) {
|
|
1372
|
+
logger.error(`Failed to stream logs: ${error}`);
|
|
1373
|
+
process.exit(1);
|
|
1374
|
+
}
|
|
814
1375
|
return;
|
|
815
1376
|
}
|
|
816
1377
|
|
|
817
|
-
|
|
1378
|
+
// install and delete require an explicit version argument
|
|
1379
|
+
if (!parsed.version && (parsed.subcommand === 'install' || parsed.subcommand === 'delete')) {
|
|
1380
|
+
const example = parsed.subcommand === 'delete'
|
|
1381
|
+
? 'c8ctl cluster delete 8.8'
|
|
1382
|
+
: 'c8ctl cluster install stable';
|
|
1383
|
+
logger.error(`Please specify a version. Example: ${example}`);
|
|
1384
|
+
process.exit(1);
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
if (parsed.subcommand === 'delete') {
|
|
1388
|
+
try {
|
|
1389
|
+
await deleteVersion(getCacheDir(), parsed.version);
|
|
1390
|
+
} catch (error) {
|
|
1391
|
+
logger.error(`Failed to delete version: ${error}`);
|
|
1392
|
+
process.exit(1);
|
|
1393
|
+
}
|
|
1394
|
+
return;
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
const versionSpec = parsed.version || 'stable';
|
|
818
1398
|
if (!parsed.version && parsed.subcommand === 'start') {
|
|
819
1399
|
logger.info(`No version specified, using default: "${versionSpec}"`);
|
|
820
1400
|
}
|
|
@@ -824,11 +1404,25 @@ export const commands = {
|
|
|
824
1404
|
logger.error(error.message);
|
|
825
1405
|
process.exit(1);
|
|
826
1406
|
}
|
|
827
|
-
const
|
|
1407
|
+
const theCacheDir = getCacheDir();
|
|
1408
|
+
const version = await resolveVersion(versionSpec, {
|
|
1409
|
+
// start: prefer locally-cached alias mapping to avoid a network fetch when already installed
|
|
1410
|
+
preferLocal: parsed.subcommand === 'start',
|
|
1411
|
+
cacheDir: theCacheDir,
|
|
1412
|
+
});
|
|
828
1413
|
if (isVersionAlias(versionSpec)) {
|
|
829
1414
|
logger.info(`Resolved alias "${versionSpec}" → ${version}`);
|
|
830
1415
|
}
|
|
831
|
-
const
|
|
1416
|
+
const rolling = isRollingVersion(versionSpec);
|
|
1417
|
+
const config = {
|
|
1418
|
+
cacheDir: theCacheDir,
|
|
1419
|
+
version,
|
|
1420
|
+
isRolling: rolling,
|
|
1421
|
+
// install: check remote for updates when version is rolling (blocks until done)
|
|
1422
|
+
checkForUpdates: parsed.subcommand === 'install' && rolling,
|
|
1423
|
+
// start: soft hint about available updates for rolling versions (non-blocking)
|
|
1424
|
+
checkForUpdateHint: parsed.subcommand === 'start' && rolling,
|
|
1425
|
+
};
|
|
832
1426
|
|
|
833
1427
|
if (parsed.subcommand === 'start') {
|
|
834
1428
|
try {
|
|
@@ -845,6 +1439,14 @@ export const commands = {
|
|
|
845
1439
|
logger.error(`Failed to stop cluster: ${error}`);
|
|
846
1440
|
process.exit(1);
|
|
847
1441
|
}
|
|
1442
|
+
} else if (parsed.subcommand === 'install') {
|
|
1443
|
+
try {
|
|
1444
|
+
await ensureC8RunInstalled(config);
|
|
1445
|
+
logger.info(`Version ${version} is ready. Start it with: c8ctl cluster start ${parsed.version || ''}`);
|
|
1446
|
+
} catch (error) {
|
|
1447
|
+
logger.error(`Failed to install version: ${error}`);
|
|
1448
|
+
process.exit(1);
|
|
1449
|
+
}
|
|
848
1450
|
}
|
|
849
1451
|
},
|
|
850
1452
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camunda8/cli",
|
|
3
|
-
"version": "2.6.0-alpha.
|
|
3
|
+
"version": "2.6.0-alpha.9",
|
|
4
4
|
"description": "Camunda 8 CLI - minimal-dependency CLI for Camunda 8 operations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
"copy-plugins": "node -e \"const fs=require('fs');const path=require('path');const src='default-plugins';const dest='dist/default-plugins';if(fs.existsSync(src)){fs.cpSync(src,dest,{recursive:true})}\"",
|
|
31
31
|
"copy-templates": "node -e \"const fs=require('fs');const src='src/templates';const dest='dist/templates';if(fs.existsSync(src)){fs.cpSync(src,dest,{recursive:true})}\"",
|
|
32
32
|
"prepublishOnly": "npm run build",
|
|
33
|
-
"test": "node --experimental-strip-types --test
|
|
34
|
-
"test:unit": "node --experimental-strip-types --test
|
|
35
|
-
"test:integration": "node --experimental-strip-types --test tests/integration/*.test.ts",
|
|
33
|
+
"test": "node --experimental-strip-types --test --experimental-test-isolation=none tests/unit/*.test.ts tests/integration/*.test.ts",
|
|
34
|
+
"test:unit": "node --experimental-strip-types --test --experimental-test-isolation=none tests/unit/*.test.ts",
|
|
35
|
+
"test:integration": "node --experimental-strip-types --test --experimental-test-isolation=none tests/integration/*.test.ts",
|
|
36
36
|
"dev": "node src/index.ts",
|
|
37
37
|
"cli": "node src/index.ts"
|
|
38
38
|
},
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
"access": "public"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@camunda8/orchestration-cluster-api": "
|
|
62
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
61
|
+
"@camunda8/orchestration-cluster-api": "8.9.0-alpha.33",
|
|
62
|
+
"@modelcontextprotocol/sdk": "^1.29.0"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@semantic-release/exec": "^7.1.0",
|