@catladder/cli 0.0.0-next-80fd0ab4 → 0.0.0-next-ebc933f2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles/catenv/index.js +223 -1
- package/dist/bundles/cli/index.js +223 -1
- package/dist/bundles/skills/catladder-cli/SKILL.md +53 -0
- package/dist/bundles/skills/catladder-cli/references/commands.md +273 -0
- package/dist/bundles/skills/catladder-config/SKILL.md +82 -0
- package/dist/bundles/skills/catladder-pipelines/SKILL.md +72 -0
- package/dist/bundles/skills/catladder-secrets/SKILL.md +74 -0
- package/dist/cli/src/scripts/generateCliSkillReference.d.ts +1 -0
- package/dist/cli/src/scripts/generateCliSkillReference.js +87 -0
- package/dist/cli/src/scripts/generateCliSkillReference.js.map +1 -0
- package/dist/pipeline/src/agentSkills/generateAgentSkills.d.ts +22 -0
- package/dist/pipeline/src/agentSkills/generateAgentSkills.js +82 -0
- package/dist/pipeline/src/agentSkills/generateAgentSkills.js.map +1 -0
- package/dist/pipeline/src/agentSkills/index.d.ts +3 -0
- package/dist/pipeline/src/agentSkills/index.js +27 -0
- package/dist/pipeline/src/agentSkills/index.js.map +1 -0
- package/dist/pipeline/src/agentSkills/shippedSkills.d.ts +22 -0
- package/dist/pipeline/src/agentSkills/shippedSkills.js +56 -0
- package/dist/pipeline/src/agentSkills/shippedSkills.js.map +1 -0
- package/dist/pipeline/src/agentSkills/types.d.ts +22 -0
- package/dist/pipeline/src/agentSkills/types.js +25 -0
- package/dist/pipeline/src/agentSkills/types.js.map +1 -0
- package/dist/pipeline/src/constants.js +1 -1
- package/dist/pipeline/src/pipeline/generatePipelineFiles.js +4 -0
- package/dist/pipeline/src/pipeline/generatePipelineFiles.js.map +1 -1
- package/dist/pipeline/src/types/config.d.ts +15 -0
- package/dist/pipeline/src/types/config.js.map +1 -1
- package/dist/skills/catladder-cli/SKILL.md +53 -0
- package/dist/skills/catladder-cli/references/commands.md +273 -0
- package/dist/skills/catladder-config/SKILL.md +82 -0
- package/dist/skills/catladder-pipelines/SKILL.md +72 -0
- package/dist/skills/catladder-secrets/SKILL.md +74 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -2
- package/src/scripts/generateCliSkillReference.ts +102 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.generateAgentSkills = exports.injectGeneratedMarker = exports.AGENT_SKILL_GENERATED_MARKER = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const promises_1 = require("fs/promises");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const shippedSkills_1 = require("./shippedSkills");
|
|
11
|
+
const types_1 = require("./types");
|
|
12
|
+
/**
|
|
13
|
+
* marks a materialized skill file as generated. Cleanup only ever
|
|
14
|
+
* removes skill directories whose SKILL.md carries this marker, so a
|
|
15
|
+
* user's own skills are never touched — even if they picked a
|
|
16
|
+
* `catladder-*` name.
|
|
17
|
+
*/
|
|
18
|
+
exports.AGENT_SKILL_GENERATED_MARKER = "<!-- 🐱 🔨 generated by catladder — do not edit manually, this file is overwritten on every catenv run -->";
|
|
19
|
+
/**
|
|
20
|
+
* inserts the generated-marker into a markdown file: after the YAML
|
|
21
|
+
* frontmatter when there is one (a leading comment would break
|
|
22
|
+
* frontmatter parsing), at the top otherwise
|
|
23
|
+
*/
|
|
24
|
+
const injectGeneratedMarker = content => {
|
|
25
|
+
if (content.startsWith("---\n")) {
|
|
26
|
+
const frontmatterEnd = content.indexOf("\n---\n", 3);
|
|
27
|
+
if (frontmatterEnd !== -1) {
|
|
28
|
+
const bodyStart = frontmatterEnd + "\n---\n".length;
|
|
29
|
+
return content.slice(0, bodyStart) + "\n" + exports.AGENT_SKILL_GENERATED_MARKER + "\n" + content.slice(bodyStart);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return exports.AGENT_SKILL_GENERATED_MARKER + "\n\n" + content;
|
|
33
|
+
};
|
|
34
|
+
exports.injectGeneratedMarker = injectGeneratedMarker;
|
|
35
|
+
/**
|
|
36
|
+
* removes previously materialized catladder skills from ALL known
|
|
37
|
+
* target directories (not just the enabled ones), so that opting out
|
|
38
|
+
* or narrowing the targets doesn't leave stale copies behind
|
|
39
|
+
*/
|
|
40
|
+
const cleanupGeneratedAgentSkills = async rootDir => {
|
|
41
|
+
for (const targetDir of Object.values(types_1.AGENT_SKILL_TARGET_DIRS)) {
|
|
42
|
+
const skillsRoot = (0, path_1.join)(rootDir, targetDir);
|
|
43
|
+
if (!(0, fs_1.existsSync)(skillsRoot)) continue;
|
|
44
|
+
for (const entry of await (0, promises_1.readdir)(skillsRoot)) {
|
|
45
|
+
if (!entry.startsWith(shippedSkills_1.AGENT_SKILL_PREFIX)) continue;
|
|
46
|
+
const skillMd = (0, path_1.join)(skillsRoot, entry, "SKILL.md");
|
|
47
|
+
if (!(0, fs_1.existsSync)(skillMd)) continue;
|
|
48
|
+
const content = await (0, promises_1.readFile)(skillMd, "utf-8");
|
|
49
|
+
if (!content.includes(exports.AGENT_SKILL_GENERATED_MARKER)) continue;
|
|
50
|
+
await (0, promises_1.rm)((0, path_1.join)(skillsRoot, entry), {
|
|
51
|
+
recursive: true,
|
|
52
|
+
force: true
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* materializes the agent skills shipped with catladder (usage guides
|
|
59
|
+
* for AI coding agents) into the repository's agent skill directories,
|
|
60
|
+
* so agents working in the project use knowledge matching the installed
|
|
61
|
+
* catladder version. Opt out or narrow the targets via
|
|
62
|
+
* `agentSkills` in the config.
|
|
63
|
+
*/
|
|
64
|
+
const generateAgentSkills = async (context, rootDir = ".") => {
|
|
65
|
+
await cleanupGeneratedAgentSkills(rootDir);
|
|
66
|
+
const targets = (0, types_1.getAgentSkillTargets)(context.config.agentSkills);
|
|
67
|
+
if (targets.length === 0) return;
|
|
68
|
+
const skills = (0, shippedSkills_1.getShippedSkills)();
|
|
69
|
+
for (const target of targets) {
|
|
70
|
+
for (const skill of skills) {
|
|
71
|
+
for (const file of skill.files) {
|
|
72
|
+
const path = (0, path_1.join)(rootDir, types_1.AGENT_SKILL_TARGET_DIRS[target], skill.name, file.relativePath);
|
|
73
|
+
await (0, promises_1.mkdir)((0, path_1.dirname)(path), {
|
|
74
|
+
recursive: true
|
|
75
|
+
});
|
|
76
|
+
const content = file.relativePath.endsWith(".md") ? (0, exports.injectGeneratedMarker)(file.content) : file.content;
|
|
77
|
+
await context.fileWriter.writeGeneratedFileRaw(path, content);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
exports.generateAgentSkills = generateAgentSkills;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateAgentSkills.js","sourceRoot":"","sources":["../../../../../pipeline/src/agentSkills/generateAgentSkills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () {
|
|
10
|
+
return m[k];
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
} : function (o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
});
|
|
19
|
+
var __exportStar = this && this.__exportStar || function (m, exports) {
|
|
20
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", {
|
|
23
|
+
value: true
|
|
24
|
+
});
|
|
25
|
+
__exportStar(require("./types"), exports);
|
|
26
|
+
__exportStar(require("./shippedSkills"), exports);
|
|
27
|
+
__exportStar(require("./generateAgentSkills"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../pipeline/src/agentSkills/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,kDAAgC;AAChC,wDAAsC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* all catladder skills use this prefix; it marks the namespace
|
|
3
|
+
* catladder owns inside the agent skill directories (regeneration may
|
|
4
|
+
* remove stale `catladder-*` skills it generated earlier)
|
|
5
|
+
*/
|
|
6
|
+
export declare const AGENT_SKILL_PREFIX = "catladder-";
|
|
7
|
+
export type ShippedSkill = {
|
|
8
|
+
/** the skill directory name, e.g. "catladder-config" */
|
|
9
|
+
name: string;
|
|
10
|
+
/** all files of the skill, relative to the skill directory */
|
|
11
|
+
files: Array<{
|
|
12
|
+
relativePath: string;
|
|
13
|
+
content: string;
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* the directory containing the agent skill definitions shipped with
|
|
18
|
+
* the package (copied into dist at build time; the repository layout
|
|
19
|
+
* is the fallback for development and tests)
|
|
20
|
+
*/
|
|
21
|
+
export declare const getShippedSkillsDir: () => string;
|
|
22
|
+
export declare const getShippedSkills: () => ShippedSkill[];
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getShippedSkills = exports.getShippedSkillsDir = exports.AGENT_SKILL_PREFIX = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
/**
|
|
10
|
+
* all catladder skills use this prefix; it marks the namespace
|
|
11
|
+
* catladder owns inside the agent skill directories (regeneration may
|
|
12
|
+
* remove stale `catladder-*` skills it generated earlier)
|
|
13
|
+
*/
|
|
14
|
+
exports.AGENT_SKILL_PREFIX = "catladder-";
|
|
15
|
+
/**
|
|
16
|
+
* the directory containing the agent skill definitions shipped with
|
|
17
|
+
* the package (copied into dist at build time; the repository layout
|
|
18
|
+
* is the fallback for development and tests)
|
|
19
|
+
*/
|
|
20
|
+
const getShippedSkillsDir = () => {
|
|
21
|
+
const candidates = [
|
|
22
|
+
// built pipeline package: dist/agentSkills -> dist/skills
|
|
23
|
+
// bundled cli package (what consumers install): the ncc bundles live
|
|
24
|
+
// in dist/bundles/<name>, so both resolve to dist/bundles/skills
|
|
25
|
+
(0, path_1.join)(__dirname, "..", "skills"),
|
|
26
|
+
// cli tsc dist (catenv-dev): dist/pipeline/src/agentSkills -> dist/skills
|
|
27
|
+
// repository: pipeline/src/agentSkills -> <root>/skills
|
|
28
|
+
(0, path_1.join)(__dirname, "..", "..", "..", "skills")];
|
|
29
|
+
const found = candidates.find(candidate => (0, fs_1.existsSync)(candidate));
|
|
30
|
+
if (!found) {
|
|
31
|
+
throw new Error("shipped agent skill definitions not found");
|
|
32
|
+
}
|
|
33
|
+
return found;
|
|
34
|
+
};
|
|
35
|
+
exports.getShippedSkillsDir = getShippedSkillsDir;
|
|
36
|
+
const readFilesRecursively = (dir, relativeTo) => (0, fs_1.readdirSync)(dir).sort().flatMap(entry => {
|
|
37
|
+
const fullPath = (0, path_1.join)(dir, entry);
|
|
38
|
+
if ((0, fs_1.statSync)(fullPath).isDirectory()) {
|
|
39
|
+
return readFilesRecursively(fullPath, relativeTo);
|
|
40
|
+
}
|
|
41
|
+
return [{
|
|
42
|
+
relativePath: fullPath.slice(relativeTo.length + 1),
|
|
43
|
+
content: (0, fs_1.readFileSync)(fullPath, "utf-8")
|
|
44
|
+
}];
|
|
45
|
+
});
|
|
46
|
+
const getShippedSkills = () => {
|
|
47
|
+
const skillsDir = (0, exports.getShippedSkillsDir)();
|
|
48
|
+
return (0, fs_1.readdirSync)(skillsDir).sort().filter(entry => (0, fs_1.statSync)((0, path_1.join)(skillsDir, entry)).isDirectory()).map(name => {
|
|
49
|
+
const skillDir = (0, path_1.join)(skillsDir, name);
|
|
50
|
+
return {
|
|
51
|
+
name,
|
|
52
|
+
files: readFilesRecursively(skillDir, skillDir)
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
exports.getShippedSkills = getShippedSkills;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shippedSkills.js","sourceRoot":"","sources":["../../../../../pipeline/src/agentSkills/shippedSkills.ts"],"names":[],"mappings":";;;AAAA,2BAAqE;AACrE,+BAA4B;AAE5B;;;;GAIG;AACU,QAAA,kBAAkB,GAAG,YAAY,CAAC;AAS/C;;;;GAIG;AACI,MAAM,mBAAmB,GAAG,GAAW,EAAE;IAC9C,MAAM,UAAU,GAAG;QACjB,0DAA0D;QAC1D,qEAAqE;QACrE,iEAAiE;QACjE,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC;QAC/B,0EAA0E;QAC1E,wDAAwD;QACxD,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC;KAC5C,CAAC;IACF,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAA,eAAU,EAAC,SAAS,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAfW,QAAA,mBAAmB,uBAe9B;AAEF,MAAM,oBAAoB,GAAG,CAC3B,GAAW,EACX,UAAkB,EACgC,EAAE,CACpD,IAAA,gBAAW,EAAC,GAAG,CAAC;KACb,IAAI,EAAE;KACN,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;IACjB,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClC,IAAI,IAAA,aAAQ,EAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;IACD,OAAO;QACL;YACE,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YACnD,OAAO,EAAE,IAAA,iBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC;SACzC;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEA,MAAM,gBAAgB,GAAG,GAAmB,EAAE;IACnD,MAAM,SAAS,GAAG,IAAA,2BAAmB,GAAE,CAAC;IACxC,OAAO,IAAA,gBAAW,EAAC,SAAS,CAAC;SAC1B,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,aAAQ,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACjE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACvC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AATW,QAAA,gBAAgB,oBAS3B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* where agent skills get materialized, per agent ecosystem:
|
|
3
|
+
* - claude-code: the Claude Code project skills directory
|
|
4
|
+
* - agents: the cross-agent universal skills directory
|
|
5
|
+
* (https://agents.md convention, picked up by Cursor, Codex, ...)
|
|
6
|
+
*/
|
|
7
|
+
export declare const AGENT_SKILL_TARGET_DIRS: {
|
|
8
|
+
readonly "claude-code": ".claude/skills";
|
|
9
|
+
readonly agents: ".agents/skills";
|
|
10
|
+
};
|
|
11
|
+
export type AgentSkillTargetName = keyof typeof AGENT_SKILL_TARGET_DIRS;
|
|
12
|
+
/**
|
|
13
|
+
* agent skills materialization, see {@link Config.agentSkills}
|
|
14
|
+
*/
|
|
15
|
+
export type AgentSkillsConfig = boolean | {
|
|
16
|
+
/**
|
|
17
|
+
* which agent skill directories to write to.
|
|
18
|
+
* Defaults to all known targets.
|
|
19
|
+
*/
|
|
20
|
+
targets?: AgentSkillTargetName[];
|
|
21
|
+
};
|
|
22
|
+
export declare const getAgentSkillTargets: (agentSkills: AgentSkillsConfig | undefined) => AgentSkillTargetName[];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getAgentSkillTargets = exports.AGENT_SKILL_TARGET_DIRS = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* where agent skills get materialized, per agent ecosystem:
|
|
9
|
+
* - claude-code: the Claude Code project skills directory
|
|
10
|
+
* - agents: the cross-agent universal skills directory
|
|
11
|
+
* (https://agents.md convention, picked up by Cursor, Codex, ...)
|
|
12
|
+
*/
|
|
13
|
+
exports.AGENT_SKILL_TARGET_DIRS = {
|
|
14
|
+
"claude-code": ".claude/skills",
|
|
15
|
+
agents: ".agents/skills"
|
|
16
|
+
};
|
|
17
|
+
const getAgentSkillTargets = agentSkills => {
|
|
18
|
+
var _a;
|
|
19
|
+
if (agentSkills === false) return [];
|
|
20
|
+
if (agentSkills === true || agentSkills === undefined) {
|
|
21
|
+
return Object.keys(exports.AGENT_SKILL_TARGET_DIRS);
|
|
22
|
+
}
|
|
23
|
+
return (_a = agentSkills.targets) !== null && _a !== void 0 ? _a : Object.keys(exports.AGENT_SKILL_TARGET_DIRS);
|
|
24
|
+
};
|
|
25
|
+
exports.getAgentSkillTargets = getAgentSkillTargets;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../pipeline/src/agentSkills/types.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACU,QAAA,uBAAuB,GAAG;IACrC,aAAa,EAAE,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB;CAChB,CAAC;AAiBJ,MAAM,oBAAoB,GAAG,CAClC,WAA0C,EAClB,EAAE;;IAC1B,IAAI,WAAW,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC,IAAI,CAAC,+BAAuB,CAA2B,CAAC;IACxE,CAAC;IACD,OAAO,CACL,MAAA,WAAW,CAAC,OAAO,mCAClB,MAAM,CAAC,IAAI,CAAC,+BAAuB,CAA4B,CACjE,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,oBAAoB,wBAW/B"}
|
|
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.DOCKER_REGISTRY = exports.PIPELINE_IMAGE_TAG = void 0;
|
|
7
|
-
exports.PIPELINE_IMAGE_TAG = "next-
|
|
7
|
+
exports.PIPELINE_IMAGE_TAG = "next-ebc933f2" || "latest";
|
|
8
8
|
exports.DOCKER_REGISTRY = "git.panter.ch:5001/catladder/catladder" || "git.panter.ch:5001/catladder/catladder";
|
|
@@ -10,6 +10,7 @@ const backends_1 = require("../backends");
|
|
|
10
10
|
const gitlab_1 = require("../backends/gitlab");
|
|
11
11
|
const jobImagesPlan_1 = require("../customImages/jobImagesPlan");
|
|
12
12
|
const shippedCatci_1 = require("../catci/shippedCatci");
|
|
13
|
+
const agentSkills_1 = require("../agentSkills");
|
|
13
14
|
/**
|
|
14
15
|
* generates the pipeline files of all pipeline types enabled in the
|
|
15
16
|
* config (see `pipelines`). Pass an explicit `pipelineType` to generate
|
|
@@ -31,6 +32,9 @@ async function generatePipelineFiles(context, pipelineType) {
|
|
|
31
32
|
recursive: true,
|
|
32
33
|
force: true
|
|
33
34
|
});
|
|
35
|
+
// agent skills are backend-independent, materialized once per full
|
|
36
|
+
// generation
|
|
37
|
+
await (0, agentSkills_1.generateAgentSkills)(context);
|
|
34
38
|
}
|
|
35
39
|
for (const type of pipelineTypes) {
|
|
36
40
|
await generatePipelineFilesForBackend(context, (0, backends_1.getPipelineBackend)(type));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generatePipelineFiles.js","sourceRoot":"","sources":["../../../../../pipeline/src/pipeline/generatePipelineFiles.ts"],"names":[],"mappings":";;;AAAA,0CAAwC;AACxC,+BAA+B;AAI/B,0CAA0E;AAC1E,+CAAmD;AAEnD,iEAAwE;AACxE,wDAA+D;
|
|
1
|
+
{"version":3,"file":"generatePipelineFiles.js","sourceRoot":"","sources":["../../../../../pipeline/src/pipeline/generatePipelineFiles.ts"],"names":[],"mappings":";;;AAAA,0CAAwC;AACxC,+BAA+B;AAI/B,0CAA0E;AAC1E,+CAAmD;AAEnD,iEAAwE;AACxE,wDAA+D;AAC/D,gDAAqD;AAErD;;;;GAIG;AACI,KAAK,UAAU,qBAAqB,CACzC,OAAsB,EACtB,YAA2B;IAE3B,MAAM,aAAa,GAAG,YAAY;QAChC,CAAC,CAAC,CAAC,YAAY,CAAC;QAChB,CAAC,CAAC,IAAA,kCAAuB,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,oEAAoE;QACpE,kEAAkE;QAClE,oEAAoE;QACpE,0CAA0C;QAC1C,MAAM,IAAA,aAAE,EAAC,uCAAuB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,iEAAiE;QACjE,MAAM,IAAA,aAAE,EAAC,qCAAsB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,mEAAmE;QACnE,aAAa;QACb,MAAM,IAAA,iCAAmB,EAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,+BAA+B,CAAC,OAAO,EAAE,IAAA,6BAAkB,EAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAxBD,sDAwBC;AAED,KAAK,UAAU,+BAA+B,CAC5C,OAAsB,EACtB,OAAwB;IAExB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAExD,4CAA4C;IAC5C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACxB,cAAc;IACd,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,IAAA,gBAAK,EAAC,IAAA,cAAO,EAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,yBAAyB,CAAC,MAAc;IAC5D,OAAO,IAAI,sBAAa,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC5D,CAAC;AAFD,8DAEC"}
|
|
@@ -8,6 +8,7 @@ import type { AgentConfig } from "./agent";
|
|
|
8
8
|
import type { Hooks } from "./hooks";
|
|
9
9
|
import type { ReleaseConfig } from "./release";
|
|
10
10
|
import type { CatladderStore } from "../store";
|
|
11
|
+
import type { AgentSkillsConfig } from "../agentSkills/types";
|
|
11
12
|
import type { VerifyConfig } from "../verify/types";
|
|
12
13
|
export declare const ALL_PIPELINE_TRIGGERS: readonly ["mainBranch", "mr", "taggedRelease"];
|
|
13
14
|
export type PipelineTrigger = (typeof ALL_PIPELINE_TRIGGERS)[number];
|
|
@@ -254,6 +255,20 @@ export type Config<C extends ConfigProps = never> = {
|
|
|
254
255
|
* github, where the central registry is not reachable)
|
|
255
256
|
*/
|
|
256
257
|
jobImages?: "central" | "repo";
|
|
258
|
+
/**
|
|
259
|
+
* materialize the agent skills shipped with catladder (usage guides
|
|
260
|
+
* for AI coding agents like Claude Code) into the repository, so
|
|
261
|
+
* agents working in the project use knowledge matching the installed
|
|
262
|
+
* catladder version. The skills are written on every generation into
|
|
263
|
+
* `catladder-*` directories under the agent skill folders (e.g.
|
|
264
|
+
* `.claude/skills/`) — that namespace is owned by catladder and must
|
|
265
|
+
* not be edited manually.
|
|
266
|
+
*
|
|
267
|
+
* - `true` (default): write to all known agent skill directories
|
|
268
|
+
* - `false`: opt out (previously generated skills are removed)
|
|
269
|
+
* - `{ targets: [...] }`: only write to the given targets
|
|
270
|
+
*/
|
|
271
|
+
agentSkills?: AgentSkillsConfig;
|
|
257
272
|
/**
|
|
258
273
|
* name of the customer or group
|
|
259
274
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../pipeline/src/types/config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../pipeline/src/types/config.ts"],"names":[],"mappings":";;;AAca,QAAA,qBAAqB,GAAG;IACnC,YAAY;IACZ,IAAI;IACJ,eAAe;CACP,CAAC;AAGX;;;GAGG;AACU,QAAA,SAAS,GAAG;IACvB,GAAG,EAAE;QACH,QAAQ,EAAE,CAAC,YAAY,CAAC;KACzB;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,CAAC,IAAI,CAAC;KACjB;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,CAAC,eAAe,CAAC;KAC5B;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,eAAe,CAAC;KAC5B;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,EAAE;KACb;CACO,CAAC;AAEX;;;;GAIG;AACI,MAAM,oBAAoB,GAAG,CAAC,OAAwB,EAAE,EAAE,CAC/D,MAAM,CAAC,OAAO,CAAC,iBAAS,CAAC;KACtB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CACf,CAAC,CAAC,QAAuC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC7D;KACA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAY,CAAC,CAAC;AALnB,QAAA,oBAAoB,wBAKD;AAEnB,QAAA,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAS,CAAC,CAAC;AACtC,QAAA,iBAAiB,GAAG,oBAAyB,CAAC;AAGpD,MAAM,aAAa,GAAG,CAAC,GAAW,EAAkB,EAAE;IAC3D,OAAO,GAAG,IAAI,iBAAS,CAAC;AAC1B,CAAC,CAAC;AAFW,QAAA,aAAa,iBAExB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: catladder-cli
|
|
3
|
+
description: How to invoke the catladder CLI non-interactively — command structure, passing inputs via flags or --inputs JSON, skipping prompts, and the full generated command reference. Use when running any `catladder` command (project setup, doctor, secrets, k8s, ci, cloudsql, mongo) or when unsure which catladder command exists for a task. Triggers on "catladder command", "yarn catladder", "project doctor", "project setup", "run catladder".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Using the catladder CLI
|
|
7
|
+
|
|
8
|
+
catladder is installed per project — invoke it as `yarn catladder`
|
|
9
|
+
(never a globally installed copy). Every command can run
|
|
10
|
+
non-interactively, which is the mode agents should use.
|
|
11
|
+
|
|
12
|
+
## Invocation
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
yarn catladder <command...> [args] [flags]
|
|
16
|
+
|
|
17
|
+
# examples
|
|
18
|
+
yarn catladder project doctor
|
|
19
|
+
yarn catladder project ci job-log
|
|
20
|
+
yarn catladder --help # command tree
|
|
21
|
+
yarn catladder project --help # subcommands of a group
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Passing inputs
|
|
25
|
+
|
|
26
|
+
Commands declare typed inputs. Any input not provided on the command
|
|
27
|
+
line is prompted for interactively — in a non-interactive context
|
|
28
|
+
(agents!) provide them up front:
|
|
29
|
+
|
|
30
|
+
- positional inputs: `yarn catladder project k8s list-pods dev:api`
|
|
31
|
+
- flag per input: `--some-input value` (kebab-case of the input name),
|
|
32
|
+
booleans as `--flag` / `--no-flag`
|
|
33
|
+
- all at once as JSON: `--inputs '{"envComponent": "dev:api"}'`
|
|
34
|
+
- `-y` / `--yes` skips confirmation prompts
|
|
35
|
+
|
|
36
|
+
A missing required input fails with a message naming the exact flag to
|
|
37
|
+
pass. Environment/component selectors use the `env:component` form
|
|
38
|
+
(e.g. `dev:api`, `review-123:www`).
|
|
39
|
+
|
|
40
|
+
Some commands are inherently interactive (e.g.
|
|
41
|
+
`project config-secrets` opens `$EDITOR`) — ask the user to run those.
|
|
42
|
+
|
|
43
|
+
## Command reference
|
|
44
|
+
|
|
45
|
+
See [references/commands.md](references/commands.md) for all commands
|
|
46
|
+
with their descriptions and inputs (generated from the CLI itself, so
|
|
47
|
+
it matches the installed version).
|
|
48
|
+
|
|
49
|
+
## Related skills
|
|
50
|
+
|
|
51
|
+
- `catladder-config` — catladder.ts structure and regeneration
|
|
52
|
+
- `catladder-secrets` — env vars and secret management
|
|
53
|
+
- `catladder-pipelines` — pipeline behavior and CI debugging
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# catladder CLI command reference
|
|
2
|
+
|
|
3
|
+
<!-- rendered from the command definitions by
|
|
4
|
+
cli/src/scripts/generateCliSkillReference.ts — do not edit -->
|
|
5
|
+
|
|
6
|
+
All commands run non-interactively as `yarn catladder <command> ...`;
|
|
7
|
+
see SKILL.md for how to pass inputs.
|
|
8
|
+
|
|
9
|
+
## `catladder cloudsql restore-db`
|
|
10
|
+
|
|
11
|
+
restore a db from one source to another target
|
|
12
|
+
|
|
13
|
+
- `--source <value>`: Source instance (connection string or 'local')?
|
|
14
|
+
- `--source-local-port <value>`: Local Port for source? (default: 5432)
|
|
15
|
+
- `--source-username <value>`: Source Username? (default: "postgres")
|
|
16
|
+
- `--source-password <value>`: Source Password?
|
|
17
|
+
- `--source-db-name <value>`: Source DB name?
|
|
18
|
+
- `--target <value>`: Target INSTANCE (connection string or 'local')?
|
|
19
|
+
- `--target-local-port <value>`: Local Port for target? (default: 5432)
|
|
20
|
+
- `--target-username <value>`: Target Username? (default: "postgres")
|
|
21
|
+
- `--target-password <value>`: Target Password?
|
|
22
|
+
- `--target-db-name <value>`: Target DB name?
|
|
23
|
+
|
|
24
|
+
## `catladder fun dadjoke`
|
|
25
|
+
|
|
26
|
+
something for jonas.
|
|
27
|
+
|
|
28
|
+
## `catladder fun starwars`
|
|
29
|
+
|
|
30
|
+
Long time ago... in a galaxy far far away...
|
|
31
|
+
|
|
32
|
+
## `catladder k8s current-context`
|
|
33
|
+
|
|
34
|
+
show current kubernetes context
|
|
35
|
+
|
|
36
|
+
## `catladder k8s get-shell [namespace]`
|
|
37
|
+
|
|
38
|
+
get a shell to a pod in the environment
|
|
39
|
+
|
|
40
|
+
- `namespace` (positional): kubernetes namespace
|
|
41
|
+
- `--pod-name <value>`: Which pod?
|
|
42
|
+
|
|
43
|
+
## `catladder k8s list-namespaces`
|
|
44
|
+
|
|
45
|
+
list all namespaces
|
|
46
|
+
|
|
47
|
+
## `catladder k8s list-pods [namespace]`
|
|
48
|
+
|
|
49
|
+
list all pods of namespace
|
|
50
|
+
|
|
51
|
+
- `namespace` (positional): kubernetes namespace
|
|
52
|
+
|
|
53
|
+
## `catladder k8s list-secrets [namespace]`
|
|
54
|
+
|
|
55
|
+
show secrets
|
|
56
|
+
|
|
57
|
+
- `namespace` (positional): kubernetes namespace
|
|
58
|
+
|
|
59
|
+
## `catladder k8s port-forward [namespace]`
|
|
60
|
+
|
|
61
|
+
start port-forwarding
|
|
62
|
+
|
|
63
|
+
- `namespace` (positional): kubernetes namespace
|
|
64
|
+
- `--pod-name <value>`: Which pod?
|
|
65
|
+
- `--local-port <value>`: Local port:
|
|
66
|
+
- `--remote-port <value>`: Remote port:
|
|
67
|
+
|
|
68
|
+
## `catladder k8s stop-portforward [name]`
|
|
69
|
+
|
|
70
|
+
stop a running port forward
|
|
71
|
+
|
|
72
|
+
- `name` (positional): port forward name
|
|
73
|
+
|
|
74
|
+
## `catladder k8s trigger-cronjob [namespace]`
|
|
75
|
+
|
|
76
|
+
trigger cronjob
|
|
77
|
+
|
|
78
|
+
- `namespace` (positional): kubernetes namespace
|
|
79
|
+
- `--job-name <value>`: Which cronjob?
|
|
80
|
+
|
|
81
|
+
## `catladder project ci job-log`
|
|
82
|
+
|
|
83
|
+
Show a job's log
|
|
84
|
+
|
|
85
|
+
- `--job-name <value>`: Which job?
|
|
86
|
+
|
|
87
|
+
## `catladder project ci job-open`
|
|
88
|
+
|
|
89
|
+
Open a Job
|
|
90
|
+
|
|
91
|
+
- `--job-name <value>`: Which job?
|
|
92
|
+
|
|
93
|
+
## `catladder project cloudsql proxy [envComponent]`
|
|
94
|
+
|
|
95
|
+
proxy to cloud sql db
|
|
96
|
+
|
|
97
|
+
- `envComponent` (positional): environment:component
|
|
98
|
+
- `--local-port <value>`: Local port: (default: 54320)
|
|
99
|
+
|
|
100
|
+
## `catladder project cloudsql restore-db`
|
|
101
|
+
|
|
102
|
+
restores a project db from one source to another target
|
|
103
|
+
|
|
104
|
+
- `--source <value>`: Source instance?
|
|
105
|
+
- `--target <value>`: target env?
|
|
106
|
+
- `--confirm-instance <value>`: confirm:
|
|
107
|
+
|
|
108
|
+
## `catladder project config-secrets [envComponent]`
|
|
109
|
+
|
|
110
|
+
setup/update secrets stored in pass
|
|
111
|
+
|
|
112
|
+
- `envComponent` (positional): environment:component
|
|
113
|
+
|
|
114
|
+
## `catladder project doctor [component]`
|
|
115
|
+
|
|
116
|
+
Checks for drift between the config and the provisioned infrastructure (read-only): service accounts, IAM roles, gitlab tokens, github secrets, store entries.
|
|
117
|
+
|
|
118
|
+
- `component` (positional): component name
|
|
119
|
+
|
|
120
|
+
## `catladder project env-vars [envComponent]`
|
|
121
|
+
|
|
122
|
+
list env vars
|
|
123
|
+
|
|
124
|
+
- `envComponent` (positional): environment:component
|
|
125
|
+
|
|
126
|
+
## `catladder project k8s delete [envComponent]`
|
|
127
|
+
|
|
128
|
+
deletes a environment of a project (it deletes the namespace)
|
|
129
|
+
|
|
130
|
+
- `envComponent` (positional): environment:component
|
|
131
|
+
|
|
132
|
+
## `catladder project k8s delete-pods [envComponent]`
|
|
133
|
+
|
|
134
|
+
delete / restart pods
|
|
135
|
+
|
|
136
|
+
- `envComponent` (positional): environment:component
|
|
137
|
+
- `--selected-pod-names <value>`: Which pods to delete / restart ?
|
|
138
|
+
|
|
139
|
+
## `catladder project k8s get-shell [envComponent]`
|
|
140
|
+
|
|
141
|
+
get a shell to a pod in the environment
|
|
142
|
+
|
|
143
|
+
- `envComponent` (positional): environment:component
|
|
144
|
+
- `--pod-name <value>`: Which pod?
|
|
145
|
+
|
|
146
|
+
## `catladder project k8s list-pods [envComponent]`
|
|
147
|
+
|
|
148
|
+
list pods of local project
|
|
149
|
+
|
|
150
|
+
- `envComponent` (positional): environment:component
|
|
151
|
+
|
|
152
|
+
## `catladder project k8s namespace [envComponent]`
|
|
153
|
+
|
|
154
|
+
show namespace of local project
|
|
155
|
+
|
|
156
|
+
- `envComponent` (positional): environment:component
|
|
157
|
+
|
|
158
|
+
## `catladder project k8s pause [envComponent]`
|
|
159
|
+
|
|
160
|
+
halts all running pods (scales to 0)
|
|
161
|
+
|
|
162
|
+
- `envComponent` (positional): environment:component
|
|
163
|
+
|
|
164
|
+
## `catladder project k8s trigger-cronjob [envComponent]`
|
|
165
|
+
|
|
166
|
+
trigger cronjob
|
|
167
|
+
|
|
168
|
+
- `envComponent` (positional): environment:component
|
|
169
|
+
- `--job-name <value>`: Which cronjob?
|
|
170
|
+
|
|
171
|
+
## `catladder project logs open [envComponent]`
|
|
172
|
+
|
|
173
|
+
open logs for a component (Google Cloud Logging)
|
|
174
|
+
|
|
175
|
+
- `envComponent` (positional): environment:component
|
|
176
|
+
|
|
177
|
+
## `catladder project mongo destroy-member [envComponent]`
|
|
178
|
+
|
|
179
|
+
DESTROY a member of a replicaset in order to reinitialize it
|
|
180
|
+
|
|
181
|
+
- `envComponent` (positional): environment:component
|
|
182
|
+
- `--pod-name <value>`: Which pod?
|
|
183
|
+
|
|
184
|
+
## `catladder project mongo get-shell [envComponent]`
|
|
185
|
+
|
|
186
|
+
get a shell to a mongodb in the environment
|
|
187
|
+
|
|
188
|
+
- `envComponent` (positional): environment:component
|
|
189
|
+
- `--pod-name <value>`: Which pod?
|
|
190
|
+
|
|
191
|
+
## `catladder project mongo port-forward [envComponent]`
|
|
192
|
+
|
|
193
|
+
port forward to a mongodb
|
|
194
|
+
|
|
195
|
+
- `envComponent` (positional): environment:component
|
|
196
|
+
- `--pod-name <value>`: Which pod?
|
|
197
|
+
- `--local-port <value>`: Local port: (default: 30000)
|
|
198
|
+
|
|
199
|
+
## `catladder project open env [envComponent]`
|
|
200
|
+
|
|
201
|
+
open the live environment
|
|
202
|
+
|
|
203
|
+
- `envComponent` (positional): environment:component
|
|
204
|
+
|
|
205
|
+
## `catladder project open git`
|
|
206
|
+
|
|
207
|
+
open the repo on gitlab / github in your browser
|
|
208
|
+
|
|
209
|
+
## `catladder project port-forward [envComponent]`
|
|
210
|
+
|
|
211
|
+
start port-forwarding
|
|
212
|
+
|
|
213
|
+
- `envComponent` (positional): environment:component
|
|
214
|
+
- `--pod-name <value>`: Which pod?
|
|
215
|
+
- `--local-port <value>`: Local port:
|
|
216
|
+
- `--remote-port <value>`: Remote port:
|
|
217
|
+
- `--mr <value>`: Which mr
|
|
218
|
+
|
|
219
|
+
## `catladder project renew-token`
|
|
220
|
+
|
|
221
|
+
Configures the project access token for semantic release.
|
|
222
|
+
|
|
223
|
+
## `catladder project secrets-clear-backups`
|
|
224
|
+
|
|
225
|
+
clears all backups
|
|
226
|
+
|
|
227
|
+
- `--keep <value>`: How many backups should we keep? (default: 1)
|
|
228
|
+
|
|
229
|
+
## `catladder project secrets-sync-github [repo] [env]`
|
|
230
|
+
|
|
231
|
+
copies all secrets from the vault to github repo secrets (same names), for the github pipeline
|
|
232
|
+
|
|
233
|
+
- `repo` (positional): github repository (owner/name)
|
|
234
|
+
- `env` (positional): only sync these environments (comma-separated, e.g. review,dev) — github allows at most 100 repo secrets
|
|
235
|
+
|
|
236
|
+
## `catladder project security-evaluate`
|
|
237
|
+
|
|
238
|
+
evaluate project's security audit document
|
|
239
|
+
|
|
240
|
+
## `catladder project setup [component]`
|
|
241
|
+
|
|
242
|
+
Initializes all environments and creates required resources, service accounts, etc.
|
|
243
|
+
|
|
244
|
+
- `component` (positional): component name
|
|
245
|
+
|
|
246
|
+
## `catladder project worktime`
|
|
247
|
+
|
|
248
|
+
show the total worktime that you spent on a project
|
|
249
|
+
|
|
250
|
+
## `catladder security audit ci-job [path] [token] [mainBranch] [projectId] [userId]`
|
|
251
|
+
|
|
252
|
+
Evaluates security audit document. Creates MR with template if missing.
|
|
253
|
+
|
|
254
|
+
- `path` (positional): path to project root
|
|
255
|
+
- `token` (positional): GitLab token (api scope)
|
|
256
|
+
- `mainBranch` (positional): main branch name
|
|
257
|
+
- `projectId` (positional): GitLab project ID
|
|
258
|
+
- `userId` (positional): GitLab user ID (assignee)
|
|
259
|
+
|
|
260
|
+
## `catladder security audit create [token] [mainBranch] [projectId] [userId]`
|
|
261
|
+
|
|
262
|
+
Creates a MR with the latest security audit template document
|
|
263
|
+
|
|
264
|
+
- `token` (positional): GitLab token (api scope)
|
|
265
|
+
- `mainBranch` (positional): main branch name
|
|
266
|
+
- `projectId` (positional): GitLab project ID
|
|
267
|
+
- `userId` (positional): GitLab user ID (assignee)
|
|
268
|
+
|
|
269
|
+
## `catladder security audit evaluate [path]`
|
|
270
|
+
|
|
271
|
+
Evaluates security audit document in given path
|
|
272
|
+
|
|
273
|
+
- `path` (positional): path to project root
|