@cat-factory/contracts 0.60.0 → 0.62.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.
@@ -275,15 +275,28 @@ export declare const manifestIdSchema: v.SchemaWithPipe<readonly [v.StringSchema
275
275
  export type ManifestId = v.InferOutput<typeof manifestIdSchema>;
276
276
  /** The secret-bundle key the Kubernetes env backend reads the ServiceAccount token from. */
277
277
  export declare const KUBERNETES_ENV_TOKEN_SECRET_KEY = "apiToken";
278
+ /**
279
+ * How the manifests at `path` are turned into apiserver-ready resources. `raw` (the
280
+ * default, and the only one the in-Worker native REST adapter handles) treats `path` as
281
+ * a single manifest file or a flat directory of already-valid YAML docs. `kustomize`
282
+ * treats `path` as an overlay directory (`kustomization.yaml` + `resources`/`components`/
283
+ * `bases`) that must be `kustomize build`-rendered before apply — which only the
284
+ * container-backed deploy adapter can do (it shells out to real `kustomize`/`helm`).
285
+ */
286
+ export declare const kubernetesRendererSchema: v.PicklistSchema<["raw", "kustomize"], undefined>;
287
+ export type KubernetesRenderer = v.InferOutput<typeof kubernetesRendererSchema>;
278
288
  /**
279
289
  * Where the per-PR manifests are read from. `colocated` reads them from the block's
280
290
  * own repo at the PR head branch; `separate` reads them from a different repo (the
281
- * Kubernetes definition often lives outside the service repo).
291
+ * Kubernetes definition often lives outside the service repo). `renderer` (absent ⇒
292
+ * `raw`) selects how `path` is turned into resources; `kustomize` requires the
293
+ * container-backed deploy adapter.
282
294
  */
283
295
  export declare const kubernetesManifestSourceSchema: v.VariantSchema<"type", [v.ObjectSchema<{
284
296
  readonly type: v.LiteralSchema<"colocated", undefined>;
285
297
  /** File or directory path within the PR repo (read at the PR head branch). */
286
298
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
299
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
287
300
  }, undefined>, v.ObjectSchema<{
288
301
  readonly type: v.LiteralSchema<"separate", undefined>;
289
302
  /** `owner/repo` of the manifests repo. */
@@ -292,6 +305,7 @@ export declare const kubernetesManifestSourceSchema: v.VariantSchema<"type", [v.
292
305
  readonly ref: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
293
306
  /** File or directory path within the manifests repo. */
294
307
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
308
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
295
309
  }, undefined>], undefined>;
296
310
  export type KubernetesManifestSource = v.InferOutput<typeof kubernetesManifestSourceSchema>;
297
311
  /** How the environment URL is derived once the manifests are applied. */
@@ -311,6 +325,16 @@ export declare const kubernetesUrlSourceSchema: v.VariantSchema<"source", [v.Obj
311
325
  readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
312
326
  readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, undefined>;
313
327
  readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
328
+ }, undefined>, v.ObjectSchema<{
329
+ readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
330
+ /** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
331
+ readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
332
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
333
+ }, undefined>, v.ObjectSchema<{
334
+ readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
335
+ /** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
336
+ readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
337
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
314
338
  }, undefined>], undefined>;
315
339
  export type KubernetesUrlSource = v.InferOutput<typeof kubernetesUrlSourceSchema>;
316
340
  export declare const kubernetesEnvironmentConfigSchema: v.ObjectSchema<{
@@ -333,6 +357,7 @@ export declare const kubernetesEnvironmentConfigSchema: v.ObjectSchema<{
333
357
  readonly type: v.LiteralSchema<"colocated", undefined>;
334
358
  /** File or directory path within the PR repo (read at the PR head branch). */
335
359
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
360
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
336
361
  }, undefined>, v.ObjectSchema<{
337
362
  readonly type: v.LiteralSchema<"separate", undefined>;
338
363
  /** `owner/repo` of the manifests repo. */
@@ -341,6 +366,7 @@ export declare const kubernetesEnvironmentConfigSchema: v.ObjectSchema<{
341
366
  readonly ref: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
342
367
  /** File or directory path within the manifests repo. */
343
368
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
369
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
344
370
  }, undefined>], undefined>;
345
371
  /** How the environment URL is derived once applied. */
346
372
  readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
@@ -359,6 +385,16 @@ export declare const kubernetesEnvironmentConfigSchema: v.ObjectSchema<{
359
385
  readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
360
386
  readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, undefined>;
361
387
  readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
388
+ }, undefined>, v.ObjectSchema<{
389
+ readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
390
+ /** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
391
+ readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
392
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
393
+ }, undefined>, v.ObjectSchema<{
394
+ readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
395
+ /** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
396
+ readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
397
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
362
398
  }, undefined>], undefined>;
363
399
  /**
364
400
  * Optional image reference made available to the manifests as `{{image}}` (e.g. a
@@ -373,6 +409,157 @@ export declare const kubernetesEnvironmentConfigSchema: v.ObjectSchema<{
373
409
  readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
374
410
  }, undefined>;
375
411
  export type KubernetesEnvironmentConfig = v.InferOutput<typeof kubernetesEnvironmentConfigSchema>;
412
+ /**
413
+ * A structured image override (the kustomize `images:` equivalent, generalizing the
414
+ * legacy `{{image}}` text substitution). Matches a container image by `name` and
415
+ * overrides its repo and/or tag/digest; the override values are templated over the
416
+ * provision vars (e.g. `newTagTemplate: '{{branch}}'`).
417
+ */
418
+ export declare const kubernetesImageOverrideSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
419
+ /** The image to match (the `name:` in a kustomization `images:` entry), e.g. `registry/app`. */
420
+ readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
421
+ /** Optional replacement repo, templated; absent ⇒ keep the original repo. */
422
+ readonly newNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
423
+ /** Replacement tag, templated (e.g. `{{branch}}` / `{{sha}}`); mutually exclusive with digest. */
424
+ readonly newTagTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
425
+ /** Replacement digest, templated; alternative to a tag. */
426
+ readonly digestTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
427
+ }, undefined>, v.CheckAction<{
428
+ name: string;
429
+ newNameTemplate?: string | undefined;
430
+ newTagTemplate?: string | undefined;
431
+ digestTemplate?: string | undefined;
432
+ }, "an image override must set at least one of newNameTemplate, newTagTemplate, or digestTemplate.">, v.CheckAction<{
433
+ name: string;
434
+ newNameTemplate?: string | undefined;
435
+ newTagTemplate?: string | undefined;
436
+ digestTemplate?: string | undefined;
437
+ }, "newTagTemplate and digestTemplate are mutually exclusive on an image override.">]>;
438
+ export type KubernetesImageOverride = v.InferOutput<typeof kubernetesImageOverrideSchema>;
439
+ /** A single templated `--set path=value` for a helm release. */
440
+ export declare const kubernetesHelmSetSchema: v.ObjectSchema<{
441
+ /** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
442
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
443
+ /** The value, templated over the provision vars. */
444
+ readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
445
+ }, undefined>;
446
+ export type KubernetesHelmSet = v.InferOutput<typeof kubernetesHelmSetSchema>;
447
+ /**
448
+ * A helm release the deploy adapter installs/upgrades (`helm upgrade --install`).
449
+ * `scope: 'shared'` is a cluster singleton (installed once, never torn down per-PR —
450
+ * e.g. an ingress/gateway controller); `per-environment` (the default) re-installs in
451
+ * each per-PR namespace. The `version` pin is required so provisioning is deterministic.
452
+ */
453
+ export declare const kubernetesHelmReleaseSchema: v.ObjectSchema<{
454
+ /** Release name. */
455
+ readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
456
+ /** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
457
+ readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
458
+ /** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
459
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
460
+ /** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
461
+ readonly version: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "version must be a pinned semver (e.g. 1.2.3), not a floating tag like latest or ^1.0.">]>;
462
+ /** Namespace to install into, templated; absent ⇒ the environment namespace. */
463
+ readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
464
+ /** Inline `--values` overrides. */
465
+ readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
466
+ /** Templated `--set` overrides. */
467
+ readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
468
+ /** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
469
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
470
+ /** The value, templated over the provision vars. */
471
+ readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
472
+ }, undefined>, undefined>, undefined>;
473
+ /** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
474
+ readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
475
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
476
+ readonly secretRef: v.ObjectSchema<{
477
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
478
+ }, undefined>;
479
+ }, undefined>, undefined>, undefined>;
480
+ readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
481
+ }, undefined>;
482
+ export type KubernetesHelmRelease = v.InferOutput<typeof kubernetesHelmReleaseSchema>;
483
+ /** One entry inside an injected Secret: a logical key mapped to a secret-bundle ref OR a templated value. */
484
+ export declare const kubernetesSecretEntrySchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
485
+ /** Key inside the rendered Secret / `.env`. */
486
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
487
+ /** Resolve the value from the workspace encrypted bundle by key. */
488
+ readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
489
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
490
+ }, undefined>, undefined>;
491
+ /** OR a non-secret value, templated over the provision vars. */
492
+ readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
493
+ }, undefined>, v.CheckAction<{
494
+ key: string;
495
+ secretRef?: {
496
+ key: string;
497
+ } | undefined;
498
+ valueTemplate?: string | undefined;
499
+ }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>;
500
+ export type KubernetesSecretEntry = v.InferOutput<typeof kubernetesSecretEntrySchema>;
501
+ /**
502
+ * How the deploy adapter feeds resolved secret values in before apply, discriminated by
503
+ * `mode`. The mapping of logical keys is in-repo intent; the values resolve from the
504
+ * encrypted bundle at provision time (the config carries secret KEYS, never values).
505
+ *
506
+ * - `secret`: materialize a `Secret` resource named `secretName` directly in the namespace.
507
+ * - `generatorEnvFile`: write the entries as a `KEY=value` `.env` file at `envFilePath`
508
+ * (repo-relative, inside the overlay tree) BEFORE `kustomize build`, so the overlay's own
509
+ * existing `secretGenerator` consumes it. This is the common ephemeral-environment shape
510
+ * where a Component declares `secretGenerator: { envs: ['.env'] }`, the Secret is named by
511
+ * the overlay, and the real `.env` is supplied at deploy time (e.g. from a secrets manager).
512
+ * Use this instead of `secret` when the manifests already declare a `secretGenerator`, so
513
+ * the two don't collide.
514
+ */
515
+ export declare const kubernetesSecretInjectionSchema: v.VariantSchema<"mode", [v.ObjectSchema<{
516
+ readonly mode: v.LiteralSchema<"secret", undefined>;
517
+ /** Target Secret name in the namespace. */
518
+ readonly secretName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
519
+ /** Secret `type`; absent ⇒ `Opaque`. */
520
+ readonly secretType: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
521
+ readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
522
+ /** Key inside the rendered Secret / `.env`. */
523
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
524
+ /** Resolve the value from the workspace encrypted bundle by key. */
525
+ readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
526
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
527
+ }, undefined>, undefined>;
528
+ /** OR a non-secret value, templated over the provision vars. */
529
+ readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
530
+ }, undefined>, v.CheckAction<{
531
+ key: string;
532
+ secretRef?: {
533
+ key: string;
534
+ } | undefined;
535
+ valueTemplate?: string | undefined;
536
+ }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
537
+ }, undefined>, v.ObjectSchema<{
538
+ readonly mode: v.LiteralSchema<"generatorEnvFile", undefined>;
539
+ /**
540
+ * Repo-relative path within the overlay tree to write the `KEY=value` env file the
541
+ * overlay's `secretGenerator` reads (e.g. `overlays/<env>/<component>/.env`). The
542
+ * overlay names the Secret.
543
+ */
544
+ readonly envFilePath: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
545
+ readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
546
+ /** Key inside the rendered Secret / `.env`. */
547
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
548
+ /** Resolve the value from the workspace encrypted bundle by key. */
549
+ readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
550
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
551
+ }, undefined>, undefined>;
552
+ /** OR a non-secret value, templated over the provision vars. */
553
+ readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
554
+ }, undefined>, v.CheckAction<{
555
+ key: string;
556
+ secretRef?: {
557
+ key: string;
558
+ } | undefined;
559
+ valueTemplate?: string | undefined;
560
+ }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
561
+ }, undefined>], undefined>;
562
+ export type KubernetesSecretInjection = v.InferOutput<typeof kubernetesSecretInjectionSchema>;
376
563
  /** Built-in environment backend kinds the contract knows by name. */
