@cultos/cli 0.2.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/doctor.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { spawnSync } from "node:child_process";
2
2
  import pc from "picocolors";
3
3
  import { commandExists, githubIsAuthenticated } from "./github.js";
4
+ import { parseGitLawbRemote } from "./gitlawb.js";
4
5
  function repositoryCheck() {
5
6
  const root = spawnSync("git", ["rev-parse", "--show-toplevel"], {
6
7
  encoding: "utf8"
@@ -17,10 +18,13 @@ function repositoryCheck() {
17
18
  });
18
19
  const value = remote.stdout.trim();
19
20
  const githubRepository = value.match(/github\.com[/:]([^/]+\/[^/]+?)(?:\.git)?$/)?.[1];
21
+ const gitlawbRepository = parseGitLawbRemote(value);
20
22
  return {
21
23
  name: "Repository",
22
24
  ok: true,
23
- detail: githubRepository ?? "ready"
25
+ detail: githubRepository ?? (gitlawbRepository
26
+ ? `${gitlawbRepository.owner}/${gitlawbRepository.repository}`
27
+ : "unsupported remote")
24
28
  };
25
29
  }
26
30
  function acpChecks(hasAcp) {
@@ -59,17 +63,27 @@ function acpChecks(hasAcp) {
59
63
  ];
60
64
  }
61
65
  export function runDoctor() {
66
+ const remote = spawnSync("git", ["remote", "get-url", "origin"], { encoding: "utf8" });
67
+ const usesGitLawb = Boolean(parseGitLawbRemote(remote.stdout ?? ""));
62
68
  const hasGitHub = commandExists("gh");
69
+ const hasGitLawb = commandExists("gl");
70
+ const hasGitLawbIdentity = hasGitLawb && spawnSync("gl", ["identity", "show"], { stdio: "ignore" }).status === 0;
63
71
  const hasAcp = commandExists("acp");
64
72
  const hasGitHubAuth = hasGitHub && githubIsAuthenticated();
65
73
  const checks = [
66
74
  { name: "Node.js", ok: true, detail: process.version },
67
75
  { name: "Git", ok: commandExists("git"), detail: "installed" },
68
- {
69
- name: "GitHub CLI",
70
- ok: hasGitHubAuth,
71
- detail: hasGitHubAuth ? "authenticated" : hasGitHub ? "authentication required" : "not installed"
72
- },
76
+ usesGitLawb
77
+ ? {
78
+ name: "GitLawb CLI",
79
+ ok: hasGitLawbIdentity,
80
+ detail: hasGitLawbIdentity ? "identity ready" : hasGitLawb ? "identity required" : "not installed"
81
+ }
82
+ : {
83
+ name: "GitHub CLI",
84
+ ok: hasGitHubAuth,
85
+ detail: hasGitHubAuth ? "authenticated" : hasGitHub ? "authentication required" : "not installed"
86
+ },
73
87
  ...acpChecks(hasAcp),
74
88
  repositoryCheck()
75
89
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { RepositoryCheck, RepositoryInfo, RepositoryIssue, RepositoryPullRequest } from "./repository.js";
2
+ interface GitLawbReference {
3
+ owner: string;
4
+ repository: string;
5
+ }
6
+ export declare function parseGitLawbRemote(value: string): GitLawbReference | undefined;
7
+ export declare function getGitLawbRepository(reference?: string): RepositoryInfo;
8
+ export declare function getGitLawbIssue(reference: string, repository?: string): RepositoryIssue;
9
+ export declare function getGitLawbPullRequest(reference: string): RepositoryPullRequest;
10
+ export declare function getGitLawbVerificationChecks(pullRequest: RepositoryPullRequest): RepositoryCheck[];
11
+ export declare function commentOnGitLawbIssue(repository: string, issue: string, body: string): void;
12
+ export {};
@@ -0,0 +1,175 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { z } from "zod";
3
+ const pullRequestSchema = z.object({
4
+ number: z.number(),
5
+ source_branch: z.string(),
6
+ target_branch: z.string(),
7
+ status: z.string()
8
+ });
9
+ const certificateListSchema = z.object({
10
+ certificates: z.array(z.object({
11
+ id: z.string(),
12
+ ref_name: z.string(),
13
+ new_sha: z.string()
14
+ }))
15
+ });
16
+ function run(args) {
17
+ const identityArgs = process.env.CULTOS_GITLAWB_DIR
18
+ ? [...args, "--dir", process.env.CULTOS_GITLAWB_DIR]
19
+ : args;
20
+ const result = spawnSync("gl", identityArgs, {
21
+ encoding: "utf8",
22
+ stdio: ["inherit", "pipe", "pipe"],
23
+ maxBuffer: 10 * 1024 * 1024
24
+ });
25
+ if (result.status !== 0) {
26
+ throw new Error(result.stderr.trim() || result.stdout.trim() || "GitLawb CLI command failed");
27
+ }
28
+ return result.stdout.trim();
29
+ }
30
+ function field(output, name) {
31
+ const match = output.match(new RegExp(`^\\s*${name}:\\s*(.+)$`, "mi"));
32
+ if (!match?.[1])
33
+ throw new Error(`GitLawb response is missing ${name}`);
34
+ return match[1].trim();
35
+ }
36
+ function ownerKey(owner) {
37
+ return owner.replace(/^did:key:/, "");
38
+ }
39
+ function api(path) {
40
+ const node = (process.env.GITLAWB_NODE ?? "https://node.gitlawb.com").replace(/\/$/, "");
41
+ const result = spawnSync("curl", ["--fail", "--silent", "--show-error", `${node}${path}`], {
42
+ encoding: "utf8",
43
+ maxBuffer: 10 * 1024 * 1024
44
+ });
45
+ if (result.status !== 0) {
46
+ throw new Error(result.stderr.trim() || "GitLawb API request failed");
47
+ }
48
+ try {
49
+ return JSON.parse(result.stdout);
50
+ }
51
+ catch {
52
+ throw new Error("GitLawb API returned an unreadable response");
53
+ }
54
+ }
55
+ function repositoryArgument(reference) {
56
+ return `${ownerKey(reference.owner)}/${reference.repository}`;
57
+ }
58
+ export function parseGitLawbRemote(value) {
59
+ const match = value.trim().match(/^gitlawb:\/\/(did:key:[^/]+|[^/]+)\/([^/]+?)(?:\.git)?$/);
60
+ if (!match?.[1] || !match[2])
61
+ return undefined;
62
+ return { owner: match[1], repository: match[2] };
63
+ }
64
+ function currentRepository() {
65
+ const result = spawnSync("git", ["remote", "get-url", "origin"], { encoding: "utf8" });
66
+ const parsed = parseGitLawbRemote(result.stdout ?? "");
67
+ if (result.status !== 0 || !parsed) {
68
+ throw new Error("The origin remote is not a GitLawb repository");
69
+ }
70
+ return parsed;
71
+ }
72
+ function parseRepositoryReference(value) {
73
+ if (!value)
74
+ return currentRepository();
75
+ const remote = parseGitLawbRemote(value);
76
+ if (remote)
77
+ return remote;
78
+ const match = value.match(/^(did:key:[^/]+|[^/]+)\/([^/]+)$/);
79
+ if (!match?.[1] || !match[2])
80
+ throw new Error(`Invalid GitLawb repository: ${value}`);
81
+ return { owner: match[1], repository: match[2] };
82
+ }
83
+ export function getGitLawbRepository(reference) {
84
+ const parsed = parseRepositoryReference(reference);
85
+ const output = run(["repo", "info", repositoryArgument(parsed)]);
86
+ const owner = field(output, "Owner DID");
87
+ const name = field(output, "Repository").split("/").at(-1) ?? parsed.repository;
88
+ return {
89
+ platform: "gitlawb",
90
+ nameWithOwner: `${ownerKey(owner)}/${name}`,
91
+ url: `gitlawb://${owner}/${name}`,
92
+ defaultBranch: field(output, "Branch")
93
+ };
94
+ }
95
+ function issueId(reference) {
96
+ return reference.match(/\/issues\/([^/]+)$/)?.[1] ?? reference;
97
+ }
98
+ export function getGitLawbIssue(reference, repository) {
99
+ const repo = parseRepositoryReference(repository);
100
+ const id = issueId(reference);
101
+ const output = run(["issue", "show", repositoryArgument(repo), id]);
102
+ const lines = output.split(/\r?\n/);
103
+ const bodyStart = lines.findIndex((line) => line.trim() === "");
104
+ return {
105
+ id,
106
+ title: field(output, "Title"),
107
+ body: bodyStart >= 0 ? lines.slice(bodyStart + 1).join("\n").trim() : "",
108
+ url: `gitlawb://${repo.owner}/${repo.repository}/issues/${id}`
109
+ };
110
+ }
111
+ function parsePullRequestReference(value) {
112
+ const match = value.match(/^(?:gitlawb:\/\/|https:\/\/gitlawb\.com\/)(did:key:[^/]+|[^/]+)\/([^/]+)\/(?:pulls?|prs?)\/(\d+)$/);
113
+ if (!match?.[1] || !match[2] || !match[3]) {
114
+ throw new Error("Invalid GitLawb pull request reference");
115
+ }
116
+ return { owner: match[1], repository: match[2], number: Number(match[3]) };
117
+ }
118
+ function remoteHeadSha(repository, branch) {
119
+ const remote = `gitlawb://${repository.owner}/${repository.repository}`;
120
+ const result = spawnSync("git", ["ls-remote", remote, `refs/heads/${branch}`], {
121
+ encoding: "utf8",
122
+ maxBuffer: 10 * 1024 * 1024
123
+ });
124
+ if (result.status !== 0) {
125
+ throw new Error(result.stderr.trim() || "Unable to resolve the GitLawb pull-request commit");
126
+ }
127
+ const sha = result.stdout.trim().split(/\s+/)[0];
128
+ if (!sha)
129
+ throw new Error("GitLawb pull-request branch was not found");
130
+ return sha;
131
+ }
132
+ export function getGitLawbPullRequest(reference) {
133
+ const parsed = parsePullRequestReference(reference);
134
+ const owner = ownerKey(parsed.owner);
135
+ const pullRequest = pullRequestSchema.parse(api(`/api/v1/repos/${encodeURIComponent(owner)}/${encodeURIComponent(parsed.repository)}/pulls/${parsed.number}`));
136
+ const headRef = pullRequest.source_branch;
137
+ return {
138
+ platform: "gitlawb",
139
+ number: pullRequest.number,
140
+ url: `gitlawb://${parsed.owner}/${parsed.repository}/pull/${parsed.number}`,
141
+ state: pullRequest.status.toUpperCase(),
142
+ headSha: remoteHeadSha(parsed, headRef),
143
+ headRef,
144
+ baseRef: pullRequest.target_branch
145
+ };
146
+ }
147
+ export function getGitLawbVerificationChecks(pullRequest) {
148
+ const parsed = parsePullRequestReference(pullRequest.url);
149
+ if (!pullRequest.headRef) {
150
+ return [{ name: "Signed push certificate", state: "missing branch", bucket: "fail" }];
151
+ }
152
+ const owner = ownerKey(parsed.owner);
153
+ const certificates = certificateListSchema.parse(api(`/api/v1/repos/${encodeURIComponent(owner)}/${encodeURIComponent(parsed.repository)}/certs`)).certificates;
154
+ const certificate = certificates.find((item) => item.ref_name === `refs/heads/${pullRequest.headRef}` && item.new_sha === pullRequest.headSha);
155
+ if (!certificate) {
156
+ return [{ name: "Signed push certificate", state: "missing", bucket: "fail" }];
157
+ }
158
+ const args = ["cert", "show", parsed.repository, certificate.id, "--verify"];
159
+ if (process.env.CULTOS_GITLAWB_DIR)
160
+ args.push("--dir", process.env.CULTOS_GITLAWB_DIR);
161
+ const result = spawnSync("gl", args, {
162
+ encoding: "utf8",
163
+ stdio: ["inherit", "pipe", "pipe"],
164
+ maxBuffer: 10 * 1024 * 1024
165
+ });
166
+ return [{
167
+ name: "Signed push certificate",
168
+ state: result.status === 0 ? "verified" : "invalid",
169
+ bucket: result.status === 0 ? "pass" : "fail"
170
+ }];
171
+ }
172
+ export function commentOnGitLawbIssue(repository, issue, body) {
173
+ run(["issue", "comment", repository, issue, "--body", body]);
174
+ }
175
+ //# sourceMappingURL=gitlawb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlawb.js","sourceRoot":"","sources":["../src/gitlawb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { RepositoryPlatform } from "./contract.js";
2
+ export interface RepositoryInfo {
3
+ platform: RepositoryPlatform;
4
+ nameWithOwner: string;
5
+ url: string;
6
+ defaultBranch: string;
7
+ }
8
+ export interface RepositoryIssue {
9
+ id: number | string;
10
+ title: string;
11
+ body: string;
12
+ url: string;
13
+ }
14
+ export interface RepositoryPullRequest {
15
+ platform?: RepositoryPlatform;
16
+ number: number;
17
+ url: string;
18
+ state: string;
19
+ headSha: string;
20
+ headRef?: string;
21
+ baseRef: string;
22
+ }
23
+ export interface RepositoryCheck {
24
+ name: string;
25
+ state: string;
26
+ bucket: string;
27
+ link?: string | undefined;
28
+ }
29
+ export declare function detectRepositoryPlatform(): RepositoryPlatform;
30
+ export declare function getRepositoryInfo(reference?: string, platform?: RepositoryPlatform): RepositoryInfo;
31
+ export declare function getRepositoryIssue(reference: string, repository?: string, platform?: RepositoryPlatform): RepositoryIssue;
32
+ export declare function getRepositoryPullRequest(reference: string): RepositoryPullRequest;
33
+ export declare function getRepositoryChecks(pullRequest: RepositoryPullRequest): RepositoryCheck[];
34
+ export declare function commentOnRepositoryIssue(platform: RepositoryPlatform, repository: string, issue: number | string, body: string): void;
@@ -0,0 +1,44 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { commentOnIssue as commentOnGitHubIssue, getIssue as getGitHubIssue, getPullRequest as getGitHubPullRequest, getPullRequestChecks, getRepository as getGitHubRepository } from "./github.js";
3
+ import { commentOnGitLawbIssue, getGitLawbIssue, getGitLawbPullRequest, getGitLawbRepository, getGitLawbVerificationChecks, parseGitLawbRemote } from "./gitlawb.js";
4
+ function currentRemote() {
5
+ const result = spawnSync("git", ["remote", "get-url", "origin"], { encoding: "utf8" });
6
+ if (result.status !== 0) {
7
+ throw new Error("Unable to read the origin remote");
8
+ }
9
+ return result.stdout.trim();
10
+ }
11
+ export function detectRepositoryPlatform() {
12
+ return parseGitLawbRemote(currentRemote()) ? "gitlawb" : "github";
13
+ }
14
+ export function getRepositoryInfo(reference, platform = detectRepositoryPlatform()) {
15
+ if (platform === "gitlawb")
16
+ return getGitLawbRepository(reference);
17
+ return { platform, ...getGitHubRepository(reference) };
18
+ }
19
+ export function getRepositoryIssue(reference, repository, platform = detectRepositoryPlatform()) {
20
+ if (platform === "gitlawb")
21
+ return getGitLawbIssue(reference, repository);
22
+ const issue = getGitHubIssue(reference, repository);
23
+ return { id: issue.number, title: issue.title, body: issue.body, url: issue.url };
24
+ }
25
+ export function getRepositoryPullRequest(reference) {
26
+ if (reference.startsWith("gitlawb://") || reference.includes("gitlawb.com/")) {
27
+ return getGitLawbPullRequest(reference);
28
+ }
29
+ const pullRequest = getGitHubPullRequest(reference);
30
+ return { platform: "github", headRef: "", ...pullRequest };
31
+ }
32
+ export function getRepositoryChecks(pullRequest) {
33
+ return pullRequest.platform === "gitlawb"
34
+ ? getGitLawbVerificationChecks(pullRequest)
35
+ : getPullRequestChecks(pullRequest.url);
36
+ }
37
+ export function commentOnRepositoryIssue(platform, repository, issue, body) {
38
+ if (platform === "gitlawb") {
39
+ commentOnGitLawbIssue(repository, String(issue), body);
40
+ return;
41
+ }
42
+ commentOnGitHubIssue(Number(issue), body);
43
+ }
44
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,cAAc,IAAI,oBAAoB,EACtC,QAAQ,IAAI,cAAc,EAC1B,cAAc,IAAI,oBAAoB,EACtC,oBAAoB,EACpB,aAAa,IAAI,mBAAmB,EACrC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAkCtB,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACvF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,kBAAkB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,SAAkB,EAClB,WAA+B,wBAAwB,EAAE;IAEzD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACnE,OAAO,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,UAAmB,EACnB,WAA+B,wBAAwB,EAAE;IAEzD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpD,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,SAAiB;IACxD,IAAI,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7E,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,WAAW,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACpD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAkC;IACpE,OAAO,WAAW,CAAC,QAAQ,KAAK,SAAS;QACvC,CAAC,CAAC,4BAA4B,CAAC,WAAW,CAAC;QAC3C,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAA4B,EAC5B,UAAkB,EAClB,KAAsB,EACtB,IAAY;IAEZ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IACD,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface StartOptions {
2
+ confirm?: (question: string) => Promise<boolean>;
3
+ wait?: () => Promise<void>;
4
+ launch?: () => void;
5
+ allowNonInteractive?: boolean;
6
+ }
7
+ export declare function runStart(options?: StartOptions): Promise<boolean>;
8
+ export {};