@cat-factory/integrations 0.34.0 → 0.35.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/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/environments/EnvironmentConnectionService.d.ts +38 -40
- package/dist/modules/environments/EnvironmentConnectionService.d.ts.map +1 -1
- package/dist/modules/environments/EnvironmentConnectionService.js +106 -114
- package/dist/modules/environments/EnvironmentConnectionService.js.map +1 -1
- package/dist/modules/environments/EnvironmentProvisioningService.d.ts +15 -6
- package/dist/modules/environments/EnvironmentProvisioningService.d.ts.map +1 -1
- package/dist/modules/environments/EnvironmentProvisioningService.js +21 -7
- package/dist/modules/environments/EnvironmentProvisioningService.js.map +1 -1
- package/dist/modules/environments/EnvironmentTeardownService.d.ts +0 -2
- package/dist/modules/environments/EnvironmentTeardownService.d.ts.map +1 -1
- package/dist/modules/environments/EnvironmentTeardownService.js +5 -5
- package/dist/modules/environments/EnvironmentTeardownService.js.map +1 -1
- package/dist/modules/environments/HttpEnvironmentProvider.js +1 -1
- package/dist/modules/environments/HttpEnvironmentProvider.js.map +1 -1
- package/dist/modules/environments/environment-backends.d.ts +53 -0
- package/dist/modules/environments/environment-backends.d.ts.map +1 -0
- package/dist/modules/environments/environment-backends.js +101 -0
- package/dist/modules/environments/environment-backends.js.map +1 -0
- package/dist/modules/environments/environments.logic.d.ts +5 -1
- package/dist/modules/environments/environments.logic.d.ts.map +1 -1
- package/dist/modules/environments/environments.logic.js +24 -0
- package/dist/modules/environments/environments.logic.js.map +1 -1
- package/dist/modules/kubernetes/KubernetesApiClient.d.ts +27 -0
- package/dist/modules/kubernetes/KubernetesApiClient.d.ts.map +1 -0
- package/dist/modules/kubernetes/KubernetesApiClient.js +77 -0
- package/dist/modules/kubernetes/KubernetesApiClient.js.map +1 -0
- package/dist/modules/kubernetes/KubernetesEnvironmentProvider.d.ts +33 -0
- package/dist/modules/kubernetes/KubernetesEnvironmentProvider.d.ts.map +1 -0
- package/dist/modules/kubernetes/KubernetesEnvironmentProvider.js +250 -0
- package/dist/modules/kubernetes/KubernetesEnvironmentProvider.js.map +1 -0
- package/dist/modules/kubernetes/KubernetesRunnerTransport.d.ts +1 -13
- package/dist/modules/kubernetes/KubernetesRunnerTransport.d.ts.map +1 -1
- package/dist/modules/kubernetes/KubernetesRunnerTransport.js +6 -69
- package/dist/modules/kubernetes/KubernetesRunnerTransport.js.map +1 -1
- package/dist/modules/kubernetes/kubernetes-environment.logic.d.ts +68 -0
- package/dist/modules/kubernetes/kubernetes-environment.logic.d.ts.map +1 -0
- package/dist/modules/kubernetes/kubernetes-environment.logic.js +189 -0
- package/dist/modules/kubernetes/kubernetes-environment.logic.js.map +1 -0
- package/dist/modules/kubernetes/kubernetes.logic.d.ts +14 -2
- package/dist/modules/kubernetes/kubernetes.logic.d.ts.map +1 -1
- package/dist/modules/kubernetes/kubernetes.logic.js +45 -12
- package/dist/modules/kubernetes/kubernetes.logic.js.map +1 -1
- package/dist/modules/runners/HttpRunnerPoolProvider.d.ts.map +1 -1
- package/dist/modules/runners/HttpRunnerPoolProvider.js +9 -0
- package/dist/modules/runners/HttpRunnerPoolProvider.js.map +1 -1
- package/dist/modules/runners/runner-backends.d.ts.map +1 -1
- package/dist/modules/runners/runner-backends.js +3 -2
- package/dist/modules/runners/runner-backends.js.map +1 -1
- package/package.json +4 -3
|
@@ -1,32 +1,9 @@
|
|
|
1
|
-
import { ConflictError,
|
|
1
|
+
import { ConflictError, ValidationError } from '@cat-factory/kernel';
|
|
2
2
|
import { requireWorkspace } from '@cat-factory/kernel';
|
|
3
|
-
import {
|
|
3
|
+
import { environmentBackend } from './environment-backends.js';
|
|
4
|
+
import { missingRequiredConfigKeys, stringifyProviderConfig } from './environments.logic.js';
|
|
4
5
|
/** Deterministic head branch for the PR-mode config bootstrap (idempotent re-runs). */
|
|
5
6
|
const BOOTSTRAP_CONFIG_BRANCH = 'cat-factory/env-config';
|
|
6
|
-
/** Collect every secret key a manifest's auth scheme references. */
|
|
7
|
-
export function referencedSecretKeys(manifest) {
|
|
8
|
-
const auth = manifest.auth;
|
|
9
|
-
switch (auth.type) {
|
|
10
|
-
case 'none':
|
|
11
|
-
return [];
|
|
12
|
-
case 'api_key':
|
|
13
|
-
case 'bearer':
|
|
14
|
-
return [auth.secretRef.key];
|
|
15
|
-
case 'basic':
|
|
16
|
-
return [auth.usernameSecretRef.key, auth.passwordSecretRef.key];
|
|
17
|
-
case 'oauth2_client_credentials':
|
|
18
|
-
return [auth.clientIdSecretRef.key, auth.clientSecretSecretRef.key];
|
|
19
|
-
case 'custom_headers':
|
|
20
|
-
return auth.headers.map((h) => h.secretRef.key);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
/** Validate every URL a manifest will fetch (defence against SSRF). */
|
|
24
|
-
function assertManifestUrlsSafe(manifest, policy) {
|
|
25
|
-
assertSafeEnvironmentUrl(manifest.baseUrl, 'base URL', policy);
|
|
26
|
-
if (manifest.auth.type === 'oauth2_client_credentials') {
|
|
27
|
-
assertSafeEnvironmentUrl(manifest.auth.tokenUrl, 'OAuth token URL', policy);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
7
|
export class EnvironmentConnectionService {
|
|
31
8
|
deps;
|
|
32
9
|
constructor(deps) {
|
|
@@ -35,22 +12,30 @@ export class EnvironmentConnectionService {
|
|
|
35
12
|
/** Register (or replace) a workspace's environment provider. */
|
|
36
13
|
async register(workspaceId, input) {
|
|
37
14
|
await requireWorkspace(this.deps.workspaceRepository, workspaceId);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
15
|
+
const backend = this.requireBackend(input.config.kind);
|
|
16
|
+
backend.assertConfigSafe(input.config, {
|
|
17
|
+
...(this.deps.urlPolicy ? { urlPolicy: this.deps.urlPolicy } : {}),
|
|
18
|
+
...(this.deps.customTlsSupported !== undefined
|
|
19
|
+
? { customTlsSupported: this.deps.customTlsSupported }
|
|
20
|
+
: {}),
|
|
21
|
+
});
|
|
22
|
+
// Every secret the chosen backend references must be supplied.
|
|
23
|
+
const missing = backend
|
|
24
|
+
.referencedSecretKeys(input.config)
|
|
25
|
+
.filter((key) => !(key in input.secrets));
|
|
44
26
|
if (missing.length) {
|
|
45
27
|
throw new ValidationError(`Missing secret values for: ${missing.join(', ')}`);
|
|
46
28
|
}
|
|
29
|
+
const meta = backend.connectionMeta(input.config);
|
|
30
|
+
const manifest = backend.toManifest(input.config);
|
|
47
31
|
const existing = await this.deps.environmentConnectionRepository.getByWorkspace(workspaceId);
|
|
48
32
|
const secretsCipher = await this.deps.secretCipher.encrypt(JSON.stringify(input.secrets));
|
|
49
33
|
const record = {
|
|
50
34
|
workspaceId,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
35
|
+
kind: input.config.kind,
|
|
36
|
+
providerId: meta.providerId,
|
|
37
|
+
label: meta.label,
|
|
38
|
+
baseUrl: meta.baseUrl,
|
|
54
39
|
manifestJson: JSON.stringify(manifest),
|
|
55
40
|
secretsCipher,
|
|
56
41
|
createdAt: existing?.createdAt ?? this.deps.clock.now(),
|
|
@@ -59,10 +44,12 @@ export class EnvironmentConnectionService {
|
|
|
59
44
|
await this.deps.environmentConnectionRepository.upsert(record);
|
|
60
45
|
return this.toConnection(record, Object.keys(input.secrets));
|
|
61
46
|
}
|
|
62
|
-
/** Rotate/replace the secret bundle without re-sending the
|
|
47
|
+
/** Rotate/replace the secret bundle without re-sending the config. */
|
|
63
48
|
async updateSecrets(workspaceId, secrets) {
|
|
64
49
|
const { record, manifest } = await this.requireConnection(workspaceId);
|
|
65
|
-
const
|
|
50
|
+
const backend = this.requireBackend(record.kind);
|
|
51
|
+
const config = backend.fromManifest(manifest);
|
|
52
|
+
const missing = backend.referencedSecretKeys(config).filter((key) => !(key in secrets));
|
|
66
53
|
if (missing.length) {
|
|
67
54
|
throw new ValidationError(`Missing secret values for: ${missing.join(', ')}`);
|
|
68
55
|
}
|
|
@@ -73,21 +60,17 @@ export class EnvironmentConnectionService {
|
|
|
73
60
|
}
|
|
74
61
|
/**
|
|
75
62
|
* Describe the provider's config fields for the UI (what to render and whether a
|
|
76
|
-
* connection test is available).
|
|
77
|
-
*
|
|
78
|
-
* from the provider's own `describeConfig`.
|
|
63
|
+
* connection test is available). Resolves the backend for the workspace's stored
|
|
64
|
+
* connection (or the default `manifest` backend when none is registered).
|
|
79
65
|
*/
|
|
80
66
|
async describeProvider(workspaceId) {
|
|
81
|
-
const provider = this.deps.environmentProvider;
|
|
82
67
|
const record = await this.deps.environmentConnectionRepository.getByWorkspace(workspaceId);
|
|
68
|
+
const kind = record?.kind ?? 'manifest';
|
|
69
|
+
const backend = this.requireBackend(kind);
|
|
70
|
+
const provider = this.deps.environmentProvider ?? this.buildProvider(backend);
|
|
71
|
+
const overridden = !!this.deps.environmentProvider;
|
|
83
72
|
const manifest = record ? JSON.parse(record.manifestJson) : undefined;
|
|
84
|
-
const configFields = provider
|
|
85
|
-
// Everything already supplied for this workspace: the stored secret-bundle keys, a
|
|
86
|
-
// native adapter's manifest `providerConfig` keys (its non-secret per-workspace
|
|
87
|
-
// settings), and `baseUrl` when the manifest carries one. The last mirrors the connect
|
|
88
|
-
// form's write path (a field keyed `baseUrl` is persisted onto the manifest's `baseUrl`,
|
|
89
|
-
// NOT into providerConfig or the secret bundle) — without it a `required` baseUrl field
|
|
90
|
-
// would stay in `missingRequired` forever and the banner could never clear.
|
|
73
|
+
const configFields = provider.describeConfig?.(manifest) ?? [];
|
|
91
74
|
const storedKeys = [];
|
|
92
75
|
if (record) {
|
|
93
76
|
storedKeys.push(...Object.keys(await this.decryptSecrets(record)));
|
|
@@ -97,44 +80,48 @@ export class EnvironmentConnectionService {
|
|
|
97
80
|
storedKeys.push('baseUrl');
|
|
98
81
|
}
|
|
99
82
|
return {
|
|
100
|
-
providerId:
|
|
101
|
-
label:
|
|
102
|
-
kind:
|
|
83
|
+
providerId: record?.providerId ?? kind,
|
|
84
|
+
label: record?.label ?? kind,
|
|
85
|
+
kind: overridden || kind !== 'manifest' ? 'native' : 'manifest',
|
|
103
86
|
configFields,
|
|
104
|
-
supportsTest: typeof provider
|
|
105
|
-
supportsRepoValidation: typeof provider
|
|
106
|
-
supportsRepoBootstrap: typeof provider
|
|
107
|
-
...(provider
|
|
87
|
+
supportsTest: typeof provider.testConnection === 'function',
|
|
88
|
+
supportsRepoValidation: typeof provider.validateRepo === 'function',
|
|
89
|
+
supportsRepoBootstrap: typeof provider.bootstrapProviderConfiguration === 'function',
|
|
90
|
+
...(provider.describeBootstrapInputs
|
|
108
91
|
? { bootstrapInputs: provider.describeBootstrapInputs() }
|
|
109
92
|
: {}),
|
|
110
93
|
missingRequired: missingRequiredConfigKeys(configFields, storedKeys),
|
|
111
|
-
// The current saved manifest (non-secret — only secret-ref key names, never values),
|
|
112
|
-
// so the native connect form overlays edits onto the real stored manifest instead of
|
|
113
|
-
// the bare scaffold, preserving previously-saved providerConfig (incl. nested values).
|
|
114
94
|
...(manifest ? { savedManifest: manifest } : {}),
|
|
115
|
-
...(provider
|
|
95
|
+
...(provider.describeManifestTemplate
|
|
116
96
|
? { manifestTemplate: provider.describeManifestTemplate() }
|
|
117
97
|
: {}),
|
|
118
98
|
};
|
|
119
99
|
}
|
|
120
100
|
/**
|
|
121
|
-
* Probe a candidate connection before saving (nothing is persisted). Builds
|
|
122
|
-
*
|
|
123
|
-
*
|
|
101
|
+
* Probe a candidate connection before saving (nothing is persisted). Builds the
|
|
102
|
+
* backend's provider from the candidate config + a resolver over the supplied
|
|
103
|
+
* (unsaved) secrets and delegates to the provider's `testConnection`.
|
|
124
104
|
*/
|
|
125
105
|
async testConnection(workspaceId, input) {
|
|
126
106
|
await requireWorkspace(this.deps.workspaceRepository, workspaceId);
|
|
127
|
-
|
|
128
|
-
|
|
107
|
+
if (!input.config)
|
|
108
|
+
return { ok: true, message: 'Nothing to test.' };
|
|
109
|
+
const backend = this.requireBackend(input.config.kind);
|
|
110
|
+
backend.assertConfigSafe(input.config, {
|
|
111
|
+
...(this.deps.urlPolicy ? { urlPolicy: this.deps.urlPolicy } : {}),
|
|
112
|
+
...(this.deps.customTlsSupported !== undefined
|
|
113
|
+
? { customTlsSupported: this.deps.customTlsSupported }
|
|
114
|
+
: {}),
|
|
115
|
+
});
|
|
116
|
+
const provider = this.buildProvider(backend);
|
|
117
|
+
if (!provider.testConnection) {
|
|
129
118
|
return { ok: true, message: 'This provider has no connection test.' };
|
|
130
119
|
}
|
|
131
|
-
|
|
132
|
-
assertManifestUrlsSafe(input.manifest, this.deps.urlPolicy ?? STRICT_URL_SAFETY_POLICY);
|
|
133
|
-
}
|
|
120
|
+
const manifest = backend.toManifest(input.config);
|
|
134
121
|
const secrets = input.secrets ?? {};
|
|
135
122
|
return provider.testConnection({
|
|
136
|
-
manifest
|
|
137
|
-
config:
|
|
123
|
+
manifest,
|
|
124
|
+
config: {},
|
|
138
125
|
resolveSecret: (key) => secrets[key],
|
|
139
126
|
});
|
|
140
127
|
}
|
|
@@ -145,8 +132,8 @@ export class EnvironmentConnectionService {
|
|
|
145
132
|
*/
|
|
146
133
|
async validateRepo(workspaceId, input) {
|
|
147
134
|
await requireWorkspace(this.deps.workspaceRepository, workspaceId);
|
|
148
|
-
const provider = this.
|
|
149
|
-
if (!provider
|
|
135
|
+
const provider = await this.providerForWorkspace(workspaceId);
|
|
136
|
+
if (!provider.validateRepo)
|
|
150
137
|
return { ok: true, issues: [] };
|
|
151
138
|
const bound = await this.resolveRepo(workspaceId, input.owner, input.repo, input.provider);
|
|
152
139
|
if (!bound) {
|
|
@@ -163,7 +150,7 @@ export class EnvironmentConnectionService {
|
|
|
163
150
|
const manifest = await this.optionalManifest(workspaceId);
|
|
164
151
|
const resolveSecret = await this.resolveSecrets(workspaceId);
|
|
165
152
|
const gitRef = input.gitRef ?? bound.baseBranch;
|
|
166
|
-
return this.runProviderValidate(bound, gitRef, input.owner, input.repo, stringifyProviderConfig(manifest?.providerConfig), resolveSecret);
|
|
153
|
+
return this.runProviderValidate(provider, bound, gitRef, input.owner, input.repo, stringifyProviderConfig(manifest?.providerConfig), resolveSecret);
|
|
167
154
|
}
|
|
168
155
|
/**
|
|
169
156
|
* Mechanically bootstrap the provider's config file into a target repo from the
|
|
@@ -173,13 +160,13 @@ export class EnvironmentConnectionService {
|
|
|
173
160
|
*/
|
|
174
161
|
async bootstrapRepo(workspaceId, input) {
|
|
175
162
|
await requireWorkspace(this.deps.workspaceRepository, workspaceId);
|
|
176
|
-
const provider = this.
|
|
163
|
+
const provider = await this.providerForWorkspace(workspaceId);
|
|
177
164
|
const fail = (issues) => ({
|
|
178
165
|
ok: false,
|
|
179
166
|
committed: false,
|
|
180
167
|
issues,
|
|
181
168
|
});
|
|
182
|
-
if (!provider
|
|
169
|
+
if (!provider.bootstrapProviderConfiguration) {
|
|
183
170
|
return fail([
|
|
184
171
|
{ severity: 'error', message: 'This provider does not support config bootstrap.' },
|
|
185
172
|
]);
|
|
@@ -211,17 +198,12 @@ export class EnvironmentConnectionService {
|
|
|
211
198
|
let writeBranch = targetBranch;
|
|
212
199
|
if (!generated.needsAgent && generated.files.length) {
|
|
213
200
|
const prMode = !!input.openPr;
|
|
214
|
-
// In PR mode we write to (and re-validate against) a deterministic branch; a re-run
|
|
215
|
-
// must compare against THAT branch (not the still-unmerged target) so identical
|
|
216
|
-
// content is a no-op and we never re-commit / open a duplicate PR. First run: the PR
|
|
217
|
-
// branch doesn't exist yet, so the base/target branch is the correct compare ref.
|
|
218
201
|
let prBranchHead = null;
|
|
219
202
|
if (prMode) {
|
|
220
203
|
writeBranch = BOOTSTRAP_CONFIG_BRANCH;
|
|
221
204
|
prBranchHead = await bound.repo.headSha(writeBranch);
|
|
222
205
|
}
|
|
223
206
|
const compareBranch = prMode && prBranchHead ? writeBranch : targetBranch;
|
|
224
|
-
// Idempotent: only write files whose content actually changes.
|
|
225
207
|
const changed = [];
|
|
226
208
|
for (const file of generated.files) {
|
|
227
209
|
const existing = await readRepoFile(file.path, compareBranch);
|
|
@@ -237,8 +219,6 @@ export class EnvironmentConnectionService {
|
|
|
237
219
|
await bound.repo.createBranch(writeBranch, base);
|
|
238
220
|
}
|
|
239
221
|
await bound.repo.commitFiles({ branch: writeBranch, message, files: changed });
|
|
240
|
-
// Only open a PR when we just created the branch; a re-run commits onto the
|
|
241
|
-
// existing branch and its already-open PR picks the new commit up.
|
|
242
222
|
if (!prBranchHead) {
|
|
243
223
|
await bound.repo.openPullRequest({
|
|
244
224
|
title: message,
|
|
@@ -254,7 +234,7 @@ export class EnvironmentConnectionService {
|
|
|
254
234
|
committed = true;
|
|
255
235
|
}
|
|
256
236
|
}
|
|
257
|
-
let validation = await this.runProviderValidate(bound, writeBranch, input.owner, input.repo, config, resolveSecret);
|
|
237
|
+
let validation = await this.runProviderValidate(provider, bound, writeBranch, input.owner, input.repo, config, resolveSecret);
|
|
258
238
|
let usedAgent = false;
|
|
259
239
|
let repairJobId;
|
|
260
240
|
if (!validation.ok &&
|
|
@@ -262,13 +242,6 @@ export class EnvironmentConnectionService {
|
|
|
262
242
|
provider.describeRepairAgent &&
|
|
263
243
|
this.deps.dispatchConfigRepair) {
|
|
264
244
|
usedAgent = true;
|
|
265
|
-
// PR mode: the agent must push its fix to the PR branch, NOT straight to the target
|
|
266
|
-
// branch. The mechanical path only switches `writeBranch` to the PR branch when it
|
|
267
|
-
// actually committed generated files; on the `needsAgent` path it never did, so
|
|
268
|
-
// `writeBranch` is still the target branch here. Establish the PR branch (create it off
|
|
269
|
-
// the target head + open the PR) before dispatch, so the agent's push lands on the PR
|
|
270
|
-
// branch and re-validation reads it — otherwise `openPr` would be silently bypassed and
|
|
271
|
-
// the fix committed directly onto e.g. `main`.
|
|
272
245
|
if (input.openPr && writeBranch === targetBranch) {
|
|
273
246
|
const prBranchHead = await bound.repo.headSha(BOOTSTRAP_CONFIG_BRANCH);
|
|
274
247
|
if (!prBranchHead) {
|
|
@@ -285,12 +258,6 @@ export class EnvironmentConnectionService {
|
|
|
285
258
|
}
|
|
286
259
|
writeBranch = BOOTSTRAP_CONFIG_BRANCH;
|
|
287
260
|
}
|
|
288
|
-
// START the durable repair run and return immediately — the agent pushes its fix back
|
|
289
|
-
// onto `writeBranch` asynchronously, and the run re-validates (via {@link revalidate})
|
|
290
|
-
// on completion to settle `ok`/`issues`. So this call does NOT block on the agent and
|
|
291
|
-
// does NOT re-validate inline; `ok` is reported as `false` (pending) until the repair
|
|
292
|
-
// run finishes, which the caller tracks via `repairJobId` (snapshot + repair events).
|
|
293
|
-
// A dispatch/pre-flight failure is recorded on the repair-job row by the run itself.
|
|
294
261
|
const started = await this.deps.dispatchConfigRepair({
|
|
295
262
|
workspaceId,
|
|
296
263
|
owner: input.owner,
|
|
@@ -309,8 +276,6 @@ export class EnvironmentConnectionService {
|
|
|
309
276
|
providerId: manifest?.providerId ?? null,
|
|
310
277
|
blockId: null,
|
|
311
278
|
executionId: null,
|
|
312
|
-
// The mechanical bootstrap's own outcome: a dispatched async repair means it did NOT
|
|
313
|
-
// produce a valid config (a repair run is now pending; `repairJobId` in `detail`).
|
|
314
279
|
outcome: validation.ok ? 'success' : 'failure',
|
|
315
280
|
error: validation.ok
|
|
316
281
|
? null
|
|
@@ -319,9 +284,6 @@ export class EnvironmentConnectionService {
|
|
|
319
284
|
: 'Provider config bootstrap did not produce a valid config',
|
|
320
285
|
detail: JSON.stringify({ committed, usedAgent, branch: writeBranch, repairJobId }),
|
|
321
286
|
});
|
|
322
|
-
// Surface the provider's own bootstrap diagnostics (e.g. why it bailed with
|
|
323
|
-
// `needsAgent`) on the mechanical path. Once an async repair was dispatched, `ok` is
|
|
324
|
-
// pending (false) and the residual issues are the ones the repair will address.
|
|
325
287
|
const generatedIssues = generated.issues ?? [];
|
|
326
288
|
return {
|
|
327
289
|
ok: usedAgent ? false : validation.ok,
|
|
@@ -332,16 +294,13 @@ export class EnvironmentConnectionService {
|
|
|
332
294
|
};
|
|
333
295
|
}
|
|
334
296
|
/**
|
|
335
|
-
* Re-validate a repo's provider config after the async repair agent pushed its fix
|
|
336
|
-
*
|
|
337
|
-
* same way {@link bootstrapRepo} does, then running the provider's `validateRepo`. This
|
|
338
|
-
* is the callback {@link EnvConfigRepairService.pollJob} invokes on a successful repair
|
|
339
|
-
* run to settle its terminal `ok`/`issues`. Lives here because the decrypted secrets +
|
|
340
|
-
* manifest config live here (orchestration must not reach into the integration internals).
|
|
297
|
+
* Re-validate a repo's provider config after the async repair agent pushed its fix.
|
|
298
|
+
* The callback {@link EnvConfigRepairService.pollJob} invokes on a successful repair.
|
|
341
299
|
*/
|
|
342
300
|
async revalidate(input) {
|
|
343
301
|
const { workspaceId, owner, repo, gitRef } = input;
|
|
344
302
|
await requireWorkspace(this.deps.workspaceRepository, workspaceId);
|
|
303
|
+
const provider = await this.providerForWorkspace(workspaceId);
|
|
345
304
|
const bound = await this.resolveRepo(workspaceId, owner, repo);
|
|
346
305
|
if (!bound) {
|
|
347
306
|
return {
|
|
@@ -357,7 +316,16 @@ export class EnvironmentConnectionService {
|
|
|
357
316
|
const manifest = await this.optionalManifest(workspaceId);
|
|
358
317
|
const resolveSecret = await this.resolveSecrets(workspaceId);
|
|
359
318
|
const config = stringifyProviderConfig(manifest?.providerConfig);
|
|
360
|
-
return this.runProviderValidate(bound, gitRef, owner, repo, config, resolveSecret);
|
|
319
|
+
return this.runProviderValidate(provider, bound, gitRef, owner, repo, config, resolveSecret);
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* The live provider + stored manifest for a workspace, for the provisioning/teardown
|
|
323
|
+
* services. Throws when the workspace has no registered connection.
|
|
324
|
+
*/
|
|
325
|
+
async resolveProvider(workspaceId) {
|
|
326
|
+
const { record, manifest } = await this.requireConnection(workspaceId);
|
|
327
|
+
const provider = this.deps.environmentProvider ?? this.buildProvider(this.requireBackend(record.kind));
|
|
328
|
+
return { provider, manifest };
|
|
361
329
|
}
|
|
362
330
|
/** Resolve a VCS-neutral bound RepoFiles for the workspace+coords, or null. */
|
|
363
331
|
async resolveRepo(workspaceId, owner, repo, provider) {
|
|
@@ -367,10 +335,9 @@ export class EnvironmentConnectionService {
|
|
|
367
335
|
...(provider ? { provider } : {}),
|
|
368
336
|
})) ?? null);
|
|
369
337
|
}
|
|
370
|
-
/** Run the provider's `validateRepo` with a VCS-neutral reader bound to `gitRef`. */
|
|
371
|
-
async runProviderValidate(bound, gitRef, owner, repo, config, resolveSecret) {
|
|
372
|
-
|
|
373
|
-
if (!provider?.validateRepo)
|
|
338
|
+
/** Run the given provider's `validateRepo` with a VCS-neutral reader bound to `gitRef`. */
|
|
339
|
+
async runProviderValidate(provider, bound, gitRef, owner, repo, config, resolveSecret) {
|
|
340
|
+
if (!provider.validateRepo)
|
|
374
341
|
return { ok: true, issues: [] };
|
|
375
342
|
return provider.validateRepo({
|
|
376
343
|
readRepoFile: (path, ref) => bound.repo.getFile(path, ref ?? gitRef),
|
|
@@ -391,9 +358,7 @@ export class EnvironmentConnectionService {
|
|
|
391
358
|
}
|
|
392
359
|
/**
|
|
393
360
|
* Resolve the parsed manifest if the workspace has a registered connection, else
|
|
394
|
-
* undefined — the non-throwing sibling of {@link requireConnection}.
|
|
395
|
-
* repo validate/bootstrap routes are documented to never throw to the client, so they
|
|
396
|
-
* degrade to "no per-workspace config" rather than a 409 when nothing is registered.
|
|
361
|
+
* undefined — the non-throwing sibling of {@link requireConnection}.
|
|
397
362
|
*/
|
|
398
363
|
async optionalManifest(workspaceId) {
|
|
399
364
|
const record = await this.deps.environmentConnectionRepository.getByWorkspace(workspaceId);
|
|
@@ -425,6 +390,23 @@ export class EnvironmentConnectionService {
|
|
|
425
390
|
return;
|
|
426
391
|
await this.deps.environmentConnectionRepository.softDelete(workspaceId, this.deps.clock.now());
|
|
427
392
|
}
|
|
393
|
+
// --- internals ----------------------------------------------------------
|
|
394
|
+
requireBackend(kind) {
|
|
395
|
+
const backend = environmentBackend(kind);
|
|
396
|
+
if (!backend)
|
|
397
|
+
throw new ValidationError(`Unknown environment backend kind '${kind}'`);
|
|
398
|
+
return backend;
|
|
399
|
+
}
|
|
400
|
+
buildProvider(backend) {
|
|
401
|
+
return backend.buildProvider(this.deps.urlPolicy ? { urlPolicy: this.deps.urlPolicy } : {});
|
|
402
|
+
}
|
|
403
|
+
/** The provider for the workspace's stored kind (or the manifest default when none). */
|
|
404
|
+
async providerForWorkspace(workspaceId) {
|
|
405
|
+
if (this.deps.environmentProvider)
|
|
406
|
+
return this.deps.environmentProvider;
|
|
407
|
+
const record = await this.deps.environmentConnectionRepository.getByWorkspace(workspaceId);
|
|
408
|
+
return this.buildProvider(this.requireBackend(record?.kind ?? 'manifest'));
|
|
409
|
+
}
|
|
428
410
|
async decryptSecrets(record) {
|
|
429
411
|
if (!record.secretsCipher)
|
|
430
412
|
return {};
|
|
@@ -432,12 +414,22 @@ export class EnvironmentConnectionService {
|
|
|
432
414
|
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
433
415
|
}
|
|
434
416
|
toConnection(record, secretKeys) {
|
|
417
|
+
let config;
|
|
418
|
+
try {
|
|
419
|
+
const backend = this.requireBackend(record.kind);
|
|
420
|
+
config = backend.fromManifest(JSON.parse(record.manifestJson));
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
config = undefined;
|
|
424
|
+
}
|
|
435
425
|
return {
|
|
426
|
+
kind: record.kind,
|
|
436
427
|
providerId: record.providerId,
|
|
437
428
|
label: record.label,
|
|
438
429
|
baseUrl: record.baseUrl,
|
|
439
430
|
connectedAt: record.createdAt,
|
|
440
431
|
secretKeys,
|
|
432
|
+
...(config ? { config } : {}),
|
|
441
433
|
};
|
|
442
434
|
}
|
|
443
435
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvironmentConnectionService.js","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentConnectionService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EnvironmentConnectionService.js","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentConnectionService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import type { Clock, IdGenerator } from '@cat-factory/kernel';
|
|
2
2
|
import type { EnvironmentRegistryRepository } from '@cat-factory/kernel';
|
|
3
|
-
import type {
|
|
3
|
+
import type { ProvisionContext, ResolveRunRepoContext, RunRepoContext, UrlSafetyPolicy } from '@cat-factory/kernel';
|
|
4
4
|
import type { SecretCipher } from '@cat-factory/kernel';
|
|
5
5
|
import type { EnvironmentAccessHandle, EnvironmentHandle } from '@cat-factory/kernel';
|
|
6
6
|
import type { EnvironmentConnectionService } from './EnvironmentConnectionService.js';
|
|
7
7
|
import type { ProvisioningLogRecorder } from '../provisioning-logs/ProvisioningLogService.js';
|
|
8
8
|
export interface EnvironmentProvisioningServiceDependencies {
|
|
9
9
|
connectionService: EnvironmentConnectionService;
|
|
10
|
-
environmentProvider: EnvironmentProvider;
|
|
11
10
|
environmentRegistryRepository: EnvironmentRegistryRepository;
|
|
12
11
|
secretCipher: SecretCipher;
|
|
13
12
|
idGenerator: IdGenerator;
|
|
@@ -18,12 +17,22 @@ export interface EnvironmentProvisioningServiceDependencies {
|
|
|
18
17
|
provisioningLog?: ProvisioningLogRecorder;
|
|
19
18
|
/**
|
|
20
19
|
* Resolve the VCS-neutral, run-repo-bound RepoFiles for a block, so provisioning can
|
|
21
|
-
* pre-flight `provider.validateRepo`
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
20
|
+
* pre-flight `provider.validateRepo` BEFORE calling the provider — failing fast with a
|
|
21
|
+
* clear error instead of an async failed environment — and so a native adapter (the
|
|
22
|
+
* Kubernetes backend) can read CO-LOCATED manifests from the block's repo. Absent (or a
|
|
23
|
+
* block-less manual provision) ⇒ no run repo.
|
|
25
24
|
*/
|
|
26
25
|
resolveRunRepoContext?: ResolveRunRepoContext;
|
|
26
|
+
/**
|
|
27
|
+
* Resolve a checkout-free RepoFiles bound to an ARBITRARY repo — so a native adapter (the
|
|
28
|
+
* Kubernetes backend) can read manifests from a SEPARATE repo. Absent ⇒ separate-repo
|
|
29
|
+
* sources report "no VCS connection".
|
|
30
|
+
*/
|
|
31
|
+
resolveRepoFilesForWorkspace?: (workspaceId: string, coords: {
|
|
32
|
+
owner: string;
|
|
33
|
+
repo: string;
|
|
34
|
+
provider?: 'github' | 'gitlab';
|
|
35
|
+
}) => Promise<RunRepoContext | null>;
|
|
27
36
|
}
|
|
28
37
|
export interface ProvisionArgs {
|
|
29
38
|
workspaceId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvironmentProvisioningService.d.ts","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentProvisioningService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAqB,6BAA6B,EAAE,MAAM,qBAAqB,CAAA;AAC3F,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"EnvironmentProvisioningService.d.ts","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentProvisioningService.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,13 +22,13 @@ export class EnvironmentProvisioningService {
|
|
|
22
22
|
/** Provision an environment, persisting an encrypted record keyed by block/run. */
|
|
23
23
|
async provision(args) {
|
|
24
24
|
const { workspaceId } = args;
|
|
25
|
-
const { manifest } = await this.deps.connectionService.
|
|
25
|
+
const { manifest, provider } = await this.deps.connectionService.resolveProvider(workspaceId);
|
|
26
26
|
const resolveSecret = await this.deps.connectionService.resolveSecrets(workspaceId);
|
|
27
27
|
// Pre-flight gate: if the provider declares repo-config expectations (e.g. Kargo's
|
|
28
28
|
// `.kargo.yml`), verify them against the block's repo BEFORE provisioning, so a
|
|
29
29
|
// missing/malformed config fails synchronously here instead of as an async failed
|
|
30
30
|
// environment. Skipped for a block-less manual provision or an unconfigured workspace.
|
|
31
|
-
await this.preflightValidateRepo(args, manifest, resolveSecret);
|
|
31
|
+
await this.preflightValidateRepo(provider, args, manifest, resolveSecret);
|
|
32
32
|
// Expose the block id as `{{input.blockId}}` even on a manual provision, so a
|
|
33
33
|
// manifest can template against it without the caller having to repeat it. The
|
|
34
34
|
// typed git/PR/repo context is flattened into the same namespace for the manifest
|
|
@@ -38,13 +38,28 @@ export class EnvironmentProvisioningService {
|
|
|
38
38
|
inputs.blockId = args.blockId;
|
|
39
39
|
Object.assign(inputs, contextInputs(args.context));
|
|
40
40
|
Object.assign(inputs, args.inputs);
|
|
41
|
+
// A native adapter (the Kubernetes backend) reads manifests from the run repo
|
|
42
|
+
// (co-located) or a separate repo; resolve both seams when available.
|
|
43
|
+
const runRepo = args.blockId && this.deps.resolveRunRepoContext
|
|
44
|
+
? await this.deps.resolveRunRepoContext(workspaceId, args.blockId)
|
|
45
|
+
: null;
|
|
41
46
|
let provisioned;
|
|
42
47
|
try {
|
|
43
|
-
provisioned = await
|
|
48
|
+
provisioned = await provider.provision({
|
|
44
49
|
manifest,
|
|
45
50
|
inputs,
|
|
46
51
|
...(args.context ? { provisionContext: args.context } : {}),
|
|
47
52
|
resolveSecret,
|
|
53
|
+
...(runRepo ? { runRepo } : {}),
|
|
54
|
+
...(this.deps.resolveRepoFilesForWorkspace
|
|
55
|
+
? {
|
|
56
|
+
resolveRepoFiles: (coords) => this.deps.resolveRepoFilesForWorkspace(workspaceId, {
|
|
57
|
+
owner: coords.owner,
|
|
58
|
+
repo: coords.repo,
|
|
59
|
+
...(coords.provider ? { provider: coords.provider } : {}),
|
|
60
|
+
}),
|
|
61
|
+
}
|
|
62
|
+
: {}),
|
|
48
63
|
});
|
|
49
64
|
}
|
|
50
65
|
catch (error) {
|
|
@@ -117,8 +132,7 @@ export class EnvironmentProvisioningService {
|
|
|
117
132
|
* provider. No-op when the provider has no `validateRepo`, no run-repo resolver is
|
|
118
133
|
* wired, the provision is block-less, or the repo can't be resolved (unconfigured).
|
|
119
134
|
*/
|
|
120
|
-
async preflightValidateRepo(args, manifest, resolveSecret) {
|
|
121
|
-
const provider = this.deps.environmentProvider;
|
|
135
|
+
async preflightValidateRepo(provider, args, manifest, resolveSecret) {
|
|
122
136
|
if (!provider.validateRepo || !this.deps.resolveRunRepoContext || !args.blockId)
|
|
123
137
|
return;
|
|
124
138
|
const bound = await this.deps.resolveRunRepoContext(args.workspaceId, args.blockId);
|
|
@@ -157,12 +171,12 @@ export class EnvironmentProvisioningService {
|
|
|
157
171
|
/** Re-poll the provider for an environment's status and persist any change. */
|
|
158
172
|
async refreshStatus(workspaceId, id) {
|
|
159
173
|
const record = assertFound(await this.deps.environmentRegistryRepository.get(workspaceId, id), 'Environment', id);
|
|
160
|
-
const { manifest } = await this.deps.connectionService.
|
|
174
|
+
const { manifest, provider } = await this.deps.connectionService.resolveProvider(workspaceId);
|
|
161
175
|
const resolveSecret = await this.deps.connectionService.resolveSecrets(workspaceId);
|
|
162
176
|
const provisionFields = await this.decryptFields(record.provisionFieldsCipher);
|
|
163
177
|
let provisioned;
|
|
164
178
|
try {
|
|
165
|
-
provisioned = await
|
|
179
|
+
provisioned = await provider.status({
|
|
166
180
|
manifest,
|
|
167
181
|
externalId: record.externalId,
|
|
168
182
|
provisionFields,
|