377
564
  export declare const RESERVED_ENVIRONMENT_BACKEND_KINDS: readonly ['manifest', 'kubernetes'];
378
565
  /**
@@ -547,6 +734,7 @@ export declare const environmentBackendConfigSchema: v.VariantSchema<"kind", [v.
547
734
  readonly type: v.LiteralSchema<"colocated", undefined>;
548
735
  /** File or directory path within the PR repo (read at the PR head branch). */
549
736
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
737
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
550
738
  }, undefined>, v.ObjectSchema<{
551
739
  readonly type: v.LiteralSchema<"separate", undefined>;
552
740
  /** `owner/repo` of the manifests repo. */
@@ -555,6 +743,7 @@ export declare const environmentBackendConfigSchema: v.VariantSchema<"kind", [v.
555
743
  readonly ref: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
556
744
  /** File or directory path within the manifests repo. */
557
745
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
746
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
558
747
  }, undefined>], undefined>;
559
748
  /** How the environment URL is derived once applied. */
560
749
  readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
@@ -573,6 +762,16 @@ export declare const environmentBackendConfigSchema: v.VariantSchema<"kind", [v.
573
762
  readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
574
763
  readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, undefined>;
575
764
  readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
765
+ }, undefined>, v.ObjectSchema<{
766
+ readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
767
+ /** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
768
+ readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
769
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
770
+ }, undefined>, v.ObjectSchema<{
771
+ readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
772
+ /** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
773
+ readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
774
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
576
775
  }, undefined>], undefined>;
577
776
  /**
578
777
  * Optional image reference made available to the manifests as `{{image}}` (e.g. a
@@ -733,6 +932,7 @@ export declare const serviceProvisioningSchema: v.ObjectSchema<{
733
932
  readonly type: v.LiteralSchema<"colocated", undefined>;
734
933
  /** File or directory path within the PR repo (read at the PR head branch). */
735
934
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
935
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
736
936
  }, undefined>, v.ObjectSchema<{
737
937
  readonly type: v.LiteralSchema<"separate", undefined>;
738
938
  /** `owner/repo` of the manifests repo. */
@@ -741,6 +941,7 @@ export declare const serviceProvisioningSchema: v.ObjectSchema<{
741
941
  readonly ref: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
742
942
  /** File or directory path within the manifests repo. */
743
943
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
944
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
744
945
  }, undefined>], undefined>, undefined>;
