larkci 0.2.5 → 0.4.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/README.md +139 -92
- package/dist/commands/archive-workflow.d.ts.map +1 -1
- package/dist/commands/archive-workflow.js +2 -0
- package/dist/commands/archive-workflow.js.map +1 -1
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +41 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create-workflow.d.ts.map +1 -1
- package/dist/commands/create-workflow.js +1 -0
- package/dist/commands/create-workflow.js.map +1 -1
- package/dist/commands/events.d.ts.map +1 -1
- package/dist/commands/events.js +1 -0
- package/dist/commands/events.js.map +1 -1
- package/dist/commands/execution.d.ts.map +1 -1
- package/dist/commands/execution.js +3 -0
- package/dist/commands/execution.js.map +1 -1
- package/dist/commands/generations.d.ts.map +1 -1
- package/dist/commands/generations.js +1 -0
- package/dist/commands/generations.js.map +1 -1
- package/dist/commands/get-workflow.d.ts.map +1 -1
- package/dist/commands/get-workflow.js +1 -0
- package/dist/commands/get-workflow.js.map +1 -1
- package/dist/commands/invoke.d.ts.map +1 -1
- package/dist/commands/invoke.js +67 -4
- package/dist/commands/invoke.js.map +1 -1
- package/dist/commands/list-workflows.d.ts.map +1 -1
- package/dist/commands/list-workflows.js +1 -0
- package/dist/commands/list-workflows.js.map +1 -1
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +64 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +40 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/repairs.d.ts.map +1 -1
- package/dist/commands/repairs.js +5 -0
- package/dist/commands/repairs.js.map +1 -1
- package/dist/commands/secret-contexts.d.ts.map +1 -1
- package/dist/commands/secret-contexts.js +6 -0
- package/dist/commands/secret-contexts.js.map +1 -1
- package/dist/commands/update-workflow.d.ts.map +1 -1
- package/dist/commands/update-workflow.js +1 -0
- package/dist/commands/update-workflow.js.map +1 -1
- package/dist/commands/workflow-groups.d.ts.map +1 -1
- package/dist/commands/workflow-groups.js +5 -0
- package/dist/commands/workflow-groups.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +36 -3
- package/dist/config.js.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/profile.d.ts +21 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +88 -0
- package/dist/profile.js.map +1 -0
- package/dist/prompt.d.ts +3 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +62 -0
- package/dist/prompt.js.map +1 -0
- package/package.json +12 -4
package/dist/index.js
CHANGED
|
@@ -12,13 +12,17 @@ import { registerGenerationsCommand } from "./commands/generations.js";
|
|
|
12
12
|
import { registerEventsCommand } from "./commands/events.js";
|
|
13
13
|
import { registerSecretContextsCommand } from "./commands/secret-contexts.js";
|
|
14
14
|
import { registerWorkflowGroupsCommand } from "./commands/workflow-groups.js";
|
|
15
|
+
import { registerLoginCommand } from "./commands/login.js";
|
|
16
|
+
import { registerLogoutCommand } from "./commands/logout.js";
|
|
17
|
+
import { registerConfigCommand } from "./commands/config.js";
|
|
15
18
|
const program = new Command();
|
|
16
19
|
program
|
|
17
20
|
.name("larkci")
|
|
18
21
|
.description("LarkCI CLI - Invoke testing workflows and manage test executions")
|
|
19
22
|
.version("0.2.5")
|
|
20
23
|
.addOption(new Option("--api-key <key>", "API key").env("LARKCI_API_KEY"))
|
|
21
|
-
.addOption(new Option("--api-url <url>", "API base URL (overrides LARKCI_API_URL env var)").hideHelp())
|
|
24
|
+
.addOption(new Option("--api-url <url>", "API base URL (overrides LARKCI_API_URL env var)").hideHelp())
|
|
25
|
+
.addOption(new Option("--profile <name>", "Profile to read from ~/.getlark/config.json"));
|
|
22
26
|
const workflows = program.command("workflows").description("Manage workflows");
|
|
23
27
|
registerListWorkflowsCommand(workflows, program);
|
|
24
28
|
registerGetWorkflowCommand(workflows, program);
|
|
@@ -32,5 +36,8 @@ registerGenerationsCommand(workflows, program);
|
|
|
32
36
|
registerEventsCommand(workflows, program);
|
|
33
37
|
registerSecretContextsCommand(program);
|
|
34
38
|
registerWorkflowGroupsCommand(program);
|
|
39
|
+
registerLoginCommand(program);
|
|
40
|
+
registerLogoutCommand(program);
|
|
41
|
+
registerConfigCommand(program);
|
|
35
42
|
program.parse();
|
|
36
43
|
//# sourceMappingURL=index.js.map
|
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,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;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,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;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,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;KACA,SAAS,CACR,IAAI,MAAM,CACR,kBAAkB,EAClB,6CAA6C,CAC9C,CACF,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,0BAA0B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC/C,6BAA6B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAClD,6BAA6B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAClD,+BAA+B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACpD,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC1C,wBAAwB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC7C,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC3C,0BAA0B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC/C,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAE1C,6BAA6B,CAAC,OAAO,CAAC,CAAC;AACvC,6BAA6B,CAAC,OAAO,CAAC,CAAC;AAEvC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ProfileData {
|
|
2
|
+
api_key: string;
|
|
3
|
+
api_url?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ConfigFileData {
|
|
6
|
+
current_profile: string;
|
|
7
|
+
profiles: Record<string, ProfileData>;
|
|
8
|
+
}
|
|
9
|
+
export declare const CONFIG_DIR: string;
|
|
10
|
+
export declare const CONFIG_PATH: string;
|
|
11
|
+
export declare const DEFAULT_PROFILE_NAME = "default";
|
|
12
|
+
export declare function readConfigFile(): ConfigFileData | null;
|
|
13
|
+
export declare function writeConfigFile(data: ConfigFileData): void;
|
|
14
|
+
export declare function getProfile(profileName?: string): {
|
|
15
|
+
name: string;
|
|
16
|
+
data: ProfileData;
|
|
17
|
+
} | null;
|
|
18
|
+
export declare function removeProfile(name: string): boolean;
|
|
19
|
+
export declare function setCurrentProfile(name: string): boolean;
|
|
20
|
+
export declare function maskApiKey(key: string): string;
|
|
21
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,UAAU,QAAsC,CAAC;AAC9D,eAAO,MAAM,WAAW,QAAuC,CAAC;AAChE,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAE9C,wBAAgB,cAAc,IAAI,cAAc,GAAG,IAAI,CAgCtD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAK1D;AAED,wBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;CACnB,GAAG,IAAI,CAyBP;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUnD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMvD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C"}
|
package/dist/profile.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
export const CONFIG_DIR = path.join(os.homedir(), ".getlark");
|
|
5
|
+
export const CONFIG_PATH = path.join(CONFIG_DIR, "config.json");
|
|
6
|
+
export const DEFAULT_PROFILE_NAME = "default";
|
|
7
|
+
export function readConfigFile() {
|
|
8
|
+
let raw;
|
|
9
|
+
try {
|
|
10
|
+
raw = fs.readFileSync(CONFIG_PATH, "utf8");
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
if (err.code === "ENOENT")
|
|
14
|
+
return null;
|
|
15
|
+
throw err;
|
|
16
|
+
}
|
|
17
|
+
let parsed;
|
|
18
|
+
try {
|
|
19
|
+
parsed = JSON.parse(raw);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
throw new Error(`Config file at ${CONFIG_PATH} is not valid JSON. Fix or remove it.`);
|
|
23
|
+
}
|
|
24
|
+
if (typeof parsed !== "object" ||
|
|
25
|
+
parsed === null ||
|
|
26
|
+
typeof parsed.profiles !== "object" ||
|
|
27
|
+
parsed.profiles === null) {
|
|
28
|
+
throw new Error(`Config file at ${CONFIG_PATH} is malformed. Expected { current_profile, profiles }.`);
|
|
29
|
+
}
|
|
30
|
+
const data = parsed;
|
|
31
|
+
if (typeof data.current_profile !== "string")
|
|
32
|
+
data.current_profile = "";
|
|
33
|
+
return data;
|
|
34
|
+
}
|
|
35
|
+
export function writeConfigFile(data) {
|
|
36
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
37
|
+
const tmp = `${CONFIG_PATH}.tmp`;
|
|
38
|
+
fs.writeFileSync(tmp, `${JSON.stringify(data, null, 2)}\n`, { mode: 0o600 });
|
|
39
|
+
fs.renameSync(tmp, CONFIG_PATH);
|
|
40
|
+
}
|
|
41
|
+
export function getProfile(profileName) {
|
|
42
|
+
const file = readConfigFile();
|
|
43
|
+
if (!file)
|
|
44
|
+
return null;
|
|
45
|
+
const name = profileName ?? file.current_profile;
|
|
46
|
+
if (!name)
|
|
47
|
+
return null;
|
|
48
|
+
const data = file.profiles[name];
|
|
49
|
+
if (!data) {
|
|
50
|
+
if (profileName) {
|
|
51
|
+
throw new Error(`Profile "${profileName}" not found in ${CONFIG_PATH}. Run \`larkci config list\` to see available profiles.`);
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
if (typeof data !== "object" ||
|
|
56
|
+
data === null ||
|
|
57
|
+
typeof data.api_key !== "string" ||
|
|
58
|
+
data.api_key === "") {
|
|
59
|
+
throw new Error(`Profile "${name}" in ${CONFIG_PATH} is malformed: missing or invalid "api_key".`);
|
|
60
|
+
}
|
|
61
|
+
return { name, data };
|
|
62
|
+
}
|
|
63
|
+
export function removeProfile(name) {
|
|
64
|
+
const file = readConfigFile();
|
|
65
|
+
if (!file || !file.profiles[name])
|
|
66
|
+
return false;
|
|
67
|
+
delete file.profiles[name];
|
|
68
|
+
if (file.current_profile === name) {
|
|
69
|
+
const remaining = Object.keys(file.profiles);
|
|
70
|
+
file.current_profile = remaining[0] ?? "";
|
|
71
|
+
}
|
|
72
|
+
writeConfigFile(file);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
export function setCurrentProfile(name) {
|
|
76
|
+
const file = readConfigFile();
|
|
77
|
+
if (!file || !file.profiles[name])
|
|
78
|
+
return false;
|
|
79
|
+
file.current_profile = name;
|
|
80
|
+
writeConfigFile(file);
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
export function maskApiKey(key) {
|
|
84
|
+
if (key.length <= 4)
|
|
85
|
+
return "****";
|
|
86
|
+
return `****${key.slice(-4)}`;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
|
package/dist/prompt.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAEA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlE;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgDpE"}
|
package/dist/prompt.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import readline from "node:readline";
|
|
2
|
+
export async function promptText(question) {
|
|
3
|
+
const rl = readline.createInterface({
|
|
4
|
+
input: process.stdin,
|
|
5
|
+
output: process.stdout,
|
|
6
|
+
});
|
|
7
|
+
try {
|
|
8
|
+
return await new Promise((resolve) => {
|
|
9
|
+
rl.question(question, (answer) => resolve(answer));
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
finally {
|
|
13
|
+
rl.close();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export async function promptSecret(question) {
|
|
17
|
+
const stdin = process.stdin;
|
|
18
|
+
if (!stdin.isTTY) {
|
|
19
|
+
return promptText(question);
|
|
20
|
+
}
|
|
21
|
+
process.stdout.write(question);
|
|
22
|
+
stdin.setRawMode(true);
|
|
23
|
+
stdin.resume();
|
|
24
|
+
stdin.setEncoding("utf8");
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
let input = "";
|
|
27
|
+
const cleanup = () => {
|
|
28
|
+
stdin.setRawMode(false);
|
|
29
|
+
stdin.pause();
|
|
30
|
+
stdin.off("data", onData);
|
|
31
|
+
};
|
|
32
|
+
const onData = (chunk) => {
|
|
33
|
+
for (const char of chunk) {
|
|
34
|
+
const code = char.charCodeAt(0);
|
|
35
|
+
// Enter (LF, CR) or Ctrl-D (EOT)
|
|
36
|
+
if (char === "\n" || char === "\r" || code === 0x04) {
|
|
37
|
+
cleanup();
|
|
38
|
+
process.stdout.write("\n");
|
|
39
|
+
resolve(input);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Ctrl-C (ETX)
|
|
43
|
+
if (code === 0x03) {
|
|
44
|
+
cleanup();
|
|
45
|
+
process.stdout.write("\n");
|
|
46
|
+
reject(new Error("Aborted."));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Backspace (BS) or Delete (DEL)
|
|
50
|
+
if (code === 0x08 || code === 0x7f) {
|
|
51
|
+
if (input.length > 0)
|
|
52
|
+
input = input.slice(0, -1);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (code >= 32)
|
|
56
|
+
input += char;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
stdin.on("data", onData);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YAC3C,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,CAAC,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE1B,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACxB,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAChC,iCAAiC;gBACjC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBACpD,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC3B,OAAO,CAAC,KAAK,CAAC,CAAC;oBACf,OAAO;gBACT,CAAC;gBACD,eAAe;gBACf,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClB,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC3B,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;oBAC9B,OAAO;gBACT,CAAC;gBACD,iCAAiC;gBACjC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;wBAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACjD,SAAS;gBACX,CAAC;gBACD,IAAI,IAAI,IAAI,EAAE;oBAAE,KAAK,IAAI,IAAI,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "larkci",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "LarkCI CLI - Invoke testing workflows and manage test executions",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "",
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
"bin": {
|
|
10
10
|
"larkci": "./dist/index.js"
|
|
11
11
|
},
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
12
15
|
"files": [
|
|
13
16
|
"dist",
|
|
14
17
|
"README.md"
|
|
@@ -21,14 +24,19 @@
|
|
|
21
24
|
"cli",
|
|
22
25
|
"testing",
|
|
23
26
|
"ci",
|
|
24
|
-
"e2e-testing"
|
|
27
|
+
"e2e-testing",
|
|
28
|
+
"sanity-testing",
|
|
29
|
+
"qa"
|
|
25
30
|
],
|
|
26
31
|
"scripts": {
|
|
27
32
|
"build": "tsc",
|
|
28
33
|
"start": "node dist/index.js",
|
|
29
34
|
"dev": "tsx src/index.ts",
|
|
30
35
|
"typecheck": "tsc --noEmit",
|
|
31
|
-
"prepublishOnly": "npm run build"
|
|
36
|
+
"prepublishOnly": "npm run build",
|
|
37
|
+
"publish:larkci": "npm pkg set name=larkci bin.larkci=./dist/index.js && npm pkg delete bin.getlark && npm publish",
|
|
38
|
+
"publish:scoped": "npm pkg set name=@getlark/cli bin.getlark=./dist/index.js && npm pkg delete bin.larkci && npm publish; code=$?; npm pkg set name=larkci bin.larkci=./dist/index.js && npm pkg delete bin.getlark; exit $code",
|
|
39
|
+
"publish:all": "npm run publish:larkci && npm run publish:scoped"
|
|
32
40
|
},
|
|
33
41
|
"dependencies": {
|
|
34
42
|
"commander": "^13.1.0",
|
|
@@ -39,4 +47,4 @@
|
|
|
39
47
|
"tsx": "^4.19.0",
|
|
40
48
|
"typescript": "^5.7.0"
|
|
41
49
|
}
|
|
42
|
-
}
|
|
50
|
+
}
|