larkci 0.1.2 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -23
- package/dist/api/client.d.ts +2 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +4 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/types.d.ts +8 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/commands/invoke.d.ts +1 -1
- package/dist/commands/invoke.d.ts.map +1 -1
- package/dist/commands/invoke.js +97 -31
- package/dist/commands/invoke.js.map +1 -1
- package/dist/commands/list-workflows.d.ts +3 -0
- package/dist/commands/list-workflows.d.ts.map +1 -0
- package/dist/commands/list-workflows.js +26 -0
- package/dist/commands/list-workflows.js.map +1 -0
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -2,18 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
Command-line interface for invoking and managing LarkCI testing workflows.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Quickstart
|
|
6
6
|
|
|
7
7
|
Requires Node.js >= 18.
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
|
|
10
|
+
npx -y larkci@latest workflows invoke --all --wait
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
Or
|
|
13
|
+
Or install globally:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
|
|
16
|
+
npm install -g larkci@latest
|
|
17
|
+
|
|
18
|
+
larkci workflows invoke --all --wait
|
|
17
19
|
```
|
|
18
20
|
|
|
19
21
|
## Configuration
|
|
@@ -34,28 +36,33 @@ larkci [options] <command>
|
|
|
34
36
|
|
|
35
37
|
### Global Options
|
|
36
38
|
|
|
37
|
-
| Flag
|
|
38
|
-
|
|
39
|
+
| Flag | Description |
|
|
40
|
+
| ----------------- | -------------------------------------------- |
|
|
39
41
|
| `--api-key <key>` | API key (overrides `LARKCI_API_KEY` env var) |
|
|
40
|
-
| `-V, --version`
|
|
41
|
-
| `-h, --help`
|
|
42
|
+
| `-V, --version` | Display the current version |
|
|
43
|
+
| `-h, --help` | Display help |
|
|
42
44
|
|
|
43
45
|
### Commands
|
|
44
46
|
|
|
45
|
-
#### Invoke
|
|
46
|
-
|
|
47
|
-
Start a new execution for a workflow:
|
|
47
|
+
#### Invoke workflows
|
|
48
48
|
|
|
49
49
|
```bash
|
|
50
|
-
|
|
50
|
+
# Invoke all workflows and wait (up to 5 minutes) for completion
|
|
51
|
+
larkci workflows invoke --all --wait --timeout 300
|
|
52
|
+
|
|
53
|
+
# Invoke specific workflows and wait (up to 5 minutes) for completion
|
|
54
|
+
larkci workflows invoke --workflow-ids wf_abc123 wf_def456 wf_ghi789 --wait --timeout 300
|
|
51
55
|
```
|
|
52
56
|
|
|
53
|
-
| Flag
|
|
54
|
-
|
|
55
|
-
| `--
|
|
56
|
-
| `--
|
|
57
|
+
| Flag | Description |
|
|
58
|
+
| ------------------------ | -------------------------------------------------------------------------------- |
|
|
59
|
+
| `--workflow-ids <id...>` | The IDs of the workflow to invoke |
|
|
60
|
+
| `--all` | Invoke all workflows |
|
|
61
|
+
| `--wait` | Wait for the execution to finish (successfully or unsuccessfully) before exiting |
|
|
62
|
+
| `--timeout <seconds>` | Maximum time to wait in seconds (default: 600, requires `--wait`) |
|
|
63
|
+
| `--verbose` | Print verbose output (includes logs) |
|
|
57
64
|
|
|
58
|
-
|
|
65
|
+
Exit codes: `0` = success, `1` = workflow failure, `2` = timeout, `3` = unexpected error.
|
|
59
66
|
|
|
60
67
|
#### Get a workflow execution
|
|
61
68
|
|
|
@@ -76,13 +83,13 @@ larkci workflows executions logs <workflow_id> <execution_id>
|
|
|
76
83
|
### Examples
|
|
77
84
|
|
|
78
85
|
```bash
|
|
79
|
-
# Invoke a workflow
|
|
86
|
+
# Invoke a workflow but don't wait for completion
|
|
80
87
|
larkci workflows invoke wf_abc123
|
|
81
88
|
|
|
82
89
|
# Invoke and wait for completion (10 min default timeout)
|
|
83
90
|
larkci workflows invoke wf_abc123 --wait
|
|
84
91
|
|
|
85
|
-
# Invoke and wait
|
|
92
|
+
# Invoke and wait (up to 5 minutes) for completion
|
|
86
93
|
larkci workflows invoke wf_abc123 --wait --timeout 300
|
|
87
94
|
|
|
88
95
|
# Check execution status
|
|
@@ -95,18 +102,37 @@ larkci workflows executions logs wf_abc123 exec_xyz789
|
|
|
95
102
|
larkci --api-key sk-test-key workflows invoke wf_abc123
|
|
96
103
|
```
|
|
97
104
|
|
|
98
|
-
|
|
105
|
+
## CI Pipeline Usage
|
|
99
106
|
|
|
100
107
|
The `--wait` flag makes it easy to use in CI pipelines. The command will block until the workflow completes and exit with a non-zero code on failure:
|
|
101
108
|
|
|
109
|
+
### GitHub Actions Example
|
|
110
|
+
|
|
111
|
+
Be sure to set the `LARKCI_API_KEY` environment variable in GitHub Actions secrets.
|
|
112
|
+
|
|
102
113
|
```yaml
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
run: larkci workflows invoke ${{ vars.WORKFLOW_ID }} --wait --timeout 300
|
|
114
|
+
- name: Run LarkCI Tests
|
|
115
|
+
run: npx -y larkci@latest workflows invoke --all --wait
|
|
106
116
|
env:
|
|
107
117
|
LARKCI_API_KEY: ${{ secrets.LARKCI_API_KEY }}
|
|
108
118
|
```
|
|
109
119
|
|
|
120
|
+
### CircleCI Example
|
|
121
|
+
|
|
122
|
+
Be sure to set the `LARKCI_API_KEY` environment variable in CircleCI.
|
|
123
|
+
|
|
124
|
+
```yaml
|
|
125
|
+
larkci_tests:
|
|
126
|
+
docker:
|
|
127
|
+
- image: cimg/node:lts
|
|
128
|
+
resource_class: small
|
|
129
|
+
steps:
|
|
130
|
+
- run:
|
|
131
|
+
name: Run LarkCI Tests
|
|
132
|
+
command: |
|
|
133
|
+
npx -y larkci@latest workflows invoke --all --wait
|
|
134
|
+
```
|
|
135
|
+
|
|
110
136
|
## Contributing
|
|
111
137
|
|
|
112
138
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
|
package/dist/api/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Config } from "../config.js";
|
|
2
|
-
import type { WorkflowExecutionResource } from "./types.js";
|
|
2
|
+
import type { WorkflowExecutionResource, WorkflowResource } from "./types.js";
|
|
3
3
|
export declare class TimeoutError extends Error {
|
|
4
4
|
constructor(message: string);
|
|
5
5
|
}
|
|
@@ -14,6 +14,7 @@ export declare class LarkCIClient {
|
|
|
14
14
|
constructor(config: Config);
|
|
15
15
|
private request;
|
|
16
16
|
invokeWorkflow(workflowId: string): Promise<WorkflowExecutionResource>;
|
|
17
|
+
listWorkflows(): Promise<WorkflowResource[]>;
|
|
17
18
|
getWorkflowExecution(workflowId: string, executionId: string): Promise<WorkflowExecutionResource>;
|
|
18
19
|
getWorkflowExecutionLogs(workflowId: string, executionId: string): Promise<string[]>;
|
|
19
20
|
pollWorkflowExecution(workflowId: string, executionId: string, options: PollOptions): Promise<WorkflowExecutionResource>;
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9E,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,CACP,SAAS,EAAE,yBAAyB,EACpC,SAAS,EAAE,MAAM,KACd,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;YAKZ,OAAO;IAyCf,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAQtE,aAAa,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQ5C,oBAAoB,CACxB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,yBAAyB,CAAC;IAO/B,wBAAwB,CAC5B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC;IAOd,qBAAqB,CACzB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,yBAAyB,CAAC;CA6BtC"}
|
package/dist/api/client.js
CHANGED
|
@@ -45,6 +45,10 @@ export class LarkCIClient {
|
|
|
45
45
|
async invokeWorkflow(workflowId) {
|
|
46
46
|
return this.request("POST", `/workflows/${workflowId}/invoke`, {});
|
|
47
47
|
}
|
|
48
|
+
async listWorkflows() {
|
|
49
|
+
const response = await this.request("GET", "/workflows");
|
|
50
|
+
return response.workflows;
|
|
51
|
+
}
|
|
48
52
|
async getWorkflowExecution(workflowId, executionId) {
|
|
49
53
|
return this.request("GET", `/workflows/${workflowId}/executions/${executionId}`);
|
|
50
54
|
}
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
package/dist/api/types.d.ts
CHANGED
package/dist/api/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iCAAiC;IAChD,aAAa,EAAE,YAAY,GAAG,OAAO,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,wBAAwB,EAAE,MAAM,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACtD,SAAS,EAAE,iCAAiC,EAAE,CAAC;IAC/C,KAAK,EAAE,6BAA6B,EAAE,GAAG,IAAI,CAAC;IAC9C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iCAAiC;IAChD,aAAa,EAAE,YAAY,GAAG,OAAO,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,wBAAwB,EAAE,MAAM,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACtD,SAAS,EAAE,iCAAiC,EAAE,CAAC;IAC/C,KAAK,EAAE,6BAA6B,EAAE,GAAG,IAAI,CAAC;IAC9C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../src/commands/invoke.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../src/commands/invoke.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AA4EjD,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,OAAO,GACf,IAAI,CAgJN"}
|
package/dist/commands/invoke.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Option } from "commander";
|
|
1
2
|
import { LarkCIClient, TimeoutError } from "../api/client.js";
|
|
2
3
|
import { getConfig } from "../config.js";
|
|
3
4
|
const DEFAULT_TIMEOUT_SECONDS = 600;
|
|
@@ -10,26 +11,72 @@ function formatElapsed(ms) {
|
|
|
10
11
|
const seconds = totalSeconds % 60;
|
|
11
12
|
return `${minutes}m${seconds}s`;
|
|
12
13
|
}
|
|
14
|
+
const logForWorkflow = (workflowId, message, ...optionalParams) => {
|
|
15
|
+
console.log(`[${workflowId}] ${message}`, ...optionalParams);
|
|
16
|
+
};
|
|
17
|
+
async function invokeWorkflow(client, workflowId, wait, timeoutSeconds, verbose) {
|
|
18
|
+
const execution = await client.invokeWorkflow(workflowId);
|
|
19
|
+
if (!wait) {
|
|
20
|
+
return execution;
|
|
21
|
+
}
|
|
22
|
+
let logOffset = 0;
|
|
23
|
+
const finalExecution = await client.pollWorkflowExecution(workflowId, execution.id, {
|
|
24
|
+
timeoutMs: timeoutSeconds * 1000,
|
|
25
|
+
pollIntervalMs: POLL_INTERVAL_MS,
|
|
26
|
+
onPoll: async (exec, elapsedMs) => {
|
|
27
|
+
if (!verbose) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
logForWorkflow(workflowId, "Status: %s (%s elapsed)", exec.status, formatElapsed(elapsedMs));
|
|
31
|
+
try {
|
|
32
|
+
const logs = await client.getWorkflowExecutionLogs(workflowId, execution.id);
|
|
33
|
+
if (logs.length > logOffset) {
|
|
34
|
+
for (const line of logs.slice(logOffset)) {
|
|
35
|
+
logForWorkflow(workflowId, "Log: %s", line);
|
|
36
|
+
}
|
|
37
|
+
logOffset = logs.length;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Logs may not be available yet (e.g. execution is still pending)
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
return finalExecution;
|
|
46
|
+
}
|
|
13
47
|
export function registerInvokeCommand(workflows, program) {
|
|
14
48
|
workflows
|
|
15
49
|
.command("invoke")
|
|
16
|
-
.description("Invoke
|
|
17
|
-
.
|
|
18
|
-
.option("--
|
|
19
|
-
.option("--
|
|
20
|
-
.
|
|
50
|
+
.description("Invoke workflow(s)")
|
|
51
|
+
.option("--workflow-ids <id...>", "The IDs of the workflow to invoke")
|
|
52
|
+
.option("--all", "Invoke all workflows", false)
|
|
53
|
+
.option("--verbose", "Verbose output", false)
|
|
54
|
+
.option("--wait", "Wait for the execution to reach a terminal status before exiting", false)
|
|
55
|
+
.addOption(new Option("--timeout <seconds>", "Maximum time to wait in seconds.")
|
|
56
|
+
.preset(600)
|
|
57
|
+
.argParser(Number))
|
|
58
|
+
.addHelpText("after", "example:\n\nRun all workflows and wait for completion:\n$ larkci workflows invoke --all --wait\n\nRun a specific workflow and wait for completion:\n$ larkci workflows invoke wf_abc123 --wait")
|
|
59
|
+
.action(async (cmdOpts) => {
|
|
21
60
|
const opts = program.opts();
|
|
22
61
|
const config = getConfig({
|
|
23
62
|
apiKey: opts.apiKey,
|
|
24
63
|
apiUrl: opts.apiUrl,
|
|
25
64
|
});
|
|
26
65
|
const client = new LarkCIClient(config);
|
|
66
|
+
const verbose = cmdOpts.verbose ?? false;
|
|
67
|
+
let workflowIds = [];
|
|
68
|
+
if (cmdOpts.all) {
|
|
69
|
+
const workflows = await client.listWorkflows();
|
|
70
|
+
workflowIds = workflows.map((workflow) => workflow.id);
|
|
71
|
+
}
|
|
72
|
+
else if (cmdOpts.workflowIds) {
|
|
73
|
+
workflowIds = cmdOpts.workflowIds;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.error("Error: No workflow IDs provided. Use --workflow-ids or --all to specify workflows.");
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
27
79
|
try {
|
|
28
|
-
const execution = await client.invokeWorkflow(workflowId);
|
|
29
|
-
if (!cmdOpts.wait) {
|
|
30
|
-
console.log(JSON.stringify(execution, null, 2));
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
80
|
const timeoutSeconds = cmdOpts.timeout
|
|
34
81
|
? parseInt(cmdOpts.timeout, 10)
|
|
35
82
|
: DEFAULT_TIMEOUT_SECONDS;
|
|
@@ -37,31 +84,50 @@ export function registerInvokeCommand(workflows, program) {
|
|
|
37
84
|
console.error("Error: --timeout must be a positive number of seconds");
|
|
38
85
|
process.exit(3);
|
|
39
86
|
}
|
|
40
|
-
|
|
41
|
-
let
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
87
|
+
const workflowExecutionPromises = workflowIds.map((workflowId) => invokeWorkflow(client, workflowId, cmdOpts.wait ?? false, timeoutSeconds, verbose));
|
|
88
|
+
let timeoutPromise;
|
|
89
|
+
if (cmdOpts.timeout) {
|
|
90
|
+
timeoutPromise = new Promise((resolve) => {
|
|
91
|
+
setTimeout(() => {
|
|
92
|
+
resolve();
|
|
93
|
+
}, parseInt(cmdOpts.timeout, 10) * 1000);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
let workflowExecutionResults = [];
|
|
97
|
+
if (timeoutPromise) {
|
|
98
|
+
const result = await Promise.race([
|
|
99
|
+
Promise.allSettled(workflowExecutionPromises),
|
|
100
|
+
timeoutPromise,
|
|
101
|
+
]);
|
|
102
|
+
if (!result) {
|
|
103
|
+
console.error("Timed out waiting for workflow executions to complete");
|
|
104
|
+
process.exit(2);
|
|
105
|
+
}
|
|
106
|
+
workflowExecutionResults = result;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
workflowExecutionResults = await Promise.allSettled(workflowExecutionPromises);
|
|
110
|
+
}
|
|
111
|
+
const failedWorkflowIds = [];
|
|
112
|
+
for (const result of workflowExecutionResults) {
|
|
113
|
+
if (result.status === "fulfilled") {
|
|
114
|
+
if (result.value.status === "success") {
|
|
115
|
+
console.log(`Workflow ${result.value.workflow_id} executed successfully. Execution ID: ${result.value.id}`);
|
|
55
116
|
}
|
|
56
|
-
|
|
57
|
-
|
|
117
|
+
else if (result.value.status === "failure") {
|
|
118
|
+
console.error(`Workflow ${result.value.workflow_id} executed with failure. Execution ID: ${result.value.id}. Summary: ${result.value.summary}`);
|
|
119
|
+
failedWorkflowIds.push(result.value.workflow_id);
|
|
58
120
|
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
console.error(`Error: ${result.reason}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (failedWorkflowIds.length > 0) {
|
|
127
|
+
console.error(`Workflows finished with status "failure": ${failedWorkflowIds.join(", ")}`);
|
|
63
128
|
process.exit(1);
|
|
64
129
|
}
|
|
130
|
+
process.exit(0);
|
|
65
131
|
}
|
|
66
132
|
catch (error) {
|
|
67
133
|
if (error instanceof TimeoutError) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/commands/invoke.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/commands/invoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-workflows.d.ts","sourceRoot":"","sources":["../../src/commands/list-workflows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,OAAO,GACf,IAAI,CAsBN"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { LarkCIClient } from "../api/client.js";
|
|
2
|
+
import { getConfig } from "../config.js";
|
|
3
|
+
export function registerListWorkflowsCommand(workflows, program) {
|
|
4
|
+
workflows
|
|
5
|
+
.command("list")
|
|
6
|
+
.description("List non-archived workflows")
|
|
7
|
+
.action(async () => {
|
|
8
|
+
const opts = program.opts();
|
|
9
|
+
const config = getConfig({
|
|
10
|
+
apiKey: opts.apiKey,
|
|
11
|
+
apiUrl: opts.apiUrl,
|
|
12
|
+
});
|
|
13
|
+
const client = new LarkCIClient(config);
|
|
14
|
+
try {
|
|
15
|
+
let workflows = await client.listWorkflows();
|
|
16
|
+
workflows = workflows.filter((workflow) => !workflow.archived_at);
|
|
17
|
+
console.log(JSON.stringify(workflows, null, 2));
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
21
|
+
console.error(`Error: ${message}`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=list-workflows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-workflows.js","sourceRoot":"","sources":["../../src/commands/list-workflows.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,4BAA4B,CAC1C,SAAkB,EAClB,OAAgB;IAEhB,SAAS;SACN,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,SAAS,CAAC;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC;YACH,IAAI,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;YAC7C,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { Command } from "commander";
|
|
2
|
+
import { Command, Option } from "commander";
|
|
3
3
|
import { registerInvokeCommand } from "./commands/invoke.js";
|
|
4
4
|
import { registerExecutionCommand } from "./commands/execution.js";
|
|
5
|
+
import { registerListWorkflowsCommand } from "./commands/list-workflows.js";
|
|
5
6
|
const program = new Command();
|
|
6
7
|
program
|
|
7
8
|
.name("larkci")
|
|
8
9
|
.description("LarkCI CLI - Invoke testing workflows and manage test executions")
|
|
9
|
-
.version("0.
|
|
10
|
-
.
|
|
11
|
-
.
|
|
12
|
-
const workflows = program
|
|
13
|
-
|
|
14
|
-
.description("Manage workflows");
|
|
10
|
+
.version("0.2.0")
|
|
11
|
+
.addOption(new Option("--api-key <key>", "API key").env("LARKCI_API_KEY"))
|
|
12
|
+
.addOption(new Option("--api-url <url>", "API base URL (overrides LARKCI_API_URL env var)").hideHelp());
|
|
13
|
+
const workflows = program.command("workflows").description("Manage workflows");
|
|
14
|
+
registerListWorkflowsCommand(workflows, program);
|
|
15
15
|
registerInvokeCommand(workflows, program);
|
|
16
16
|
registerExecutionCommand(workflows, program);
|
|
17
17
|
program.parse();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAE5E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CACV,kEAAkE,CACnE;KACA,OAAO,CAAC,OAAO,CAAC;KAChB,SAAS,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;KACzE,SAAS,CACR,IAAI,MAAM,CACR,iBAAiB,EACjB,iDAAiD,CAClD,CAAC,QAAQ,EAAE,CACb,CAAC;AAEJ,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;AAE/E,4BAA4B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjD,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC1C,wBAAwB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAE7C,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "larkci",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "LarkCI CLI - Invoke testing workflows and manage test executions",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "",
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"larkci",
|
|
21
21
|
"cli",
|
|
22
22
|
"testing",
|
|
23
|
-
"ci"
|
|
23
|
+
"ci",
|
|
24
|
+
"e2e-testing"
|
|
24
25
|
],
|
|
25
26
|
"scripts": {
|
|
26
27
|
"build": "tsc",
|