745
946
  /** `docker-compose`: path to the compose file relative to the repo root. */
746
947
  readonly composePath: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
@@ -750,6 +951,107 @@ export declare const serviceProvisioningSchema: v.ObjectSchema<{
750
951
  readonly manifestId: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>, undefined>;
751
952
  /** `custom`: optional path to the custom manifest within the repo. */
752
953
  readonly manifestPath: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
954
+ /**
955
+ * `kubernetes` (container-backed deploy adapter only): structured image overrides, the
956
+ * helm releases the env composes, and the Secrets to materialize before apply. The
957
+ * native REST adapter ignores these (raw manifests). See the schemas above.
958
+ */
959
+ readonly images: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
960
+ /** The image to match (the `name:` in a kustomization `images:` entry), e.g. `registry/app`. */
961
+ readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
962
+ /** Optional replacement repo, templated; absent ⇒ keep the original repo. */
963
+ readonly newNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
964
+ /** Replacement tag, templated (e.g. `{{branch}}` / `{{sha}}`); mutually exclusive with digest. */
965
+ readonly newTagTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
966
+ /** Replacement digest, templated; alternative to a tag. */
967
+ readonly digestTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
968
+ }, undefined>, v.CheckAction<{
969
+ name: string;
970
+ newNameTemplate?: string | undefined;
971
+ newTagTemplate?: string | undefined;
972
+ digestTemplate?: string | undefined;
973
+ }, "an image override must set at least one of newNameTemplate, newTagTemplate, or digestTemplate.">, v.CheckAction<{
974
+ name: string;
975
+ newNameTemplate?: string | undefined;
976
+ newTagTemplate?: string | undefined;
977
+ digestTemplate?: string | undefined;
978
+ }, "newTagTemplate and digestTemplate are mutually exclusive on an image override.">]>, undefined>, undefined>;
979
+ readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
980
+ /** Release name. */
981
+ readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
982
+ /** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
983
+ readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
984
+ /** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
985
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
986
+ /** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
987
+ readonly version: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "version must be a pinned semver (e.g. 1.2.3), not a floating tag like latest or ^1.0.">]>;
988
+ /** Namespace to install into, templated; absent ⇒ the environment namespace. */
989
+ readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
990
+ /** Inline `--values` overrides. */
991
+ readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
992
+ /** Templated `--set` overrides. */
993
+ readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
994
+ /** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
995
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
996
+ /** The value, templated over the provision vars. */
997
+ readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
998
+ }, undefined>, undefined>, undefined>;
999
+ /** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
1000
+ readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1001
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1002
+ readonly secretRef: v.ObjectSchema<{
1003
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
1004
+ }, undefined>;
1005
+ }, undefined>, undefined>, undefined>;
1006
+ readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
1007
+ }, undefined>, undefined>, undefined>;
1008
+ readonly secretInjections: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"mode", [v.ObjectSchema<{
1009
+ readonly mode: v.LiteralSchema<"secret", undefined>;
1010
+ /** Target Secret name in the namespace. */
1011
+ readonly secretName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1012
+ /** Secret `type`; absent ⇒ `Opaque`. */
1013
+ readonly secretType: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
1014
+ readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
1015
+ /** Key inside the rendered Secret / `.env`. */
1016
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
1017
+ /** Resolve the value from the workspace encrypted bundle by key. */
1018
+ readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
1019
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
1020
+ }, undefined>, undefined>;
1021
+ /** OR a non-secret value, templated over the provision vars. */
1022
+ readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
1023
+ }, undefined>, v.CheckAction<{
1024
+ key: string;
1025
+ secretRef?: {
1026
+ key: string;
1027
+ } | undefined;
1028
+ valueTemplate?: string | undefined;
1029
+ }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
1030
+ }, undefined>, v.ObjectSchema<{
1031
+ readonly mode: v.LiteralSchema<"generatorEnvFile", undefined>;
1032
+ /**
1033
+ * Repo-relative path within the overlay tree to write the `KEY=value` env file the
1034
+ * overlay's `secretGenerator` reads (e.g. `overlays/<env>/<component>/.env`). The
1035
+ * overlay names the Secret.
1036
+ */
1037
+ readonly envFilePath: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
1038
+ readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
1039
+ /** Key inside the rendered Secret / `.env`. */
1040
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
1041
+ /** Resolve the value from the workspace encrypted bundle by key. */
1042
+ readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
1043
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
1044
+ }, undefined>, undefined>;
1045
+ /** OR a non-secret value, templated over the provision vars. */
1046
+ readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
1047
+ }, undefined>, v.CheckAction<{
1048
+ key: string;
1049
+ secretRef?: {
1050
+ key: string;
1051
+ } | undefined;
1052
+ valueTemplate?: string | undefined;
1053
+ }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
1054
+ }, undefined>], undefined>, undefined>, undefined>;
753
1055
  }, undefined>;
