gitops-ai 1.2.0 → 1.2.2
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 +6 -6
- package/dist/commands/bootstrap.js +44 -21
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/sops.js +5 -9
- package/dist/commands/sops.js.map +1 -1
- package/dist/core/bootstrap-runner.d.ts +8 -1
- package/dist/core/bootstrap-runner.js +85 -13
- package/dist/core/bootstrap-runner.js.map +1 -1
- package/dist/core/dependencies.js +0 -28
- package/dist/core/dependencies.js.map +1 -1
- package/dist/core/flux.d.ts +5 -2
- package/dist/core/flux.js +38 -46
- package/dist/core/flux.js.map +1 -1
- package/dist/core/k8s-api.d.ts +33 -0
- package/dist/core/k8s-api.js +255 -0
- package/dist/core/k8s-api.js.map +1 -0
- package/dist/core/kubernetes.d.ts +2 -2
- package/dist/core/kubernetes.js +29 -33
- package/dist/core/kubernetes.js.map +1 -1
- package/dist/core/template-sync.d.ts +2 -2
- package/dist/core/template-sync.js +14 -8
- package/dist/core/template-sync.js.map +1 -1
- package/dist/schemas.d.ts +10 -2
- package/dist/schemas.js +12 -2
- package/dist/schemas.js.map +1 -1
- package/dist/utils/log.js +35 -4
- package/dist/utils/log.js.map +1 -1
- package/package.json +4 -8
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kubernetes API access via @kubernetes/client-node
|
|
3
|
+
*/
|
|
4
|
+
import { Buffer } from "node:buffer";
|
|
5
|
+
import { Writable } from "node:stream";
|
|
6
|
+
import * as k8s from "@kubernetes/client-node";
|
|
7
|
+
export const FLUX_SYSTEM_NS = "flux-system";
|
|
8
|
+
export const FLUX_INSTANCE_GROUP = "fluxcd.controlplane.io";
|
|
9
|
+
export const FLUX_INSTANCE_VERSION = "v1";
|
|
10
|
+
export const FLUX_INSTANCE_PLURAL = "fluxinstances";
|
|
11
|
+
function sleep(ms) {
|
|
12
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
13
|
+
}
|
|
14
|
+
export function kubeConfigFromDefault() {
|
|
15
|
+
const kc = new k8s.KubeConfig();
|
|
16
|
+
kc.loadFromDefault();
|
|
17
|
+
return kc;
|
|
18
|
+
}
|
|
19
|
+
export function makeClients(kc) {
|
|
20
|
+
return {
|
|
21
|
+
core: kc.makeApiClient(k8s.CoreV1Api),
|
|
22
|
+
apps: kc.makeApiClient(k8s.AppsV1Api),
|
|
23
|
+
custom: kc.makeApiClient(k8s.CustomObjectsApi),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export async function isClusterReachableApi(kc) {
|
|
27
|
+
try {
|
|
28
|
+
const { core } = makeClients(kc);
|
|
29
|
+
await core.listNamespace({ limit: 1 });
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export async function waitForAllNodesReady(kc, timeoutMs) {
|
|
37
|
+
const { core } = makeClients(kc);
|
|
38
|
+
const deadline = Date.now() + timeoutMs;
|
|
39
|
+
while (Date.now() < deadline) {
|
|
40
|
+
const list = await core.listNode();
|
|
41
|
+
const items = list.items ?? [];
|
|
42
|
+
if (items.length > 0) {
|
|
43
|
+
const allReady = items.every((n) => n.status?.conditions?.some((c) => c.type === "Ready" && c.status === "True"));
|
|
44
|
+
if (allReady)
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
await sleep(2000);
|
|
48
|
+
}
|
|
49
|
+
throw new Error(`Timed out after ${timeoutMs}ms waiting for all nodes to be Ready`);
|
|
50
|
+
}
|
|
51
|
+
export async function createNamespaceApi(kc, name) {
|
|
52
|
+
const { core } = makeClients(kc);
|
|
53
|
+
try {
|
|
54
|
+
await core.createNamespace({
|
|
55
|
+
body: { metadata: { name } },
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
const code = e?.code
|
|
60
|
+
?? e?.body?.code;
|
|
61
|
+
if (code === 409)
|
|
62
|
+
return;
|
|
63
|
+
throw e;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export async function createSecretLiteralsApi(kc, name, namespace, data) {
|
|
67
|
+
const { core } = makeClients(kc);
|
|
68
|
+
const body = {
|
|
69
|
+
metadata: { name, namespace },
|
|
70
|
+
stringData: data,
|
|
71
|
+
};
|
|
72
|
+
try {
|
|
73
|
+
await core.createNamespacedSecret({ namespace, body });
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
const code = e?.code;
|
|
77
|
+
if (code === 409) {
|
|
78
|
+
await core.deleteNamespacedSecret({ name, namespace });
|
|
79
|
+
await core.createNamespacedSecret({ namespace, body });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
throw e;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export async function secretExistsApi(kc, name, namespace) {
|
|
86
|
+
const { core } = makeClients(kc);
|
|
87
|
+
try {
|
|
88
|
+
await core.readNamespacedSecret({ name, namespace });
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export async function deleteSecretApi(kc, name, namespace) {
|
|
96
|
+
const { core } = makeClients(kc);
|
|
97
|
+
try {
|
|
98
|
+
await core.deleteNamespacedSecret({ name, namespace });
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
const code = e?.code;
|
|
102
|
+
if (code === 404)
|
|
103
|
+
return;
|
|
104
|
+
throw e;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export async function createSecretFromFilesApi(kc, name, namespace, files) {
|
|
108
|
+
const fs = await import("node:fs");
|
|
109
|
+
const stringData = {};
|
|
110
|
+
for (const [key, path] of Object.entries(files)) {
|
|
111
|
+
stringData[key] = fs.readFileSync(path, "utf-8");
|
|
112
|
+
}
|
|
113
|
+
await createSecretLiteralsApi(kc, name, namespace, stringData);
|
|
114
|
+
}
|
|
115
|
+
async function podNameForDeployment(kc, namespace, deploymentName) {
|
|
116
|
+
const { apps, core } = makeClients(kc);
|
|
117
|
+
const dep = await apps.readNamespacedDeployment({
|
|
118
|
+
name: deploymentName,
|
|
119
|
+
namespace,
|
|
120
|
+
});
|
|
121
|
+
const match = dep.spec?.selector?.matchLabels;
|
|
122
|
+
if (!match || Object.keys(match).length === 0)
|
|
123
|
+
return null;
|
|
124
|
+
const labelSelector = Object.entries(match)
|
|
125
|
+
.map(([k, v]) => `${k}=${String(v)}`)
|
|
126
|
+
.join(",");
|
|
127
|
+
const pods = await core.listNamespacedPod({ namespace, labelSelector });
|
|
128
|
+
const pick = pods.items?.find((p) => p.status?.phase === "Running") ?? pods.items?.[0];
|
|
129
|
+
return pick?.metadata?.name ?? null;
|
|
130
|
+
}
|
|
131
|
+
function statusExitCode(status) {
|
|
132
|
+
if (status.status === "Success")
|
|
133
|
+
return 0;
|
|
134
|
+
const c = status.code;
|
|
135
|
+
return typeof c === "number" ? c : 1;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Run a command in a pod (by deployment name). Returns captured stdout/stderr.
|
|
139
|
+
*/
|
|
140
|
+
export async function execInDeploymentContainer(kc, namespace, deploymentName, containerName, command) {
|
|
141
|
+
const podName = await podNameForDeployment(kc, namespace, deploymentName);
|
|
142
|
+
if (!podName) {
|
|
143
|
+
throw new Error(`No pod found for Deployment ${namespace}/${deploymentName}`);
|
|
144
|
+
}
|
|
145
|
+
const execApi = new k8s.Exec(kc);
|
|
146
|
+
const stdoutChunks = [];
|
|
147
|
+
const stderrChunks = [];
|
|
148
|
+
const stdout = new Writable({
|
|
149
|
+
write(chunk, _enc, cb) {
|
|
150
|
+
stdoutChunks.push(Buffer.from(chunk));
|
|
151
|
+
cb();
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
const stderr = new Writable({
|
|
155
|
+
write(chunk, _enc, cb) {
|
|
156
|
+
stderrChunks.push(Buffer.from(chunk));
|
|
157
|
+
cb();
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
let exitCode = 0;
|
|
161
|
+
await new Promise((resolve, reject) => {
|
|
162
|
+
execApi
|
|
163
|
+
.exec(namespace, podName, containerName, command, stdout, stderr, null, false, (status) => {
|
|
164
|
+
exitCode = statusExitCode(status);
|
|
165
|
+
resolve();
|
|
166
|
+
})
|
|
167
|
+
.catch(reject);
|
|
168
|
+
});
|
|
169
|
+
return {
|
|
170
|
+
stdout: Buffer.concat(stdoutChunks).toString("utf8"),
|
|
171
|
+
stderr: Buffer.concat(stderrChunks).toString("utf8"),
|
|
172
|
+
exitCode,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Stream exec to process stdout/stderr (for interactive listing).
|
|
177
|
+
*/
|
|
178
|
+
export async function execInDeploymentContainerTty(kc, namespace, deploymentName, containerName, command) {
|
|
179
|
+
const podName = await podNameForDeployment(kc, namespace, deploymentName);
|
|
180
|
+
if (!podName) {
|
|
181
|
+
throw new Error(`No pod found for Deployment ${namespace}/${deploymentName}`);
|
|
182
|
+
}
|
|
183
|
+
const execApi = new k8s.Exec(kc);
|
|
184
|
+
let exitCode = 0;
|
|
185
|
+
await new Promise((resolve, reject) => {
|
|
186
|
+
execApi
|
|
187
|
+
.exec(namespace, podName, containerName, command, process.stdout, process.stderr, null, false, (status) => {
|
|
188
|
+
exitCode = statusExitCode(status);
|
|
189
|
+
resolve();
|
|
190
|
+
})
|
|
191
|
+
.catch(reject);
|
|
192
|
+
});
|
|
193
|
+
return exitCode;
|
|
194
|
+
}
|
|
195
|
+
export async function listPodsStatusLines(kc, namespace) {
|
|
196
|
+
const { core } = makeClients(kc);
|
|
197
|
+
const list = await core.listNamespacedPod({ namespace });
|
|
198
|
+
const lines = [];
|
|
199
|
+
for (const pod of list.items ?? []) {
|
|
200
|
+
const name = pod.metadata?.name ?? "?";
|
|
201
|
+
const phase = pod.status?.phase ?? "?";
|
|
202
|
+
const ready = pod.status?.conditions?.find((c) => c.type === "Ready")?.status ===
|
|
203
|
+
"True";
|
|
204
|
+
lines.push(`${name}\t${phase}\t${ready ? "True" : "False"}`);
|
|
205
|
+
}
|
|
206
|
+
return lines.join("\n");
|
|
207
|
+
}
|
|
208
|
+
function fluxInstanceReady(obj) {
|
|
209
|
+
const o = obj;
|
|
210
|
+
return (o.status?.conditions?.some((c) => c.type === "Ready" && c.status === "True") ?? false);
|
|
211
|
+
}
|
|
212
|
+
export async function waitForFluxInstanceReady(kc, timeoutMs) {
|
|
213
|
+
const { custom } = makeClients(kc);
|
|
214
|
+
const deadline = Date.now() + timeoutMs;
|
|
215
|
+
while (Date.now() < deadline) {
|
|
216
|
+
const obj = await custom.getNamespacedCustomObject({
|
|
217
|
+
group: FLUX_INSTANCE_GROUP,
|
|
218
|
+
version: FLUX_INSTANCE_VERSION,
|
|
219
|
+
namespace: FLUX_SYSTEM_NS,
|
|
220
|
+
plural: FLUX_INSTANCE_PLURAL,
|
|
221
|
+
name: "flux",
|
|
222
|
+
});
|
|
223
|
+
if (fluxInstanceReady(obj))
|
|
224
|
+
return;
|
|
225
|
+
await sleep(2000);
|
|
226
|
+
}
|
|
227
|
+
throw new Error(`Timed out after ${timeoutMs}ms waiting for FluxInstance flux to be Ready`);
|
|
228
|
+
}
|
|
229
|
+
export async function reconcileFluxInstance(kc, timeoutMs) {
|
|
230
|
+
const { custom } = makeClients(kc);
|
|
231
|
+
const ts = Math.floor(Date.now() / 1000);
|
|
232
|
+
const existing = await custom.getNamespacedCustomObject({
|
|
233
|
+
group: FLUX_INSTANCE_GROUP,
|
|
234
|
+
version: FLUX_INSTANCE_VERSION,
|
|
235
|
+
namespace: FLUX_SYSTEM_NS,
|
|
236
|
+
plural: FLUX_INSTANCE_PLURAL,
|
|
237
|
+
name: "flux",
|
|
238
|
+
});
|
|
239
|
+
const merged = existing;
|
|
240
|
+
const meta = (merged.metadata ?? {});
|
|
241
|
+
const ann = (meta.annotations ?? {});
|
|
242
|
+
ann["reconcile.fluxcd.io/requestedAt"] = String(ts);
|
|
243
|
+
meta.annotations = ann;
|
|
244
|
+
merged.metadata = meta;
|
|
245
|
+
await custom.replaceNamespacedCustomObject({
|
|
246
|
+
group: FLUX_INSTANCE_GROUP,
|
|
247
|
+
version: FLUX_INSTANCE_VERSION,
|
|
248
|
+
namespace: FLUX_SYSTEM_NS,
|
|
249
|
+
plural: FLUX_INSTANCE_PLURAL,
|
|
250
|
+
name: "flux",
|
|
251
|
+
body: merged,
|
|
252
|
+
});
|
|
253
|
+
await waitForFluxInstanceReady(kc, timeoutMs);
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=k8s-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"k8s-api.js","sourceRoot":"","sources":["../../src/core/k8s-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function isClusterReachable(): boolean
|
|
1
|
+
export declare function isClusterReachable(): Promise<boolean>;
|
|
2
2
|
export interface ExistingCluster {
|
|
3
3
|
type: "k3d" | "k3s";
|
|
4
4
|
names: string[];
|
|
@@ -13,7 +13,7 @@ export declare function setupKubeconfig(clusterName: string): string;
|
|
|
13
13
|
export declare function waitForCluster(): Promise<void>;
|
|
14
14
|
export declare function createNamespace(name: string): Promise<void>;
|
|
15
15
|
export declare function createSecret(name: string, namespace: string, data: Record<string, string>): Promise<void>;
|
|
16
|
-
export declare function secretExists(name: string, namespace: string): boolean
|
|
16
|
+
export declare function secretExists(name: string, namespace: string): Promise<boolean>;
|
|
17
17
|
export declare function deleteSecret(name: string, namespace: string): Promise<void>;
|
|
18
18
|
export declare function createSecretFromFile(name: string, namespace: string, key: string, filePath: string): Promise<void>;
|
|
19
19
|
export declare function createSshSecret(name: string, namespace: string, privateKey: string, publicKey: string, knownHosts: string): Promise<void>;
|
package/dist/core/kubernetes.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
1
|
+
import { mkdirSync, writeFileSync, rmSync, mkdtempSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
2
4
|
import { exec, execAsync, execSafe } from "../utils/shell.js";
|
|
3
5
|
import { isMacOS, isCI } from "../utils/platform.js";
|
|
4
6
|
import { log, withSpinner } from "../utils/log.js";
|
|
5
7
|
import { KUBERNETES_VERSION } from "../schemas.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return
|
|
8
|
+
import * as k8sApi from "./k8s-api.js";
|
|
9
|
+
export async function isClusterReachable() {
|
|
10
|
+
return k8sApi.isClusterReachableApi(k8sApi.kubeConfigFromDefault());
|
|
9
11
|
}
|
|
10
12
|
export function detectExistingClusters() {
|
|
11
13
|
if (isMacOS() || isCI()) {
|
|
@@ -81,48 +83,42 @@ export function setupKubeconfig(clusterName) {
|
|
|
81
83
|
export async function waitForCluster() {
|
|
82
84
|
await withSpinner("Waiting for cluster to be ready", async () => {
|
|
83
85
|
await new Promise((r) => setTimeout(r, 5000));
|
|
84
|
-
|
|
86
|
+
const kc = k8sApi.kubeConfigFromDefault();
|
|
87
|
+
await k8sApi.waitForAllNodesReady(kc, 120_000);
|
|
85
88
|
});
|
|
86
89
|
}
|
|
87
90
|
export async function createNamespace(name) {
|
|
88
|
-
await
|
|
91
|
+
await k8sApi.createNamespaceApi(k8sApi.kubeConfigFromDefault(), name);
|
|
89
92
|
}
|
|
90
93
|
export async function createSecret(name, namespace, data) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
.join(" ");
|
|
94
|
-
const cmd = `kubectl create secret generic ${name} --namespace=${namespace} ${literals}`;
|
|
95
|
-
log.detail(`kubectl create secret generic ${name} --namespace=${namespace}`);
|
|
96
|
-
await execAsync(cmd);
|
|
94
|
+
log.detail(`create secret ${name} --namespace=${namespace}`);
|
|
95
|
+
await k8sApi.createSecretLiteralsApi(k8sApi.kubeConfigFromDefault(), name, namespace, data);
|
|
97
96
|
}
|
|
98
|
-
export function secretExists(name, namespace) {
|
|
99
|
-
|
|
100
|
-
return exitCode === 0;
|
|
97
|
+
export async function secretExists(name, namespace) {
|
|
98
|
+
return k8sApi.secretExistsApi(k8sApi.kubeConfigFromDefault(), name, namespace);
|
|
101
99
|
}
|
|
102
100
|
export async function deleteSecret(name, namespace) {
|
|
103
|
-
await
|
|
101
|
+
await k8sApi.deleteSecretApi(k8sApi.kubeConfigFromDefault(), name, namespace);
|
|
104
102
|
}
|
|
105
103
|
export async function createSecretFromFile(name, namespace, key, filePath) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
await execAsync(cmd);
|
|
104
|
+
log.detail(`create secret generic ${name} --namespace=${namespace} --from-file=${key}`);
|
|
105
|
+
await k8sApi.createSecretFromFilesApi(k8sApi.kubeConfigFromDefault(), name, namespace, { [key]: filePath });
|
|
109
106
|
}
|
|
110
107
|
export async function createSshSecret(name, namespace, privateKey, publicKey, knownHosts) {
|
|
111
|
-
const tmpDir = "
|
|
112
|
-
mkdirSync(tmpDir, { recursive: true });
|
|
108
|
+
const tmpDir = mkdtempSync(join(tmpdir(), "flux-ssh-"));
|
|
113
109
|
try {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
110
|
+
const identity = join(tmpDir, "identity");
|
|
111
|
+
const identityPub = join(tmpDir, "identity.pub");
|
|
112
|
+
const knownHostsPath = join(tmpDir, "known_hosts");
|
|
113
|
+
writeFileSync(identity, privateKey, { mode: 0o600 });
|
|
114
|
+
writeFileSync(identityPub, publicKey);
|
|
115
|
+
writeFileSync(knownHostsPath, knownHosts);
|
|
116
|
+
log.detail(`create secret generic ${name} --namespace=${namespace} (SSH)`);
|
|
117
|
+
await k8sApi.createSecretFromFilesApi(k8sApi.kubeConfigFromDefault(), name, namespace, {
|
|
118
|
+
identity,
|
|
119
|
+
"identity.pub": identityPub,
|
|
120
|
+
known_hosts: knownHostsPath,
|
|
121
|
+
});
|
|
126
122
|
}
|
|
127
123
|
finally {
|
|
128
124
|
rmSync(tmpDir, { recursive: true, force: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kubernetes.js","sourceRoot":"","sources":["../../src/core/kubernetes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"kubernetes.js","sourceRoot":"","sources":["../../src/core/kubernetes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** HTTPS URL for the canonical GitOps template
|
|
2
|
-
export declare const UPSTREAM_GIT_URL = "https://
|
|
1
|
+
/** HTTPS URL for the canonical GitOps template on GitHub. */
|
|
2
|
+
export declare const UPSTREAM_GIT_URL = "https://github.com/GitOpsAI/gitops-ai-template.git";
|
|
3
3
|
export declare function readPackageVersion(): string;
|
|
4
4
|
/**
|
|
5
5
|
* Read `version:` from repo-root template-sync-metadata.yaml if present (template semver).
|
|
@@ -3,10 +3,10 @@ import { dirname, join } from "node:path";
|
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { log, withSpinner } from "../utils/log.js";
|
|
5
5
|
import { execAsync, execSafe } from "../utils/shell.js";
|
|
6
|
-
import {
|
|
6
|
+
import { SOURCE_TEMPLATE_HOST, SOURCE_PROJECT_PATH, } from "../schemas.js";
|
|
7
7
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
8
|
-
/** HTTPS URL for the canonical GitOps template
|
|
9
|
-
export const UPSTREAM_GIT_URL = `https://${
|
|
8
|
+
/** HTTPS URL for the canonical GitOps template on GitHub. */
|
|
9
|
+
export const UPSTREAM_GIT_URL = `https://${SOURCE_TEMPLATE_HOST}/${SOURCE_PROJECT_PATH}.git`;
|
|
10
10
|
export function readPackageVersion() {
|
|
11
11
|
try {
|
|
12
12
|
const pkgPath = join(__dirname, "..", "..", "package.json");
|
|
@@ -65,10 +65,16 @@ function unrelatedHistoryHint(repoRoot) {
|
|
|
65
65
|
// Fetch upstream tags (shared between bootstrap wizard and sync TUI)
|
|
66
66
|
// ---------------------------------------------------------------------------
|
|
67
67
|
export async function fetchTemplateTags() {
|
|
68
|
-
const
|
|
69
|
-
const
|
|
68
|
+
const url = `https://api.github.com/repos/${SOURCE_PROJECT_PATH}/tags?per_page=100`;
|
|
69
|
+
const headers = {
|
|
70
|
+
Accept: "application/vnd.github+json",
|
|
71
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
72
|
+
};
|
|
73
|
+
const token = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN;
|
|
74
|
+
if (token)
|
|
75
|
+
headers.Authorization = `Bearer ${token}`;
|
|
70
76
|
try {
|
|
71
|
-
const res = await fetch(url);
|
|
77
|
+
const res = await fetch(url, { headers });
|
|
72
78
|
if (!res.ok)
|
|
73
79
|
return [];
|
|
74
80
|
const tags = (await res.json());
|
|
@@ -109,7 +115,7 @@ export async function fetchUpstream(repoRoot, remoteName, ref) {
|
|
|
109
115
|
});
|
|
110
116
|
}
|
|
111
117
|
const HIGH_TOUCH_PATTERNS = [
|
|
112
|
-
/^flux-instance
|
|
118
|
+
/^flux-instance\.yaml$/,
|
|
113
119
|
/^\.sops\.yaml$/,
|
|
114
120
|
/secret-.*\.yaml$/,
|
|
115
121
|
/cluster-sync\.yaml$/,
|
|
@@ -234,7 +240,7 @@ export async function mergeUpstreamTemplate(options) {
|
|
|
234
240
|
return;
|
|
235
241
|
}
|
|
236
242
|
if (!hasCommonAncestor(repoRoot) && !allowUnrelatedHistories) {
|
|
237
|
-
throw new Error("No common Git ancestor with the upstream template on
|
|
243
|
+
throw new Error("No common Git ancestor with the upstream template on GitHub. " +
|
|
238
244
|
unrelatedHistoryHint(repoRoot) +
|
|
239
245
|
" `--ref` is the branch/tag on upstream; `--remote` is only the local remote name (default: upstream).");
|
|
240
246
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-sync.js","sourceRoot":"","sources":["../../src/core/template-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"template-sync.js","sourceRoot":"","sources":["../../src/core/template-sync.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas.d.ts
CHANGED
|
@@ -55,9 +55,17 @@ export declare const DNS_TLS_COMPONENT_IDS: string[];
|
|
|
55
55
|
export declare const MONITORING_COMPONENT_IDS: string[];
|
|
56
56
|
export declare const OPTIONAL_COMPONENTS: ComponentDef[];
|
|
57
57
|
export declare const KUBERNETES_VERSION = "1.35.1";
|
|
58
|
-
|
|
59
|
-
export declare const
|
|
58
|
+
/** Host for the canonical GitOps template repository (clone + template sync upstream). */
|
|
59
|
+
export declare const SOURCE_TEMPLATE_HOST = "github.com";
|
|
60
|
+
/** owner/repo for the template (used in HTTPS URL and GitHub API paths). */
|
|
61
|
+
export declare const SOURCE_PROJECT_PATH = "GitOpsAI/gitops-ai-template";
|
|
60
62
|
export declare const INSTALL_PLAN_PATH = "/tmp/installplan.json";
|
|
61
63
|
export declare function isShortLivedGitHubToken(token: string): boolean;
|
|
62
64
|
export declare function shouldUseSshDeployKey(config: BootstrapConfig): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Username for the Flux GitRepository HTTPS secret (`username` / `password` keys).
|
|
67
|
+
* GitHub rejects generic usernames with PATs in many clients — use `x-access-token`.
|
|
68
|
+
* GitLab expects `oauth2` for HTTPS + token.
|
|
69
|
+
*/
|
|
70
|
+
export declare function httpsGitCredentialUsername(config: Pick<BootstrapConfig, "gitProvider">): string;
|
|
63
71
|
export declare function defaultSopsConfig(repoRoot: string): SopsConfig;
|
package/dist/schemas.js
CHANGED
|
@@ -45,8 +45,10 @@ export const OPTIONAL_COMPONENTS = COMPONENTS.filter((c) => !c.required && !DNS_
|
|
|
45
45
|
// Constants
|
|
46
46
|
// ---------------------------------------------------------------------------
|
|
47
47
|
export const KUBERNETES_VERSION = "1.35.1";
|
|
48
|
-
|
|
49
|
-
export const
|
|
48
|
+
/** Host for the canonical GitOps template repository (clone + template sync upstream). */
|
|
49
|
+
export const SOURCE_TEMPLATE_HOST = "github.com";
|
|
50
|
+
/** owner/repo for the template (used in HTTPS URL and GitHub API paths). */
|
|
51
|
+
export const SOURCE_PROJECT_PATH = "GitOpsAI/gitops-ai-template";
|
|
50
52
|
export const INSTALL_PLAN_PATH = "/tmp/installplan.json";
|
|
51
53
|
export function isShortLivedGitHubToken(token) {
|
|
52
54
|
return token.startsWith("gho_") || token.startsWith("ghu_");
|
|
@@ -56,6 +58,14 @@ export function shouldUseSshDeployKey(config) {
|
|
|
56
58
|
isShortLivedGitHubToken(config.gitToken) &&
|
|
57
59
|
!config.gitFluxToken);
|
|
58
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Username for the Flux GitRepository HTTPS secret (`username` / `password` keys).
|
|
63
|
+
* GitHub rejects generic usernames with PATs in many clients — use `x-access-token`.
|
|
64
|
+
* GitLab expects `oauth2` for HTTPS + token.
|
|
65
|
+
*/
|
|
66
|
+
export function httpsGitCredentialUsername(config) {
|
|
67
|
+
return config.gitProvider === "github" ? "x-access-token" : "oauth2";
|
|
68
|
+
}
|
|
59
69
|
export function defaultSopsConfig(repoRoot) {
|
|
60
70
|
const keyDir = process.env.SOPS_AGE_KEY_DIR ?? `${process.env.HOME}/.sops`;
|
|
61
71
|
return {
|
package/dist/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,wBAAwB,CAAC;IAC3D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC3D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC;IACpD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AA0CH,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE;IACjG,EAAE,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,0BAA0B,EAAE,IAAI,EAAE,wCAAwC,EAAE,QAAQ,EAAE,IAAI,EAAE;IACnI,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,8CAA8C,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,wBAAwB,CAAC,EAAE;IACzJ,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,qCAAqC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,wBAAwB,CAAC,EAAE;IAChJ,EAAE,EAAE,EAAE,0BAA0B,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,wCAAwC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC5H,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,6CAA6C,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE;IACjJ,EAAE,EAAE,EAAE,4BAA4B,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,oDAAoD,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE;IACzK,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,+BAA+B,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;IACnH,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,4CAA4C,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,2BAA2B,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE;CAC1K,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5F,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,kBAAkB,EAAE,4BAA4B,CAAC,CAAC;AAC3F,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC,MAAM,CAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CACxG,CAAC;AAEF,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAC3C,0FAA0F;AAC1F,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AACjD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAEzD,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,OAAO,CACL,MAAM,CAAC,WAAW,KAAK,QAAQ;QAC/B,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxC,CAAC,MAAM,CAAC,YAAY,CACrB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAA4C;IAE5C,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC;IAC3E,OAAO;QACL,MAAM;QACN,OAAO,EAAE,GAAG,MAAM,aAAa;QAC/B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,aAAa;QACtD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,UAAU;QACtD,UAAU,EAAE,GAAG,QAAQ,aAAa;QACpC,SAAS,EAAE,GAAG,MAAM,UAAU;KAC/B,CAAC;AACJ,CAAC"}
|
package/dist/utils/log.js
CHANGED
|
@@ -16,11 +16,42 @@ export function header(title, subtitle) {
|
|
|
16
16
|
p.log.info(pc.dim(subtitle));
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
+
/** Max characters per line for values before wrapping (tokens, long URLs). */
|
|
20
|
+
const SUMMARY_VALUE_WRAP = 56;
|
|
21
|
+
function formatSummaryLines(entries) {
|
|
22
|
+
const list = Object.entries(entries);
|
|
23
|
+
if (list.length === 0)
|
|
24
|
+
return "";
|
|
25
|
+
const labelWithColon = (k) => `${k}:`;
|
|
26
|
+
const labelWidth = Math.max(...list.map(([k]) => labelWithColon(k).length), 0);
|
|
27
|
+
const gap = 2;
|
|
28
|
+
const indent = " ".repeat(labelWidth + gap);
|
|
29
|
+
const out = [];
|
|
30
|
+
for (const [key, raw] of list) {
|
|
31
|
+
const label = labelWithColon(key).padEnd(labelWidth + gap);
|
|
32
|
+
const value = raw ?? "";
|
|
33
|
+
if (value.length === 0 || value.length <= SUMMARY_VALUE_WRAP) {
|
|
34
|
+
out.push(`${pc.bold(label)}${pc.cyan(value)}`);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
let pos = 0;
|
|
38
|
+
let first = true;
|
|
39
|
+
while (pos < value.length) {
|
|
40
|
+
const chunk = value.slice(pos, pos + SUMMARY_VALUE_WRAP);
|
|
41
|
+
pos += SUMMARY_VALUE_WRAP;
|
|
42
|
+
if (first) {
|
|
43
|
+
out.push(`${pc.bold(label)}${pc.cyan(chunk)}`);
|
|
44
|
+
first = false;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
out.push(`${indent}${pc.cyan(chunk)}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return out.join("\n");
|
|
52
|
+
}
|
|
19
53
|
export function summary(title, entries) {
|
|
20
|
-
|
|
21
|
-
.map(([key, value]) => `${pc.bold(key + ":")} ${pc.cyan(value)}`)
|
|
22
|
-
.join("\n");
|
|
23
|
-
p.note(lines, title);
|
|
54
|
+
p.note(formatSummaryLines(entries), title);
|
|
24
55
|
}
|
|
25
56
|
export function nextSteps(steps) {
|
|
26
57
|
const lines = steps
|