754
1056
  export type ServiceProvisioning = v.InferOutput<typeof serviceProvisioningSchema>;
755
1057
  /**
@@ -766,7 +1068,13 @@ export declare const kubernetesEngineConfigSchema: v.ObjectSchema<{
766
1068
  readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
767
1069
  /** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
768
1070
  readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
769
- /** Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. */
1071
+ /**
1072
+ * Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. With
1073
+ * `renderer: 'kustomize'`, ABSENT ⇒ honor the overlay's own `namespace:` when it pins one
1074
+ * (the shared-namespace ephemeral-env shape, where base + overlay name a fixed namespace);
1075
+ * SET ⇒ override it (the adapter sets the namespace at build time) for true per-PR
1076
+ * isolation. For raw manifests, absent ⇒ a default derived from the PR number / block id.
1077
+ */
770
1078
  readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
771
1079
  /** How the environment URL is derived once applied. */
772
1080
  readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
@@ -785,6 +1093,16 @@ export declare const kubernetesEngineConfigSchema: v.ObjectSchema<{
785
1093
  readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
786
1094
  readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, undefined>;
787
1095
  readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
1096
+ }, undefined>, v.ObjectSchema<{
1097
+ readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
1098
+ /** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
1099
+ readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
1100
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
1101
+ }, undefined>, v.ObjectSchema<{
1102
+ readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
1103
+ /** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
1104
+ readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
1105
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
788
1106
  }, undefined>], undefined>;
789
1107
  /** Optional image reference made available to the manifests as `{{image}}`. */
790
1108
  readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
@@ -794,6 +1112,41 @@ export declare const kubernetesEngineConfigSchema: v.ObjectSchema<{
794
1112
  readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
795
1113
  /** Extra annotations stamped on the namespace. */
796
1114
  readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
1115
+ /**
1116
+ * Workspace-level (cluster-singleton) helm releases the deploy adapter ensures before
1117
+ * applying a service's manifests — e.g. an ingress/gateway controller shared by every
1118
+ * per-PR env. Use `scope: 'shared'`; installed once, never torn down per-PR. Merged
1119
+ * with the service's own (per-environment) `helmReleases` at provision time.
1120
+ */
1121
+ readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1122
+ /** Release name. */
1123
+ readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1124
+ /** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
1125
+ readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1126
+ /** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
1127
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
1128
+ /** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
1129
+ readonly version: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "version must be a pinned semver (e.g. 1.2.3), not a floating tag like latest or ^1.0.">]>;
1130
+ /** Namespace to install into, templated; absent ⇒ the environment namespace. */
1131
+ readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
1132
+ /** Inline `--values` overrides. */
1133
+ readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
1134
+ /** Templated `--set` overrides. */
1135
+ readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1136
+ /** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
1137
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1138
+ /** The value, templated over the provision vars. */
1139
+ readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
1140
+ }, undefined>, undefined>, undefined>;
1141
+ /** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
1142
+ readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1143
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1144
+ readonly secretRef: v.ObjectSchema<{
1145
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
1146
+ }, undefined>;
1147
+ }, undefined>, undefined>, undefined>;
1148
+ readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
1149
+ }, undefined>, undefined>, undefined>;
797
1150
  }, undefined>;
798
1151
  export type KubernetesEngineConfig = v.InferOutput<typeof kubernetesEngineConfigSchema>;
799
1152
  /**
@@ -944,7 +1297,13 @@ export declare const infraHandlerConfigSchema: v.VariantSchema<"engine", [v.Obje
944
1297
  readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
945
1298
  /** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
946
1299
  readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
947
- /** Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. */
1300
+ /**
1301
+ * Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. With
1302
+ * `renderer: 'kustomize'`, ABSENT ⇒ honor the overlay's own `namespace:` when it pins one
1303
+ * (the shared-namespace ephemeral-env shape, where base + overlay name a fixed namespace);
1304
+ * SET ⇒ override it (the adapter sets the namespace at build time) for true per-PR
1305
+ * isolation. For raw manifests, absent ⇒ a default derived from the PR number / block id.
1306
+ */
948
1307
  readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
949
1308
  /** How the environment URL is derived once applied. */
950
1309
  readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
@@ -963,6 +1322,16 @@ export declare const infraHandlerConfigSchema: v.VariantSchema<"engine", [v.Obje
963
1322
  readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
964
1323
  readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, undefined>;
965
1324
  readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
1325
+ }, undefined>, v.ObjectSchema<{
1326
+ readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
1327
+ /** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
1328
+ readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
1329
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
1330
+ }, undefined>, v.ObjectSchema<{
1331
+ readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
1332
+ /** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
1333
+ readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
1334
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
966
1335
  }, undefined>], undefined>;
967
1336
  /** Optional image reference made available to the manifests as `{{image}}`. */
968
1337
  readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
@@ -972,6 +1341,41 @@ export declare const infraHandlerConfigSchema: v.VariantSchema<"engine", [v.Obje
972
1341
  readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
973
1342
  /** Extra annotations stamped on the namespace. */
974
1343
  readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
1344
+ /**
1345
+ * Workspace-level (cluster-singleton) helm releases the deploy adapter ensures before
1346
+ * applying a service's manifests — e.g. an ingress/gateway controller shared by every
1347
+ * per-PR env. Use `scope: 'shared'`; installed once, never torn down per-PR. Merged
1348
+ * with the service's own (per-environment) `helmReleases` at provision time.
1349
+ */
1350
+ readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1351
+ /** Release name. */
1352
+ readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1353
+ /** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
1354
+ readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1355
+ /** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
1356
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
1357
+ /** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
1358
+ readonly version: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "version must be a pinned semver (e.g. 1.2.3), not a floating tag like latest or ^1.0.">]>;
1359
+ /** Namespace to install into, templated; absent ⇒ the environment namespace. */
1360
+ readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
1361
+ /** Inline `--values` overrides. */
1362
+ readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
1363
+ /** Templated `--set` overrides. */
1364
+ readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1365
+ /** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
1366
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1367
+ /** The value, templated over the provision vars. */
1368
+ readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
1369
+ }, undefined>, undefined>, undefined>;
1370
+ /** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
1371
+ readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1372
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1373
+ readonly secretRef: v.ObjectSchema<{
1374
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
1375
+ }, undefined>;
1376
+ }, undefined>, undefined>, undefined>;
1377
+ readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
1378
+ }, undefined>, undefined>, undefined>;
975
1379
  }, undefined>;
976
1380
  }, undefined>, v.ObjectSchema<{
977
1381
  readonly engine: v.LiteralSchema<"remote-kubernetes", undefined>;
@@ -983,7 +1387,13 @@ export declare const infraHandlerConfigSchema: v.VariantSchema<"engine", [v.Obje
983
1387
  readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
984
1388
  /** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
985
1389
  readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
986
- /** Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. */
1390
+ /**
1391
+ * Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. With
1392
+ * `renderer: 'kustomize'`, ABSENT ⇒ honor the overlay's own `namespace:` when it pins one
1393
+ * (the shared-namespace ephemeral-env shape, where base + overlay name a fixed namespace);
1394
+ * SET ⇒ override it (the adapter sets the namespace at build time) for true per-PR
1395
+ * isolation. For raw manifests, absent ⇒ a default derived from the PR number / block id.
1396
+ */
987
1397
  readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
988
1398
  /** How the environment URL is derived once applied. */
989
1399
  readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
@@ -1002,6 +1412,16 @@ export declare const infraHandlerConfigSchema: v.VariantSchema<"engine", [v.Obje
1002
1412
  readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
1003
1413
  readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, undefined>;
1004
1414
  readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
1415
+ }, undefined>, v.ObjectSchema<{
1416
+ readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
1417
+ /** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
1418
+ readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
1419
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
1420
+ }, undefined>, v.ObjectSchema<{
1421
+ readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
1422
+ /** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
1423
+ readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
1424
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
1005
1425
  }, undefined>], undefined>;
1006
1426
  /** Optional image reference made available to the manifests as `{{image}}`. */
1007
1427
  readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
@@ -1011,6 +1431,41 @@ export declare const infraHandlerConfigSchema: v.VariantSchema<"engine", [v.Obje
1011
1431
  readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
1012
1432
  /** Extra annotations stamped on the namespace. */
1013
1433
  readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
1434
+ /**
1435
+ * Workspace-level (cluster-singleton) helm releases the deploy adapter ensures before
1436
+ * applying a service's manifests — e.g. an ingress/gateway controller shared by every
1437
+ * per-PR env. Use `scope: 'shared'`; installed once, never torn down per-PR. Merged
1438
+ * with the service's own (per-environment) `helmReleases` at provision time.
1439
+ */
1440
+ readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1441
+ /** Release name. */
1442
+ readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1443
+ /** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
1444
+ readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1445
+ /** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
1446
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
1447
+ /** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
1448
+ readonly version: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "version must be a pinned semver (e.g. 1.2.3), not a floating tag like latest or ^1.0.">]>;
1449
+ /** Namespace to install into, templated; absent ⇒ the environment namespace. */
1450
+ readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
1451
+ /** Inline `--values` overrides. */
1452
+ readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
1453
+ /** Templated `--set` overrides. */
1454
+ readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1455
+ /** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
1456
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1457
+ /** The value, templated over the provision vars. */
1458
+ readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
1459
+ }, undefined>, undefined>, undefined>;
1460
+ /** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
1461
+ readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1462
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
1463
+ readonly secretRef: v.ObjectSchema<{
1464
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
1465
+ }, undefined>;
1466
+ }, undefined>, undefined>, undefined>;
1467
+ readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
1468
+ }, undefined>, undefined>, undefined>;
1014
1469
  }, undefined>;
1015
1470
  }, undefined>, v.ObjectSchema<{
1016
1471
  readonly engine: v.LiteralSchema<"remote-custom", undefined>;
@@ -1381,6 +1836,7 @@ export declare const environmentConnectionSchema: v.ObjectSchema<{
1381
1836
  readonly type: v.LiteralSchema<"colocated", undefined>;
1382
1837
  /** File or directory path within the PR repo (read at the PR head branch). */
1383
1838
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
1839
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
1384
1840
  }, undefined>, v.ObjectSchema<{
1385
1841
  readonly type: v.LiteralSchema<"separate", undefined>;
1386
1842
  /** `owner/repo` of the manifests repo. */
@@ -1389,6 +1845,7 @@ export declare const environmentConnectionSchema: v.ObjectSchema<{
1389
1845
  readonly ref: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
1390
1846
  /** File or directory path within the manifests repo. */
1391
1847
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
1848
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
1392
1849
  }, undefined>], undefined>;
1393
1850
  /** How the environment URL is derived once applied. */
1394
1851
  readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
@@ -1407,6 +1864,16 @@ export declare const environmentConnectionSchema: v.ObjectSchema<{
1407
1864
  readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
1408
1865
  readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, undefined>;
1409
1866
  readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
1867
+ }, undefined>, v.ObjectSchema<{
1868
+ readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
1869
+ /** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
1870
+ readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
1871
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
1872
+ }, undefined>, v.ObjectSchema<{
1873
+ readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
1874
+ /** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
1875
+ readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
1876
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
1410
1877
  }, undefined>], undefined>;
1411
1878
  /**
1412
1879
  * Optional image reference made available to the manifests as `{{image}}` (e.g. a
@@ -1716,6 +2183,7 @@ export declare const registerEnvironmentProviderSchema: v.ObjectSchema<{
1716
2183
  readonly type: v.LiteralSchema<"colocated", undefined>;
1717
2184
  /** File or directory path within the PR repo (read at the PR head branch). */
1718
2185
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
2186
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
1719
2187
  }, undefined>, v.ObjectSchema<{
1720
2188
  readonly type: v.LiteralSchema<"separate", undefined>;
1721
2189
  /** `owner/repo` of the manifests repo. */
@@ -1724,6 +2192,7 @@ export declare const registerEnvironmentProviderSchema: v.ObjectSchema<{
1724
2192
  readonly ref: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
1725
2193
  /** File or directory path within the manifests repo. */
1726
2194
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
2195
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
1727
2196
  }, undefined>], undefined>;
1728
2197
  /** How the environment URL is derived once applied. */
1729
2198
  readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
@@ -1742,6 +2211,16 @@ export declare const registerEnvironmentProviderSchema: v.ObjectSchema<{
1742
2211
  readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
1743
2212
  readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, undefined>;
1744
2213
  readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
2214
+ }, undefined>, v.ObjectSchema<{
2215
+ readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
2216
+ /** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
2217
+ readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
2218
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
2219
+ }, undefined>, v.ObjectSchema<{
2220
+ readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
2221
+ /** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
2222
+ readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
2223
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
1745
2224
  }, undefined>], undefined>;
1746
2225
  /**
1747
2226
  * Optional image reference made available to the manifests as `{{image}}` (e.g. a
@@ -2053,6 +2532,7 @@ export declare const testEnvironmentConnectionSchema: v.ObjectSchema<{
2053
2532
  readonly type: v.LiteralSchema<"colocated", undefined>;
2054
2533
  /** File or directory path within the PR repo (read at the PR head branch). */
2055
2534
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
2535
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
2056
2536
  }, undefined>, v.ObjectSchema<{
2057
2537
  readonly type: v.LiteralSchema<"separate", undefined>;
2058
2538
  /** `owner/repo` of the manifests repo. */
@@ -2061,6 +2541,7 @@ export declare const testEnvironmentConnectionSchema: v.ObjectSchema<{
2061
2541
  readonly ref: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
2062
2542
  /** File or directory path within the manifests repo. */
2063
2543
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
2544
+ readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
2064
2545
  }, undefined>], undefined>;
2065
2546
  /** How the environment URL is derived once applied. */
2066
2547
  readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
@@ -2079,6 +2560,16 @@ export declare const testEnvironmentConnectionSchema: v.ObjectSchema<{
2079
2560
  readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
2080
2561
  readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, undefined>;
2081
2562
  readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
2563
+ }, undefined>, v.ObjectSchema<{
2564
+ readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
2565
+ /** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
2566
+ readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
2567
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
2568
+ }, undefined>, v.ObjectSchema<{
2569
+ readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
2570
+ /** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
2571
+ readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
2572
+ readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
2082
2573
  }, undefined>], undefined>;
2083
2574
  /**
2084
2575
  * Optional image reference made available to the manifests as `{{image}}` (e.g. a