@cat-factory/contracts 0.63.0 → 0.65.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/environments.d.ts +2565 -36
- package/dist/environments.d.ts.map +1 -1
- package/dist/environments.js +83 -1
- package/dist/environments.js.map +1 -1
- package/dist/routes/auth.d.ts +16 -0
- package/dist/routes/auth.d.ts.map +1 -1
- package/dist/routes/auth.js +8 -0
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/environmentUserHandlers.d.ts +1141 -0
- package/dist/routes/environmentUserHandlers.d.ts.map +1 -0
- package/dist/routes/environmentUserHandlers.js +41 -0
- package/dist/routes/environmentUserHandlers.js.map +1 -0
- package/dist/routes/environments.d.ts +1945 -0
- package/dist/routes/environments.d.ts.map +1 -1
- package/dist/routes/environments.js +47 -1
- package/dist/routes/environments.js.map +1 -1
- package/dist/routes/index.d.ts +1 -0
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +1 -0
- package/dist/routes/index.js.map +1 -1
- package/package.json +1 -1
package/dist/environments.d.ts
CHANGED
|
@@ -403,6 +403,12 @@ export declare const kubernetesEnvironmentConfigSchema: v.ObjectSchema<{
|
|
|
403
403
|
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
404
404
|
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
405
405
|
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
406
|
+
/**
|
|
407
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
408
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Only the
|
|
409
|
+
* container-backed render path honors it; absent ⇒ the harness default (180s).
|
|
410
|
+
*/
|
|
411
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
406
412
|
/** Extra labels stamped on the namespace + every applied resource. */
|
|
407
413
|
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
408
414
|
/** Extra annotations stamped on the namespace. */
|
|
@@ -560,6 +566,193 @@ export declare const kubernetesSecretInjectionSchema: v.VariantSchema<"mode", [v
|
|
|
560
566
|
}, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
|
|
561
567
|
}, undefined>], undefined>;
|
|
562
568
|
export type KubernetesSecretInjection = v.InferOutput<typeof kubernetesSecretInjectionSchema>;
|
|
569
|
+
/**
|
|
570
|
+
* The full Kubernetes provision config the deploy adapter consumes: the combined cluster +
|
|
571
|
+
* URL + manifest-source config PLUS the kustomize/helm render inputs (image overrides, helm
|
|
572
|
+
* releases, secret injections). It is assembled at provision time by MERGING the workspace
|
|
573
|
+
* kube engine config (the "how": apiserver, sizing, shared helm releases) with the service's
|
|
574
|
+
* own provisioning (the "what/where": manifest source, per-environment helm releases, image
|
|
575
|
+
* overrides, secret injections) — so the provider reads everything it needs from one place.
|
|
576
|
+
* The native in-Worker REST adapter ignores the render fields (raw manifests only); the
|
|
577
|
+
* container-backed deploy adapter consumes them. Carries secret KEYS, never values.
|
|
578
|
+
*/
|
|
579
|
+
export declare const kubernetesProvisionConfigSchema: v.ObjectSchema<{
|
|
580
|
+
/** Human label for the connection (shown in the UI). */
|
|
581
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
582
|
+
/** kube-apiserver root URL, e.g. `https://my-cluster.example:6443`. */
|
|
583
|
+
readonly apiServerUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
584
|
+
/** PEM CA bundle to verify the apiserver TLS cert (omit only for a publicly-trusted CA). */
|
|
585
|
+
readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
586
|
+
/** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
|
|
587
|
+
readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
588
|
+
/**
|
|
589
|
+
* Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`.
|
|
590
|
+
* Rendered with the provision vars then sanitized to an RFC1123 label; absent ⇒ a
|
|
591
|
+
* default derived from the PR number / block id.
|
|
592
|
+
*/
|
|
593
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
594
|
+
/** Where the manifests are read from (co-located in the PR repo, or a separate repo). */
|
|
595
|
+
readonly manifestSource: v.VariantSchema<"type", [v.ObjectSchema<{
|
|
596
|
+
readonly type: v.LiteralSchema<"colocated", undefined>;
|
|
597
|
+
/** File or directory path within the PR repo (read at the PR head branch). */
|
|
598
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
599
|
+
readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
|
|
600
|
+
}, undefined>, v.ObjectSchema<{
|
|
601
|
+
readonly type: v.LiteralSchema<"separate", undefined>;
|
|
602
|
+
/** `owner/repo` of the manifests repo. */
|
|
603
|
+
readonly repo: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>;
|
|
604
|
+
/** Branch/tag/sha to read at; absent ⇒ that repo's default branch. */
|
|
605
|
+
readonly ref: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
606
|
+
/** File or directory path within the manifests repo. */
|
|
607
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
608
|
+
readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
|
|
609
|
+
}, undefined>], undefined>;
|
|
610
|
+
/** How the environment URL is derived once applied. */
|
|
611
|
+
readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
|
|
612
|
+
readonly source: v.LiteralSchema<"ingressTemplate", undefined>;
|
|
613
|
+
/** Host template, e.g. `{{branch}}.preview.example.com`; rendered with the provision vars. */
|
|
614
|
+
readonly hostTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
615
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
616
|
+
}, undefined>, v.ObjectSchema<{
|
|
617
|
+
readonly source: v.LiteralSchema<"ingressStatus", undefined>;
|
|
618
|
+
/** Ingress object to read `.status.loadBalancer` from; absent ⇒ the only Ingress applied. */
|
|
619
|
+
readonly ingressName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
620
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
621
|
+
}, undefined>, v.ObjectSchema<{
|
|
622
|
+
readonly source: v.LiteralSchema<"serviceStatus", undefined>;
|
|
623
|
+
/** Service object to read `.status.loadBalancer` (k3s ServiceLB) from. */
|
|
624
|
+
readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
|
|
625
|
+
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>;
|
|
626
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
627
|
+
}, undefined>, v.ObjectSchema<{
|
|
628
|
+
readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
|
|
629
|
+
/** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
|
|
630
|
+
readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
631
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
632
|
+
}, undefined>, v.ObjectSchema<{
|
|
633
|
+
readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
|
|
634
|
+
/** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
|
|
635
|
+
readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
636
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
637
|
+
}, undefined>], undefined>;
|
|
638
|
+
/**
|
|
639
|
+
* Optional image reference made available to the manifests as `{{image}}` (e.g. a
|
|
640
|
+
* CI-built image tagged by branch/sha). Itself a template over the provision vars.
|
|
641
|
+
*/
|
|
642
|
+
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
643
|
+
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
644
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
645
|
+
/**
|
|
646
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
647
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Only the
|
|
648
|
+
* container-backed render path honors it; absent ⇒ the harness default (180s).
|
|
649
|
+
*/
|
|
650
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
651
|
+
/** Extra labels stamped on the namespace + every applied resource. */
|
|
652
|
+
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
653
|
+
/** Extra annotations stamped on the namespace. */
|
|
654
|
+
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
655
|
+
/** Structured image overrides (the kustomize `images:` shape), templated over provision vars. */
|
|
656
|
+
readonly images: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
657
|
+
/** The image to match (the `name:` in a kustomization `images:` entry), e.g. `registry/app`. */
|
|
658
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
659
|
+
/** Optional replacement repo, templated; absent ⇒ keep the original repo. */
|
|
660
|
+
readonly newNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
661
|
+
/** Replacement tag, templated (e.g. `{{branch}}` / `{{sha}}`); mutually exclusive with digest. */
|
|
662
|
+
readonly newTagTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
663
|
+
/** Replacement digest, templated; alternative to a tag. */
|
|
664
|
+
readonly digestTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
665
|
+
}, undefined>, v.CheckAction<{
|
|
666
|
+
name: string;
|
|
667
|
+
newNameTemplate?: string | undefined;
|
|
668
|
+
newTagTemplate?: string | undefined;
|
|
669
|
+
digestTemplate?: string | undefined;
|
|
670
|
+
}, "an image override must set at least one of newNameTemplate, newTagTemplate, or digestTemplate.">, v.CheckAction<{
|
|
671
|
+
name: string;
|
|
672
|
+
newNameTemplate?: string | undefined;
|
|
673
|
+
newTagTemplate?: string | undefined;
|
|
674
|
+
digestTemplate?: string | undefined;
|
|
675
|
+
}, "newTagTemplate and digestTemplate are mutually exclusive on an image override.">]>, undefined>, undefined>;
|
|
676
|
+
/** Helm releases to install — workspace-shared singletons merged with the service's per-env ones. */
|
|
677
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
678
|
+
/** Release name. */
|
|
679
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
680
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
681
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
682
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
683
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
684
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
685
|
+
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.">]>;
|
|
686
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
687
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
688
|
+
/** Inline `--values` overrides. */
|
|
689
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
690
|
+
/** Templated `--set` overrides. */
|
|
691
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
692
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
693
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
694
|
+
/** The value, templated over the provision vars. */
|
|
695
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
696
|
+
}, undefined>, undefined>, undefined>;
|
|
697
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
698
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
699
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
700
|
+
readonly secretRef: v.ObjectSchema<{
|
|
701
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
702
|
+
}, undefined>;
|
|
703
|
+
}, undefined>, undefined>, undefined>;
|
|
704
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
705
|
+
}, undefined>, undefined>, undefined>;
|
|
706
|
+
/** Secrets fed in before apply (a `Secret` resource or a `secretGenerator` `.env`). */
|
|
707
|
+
readonly secretInjections: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"mode", [v.ObjectSchema<{
|
|
708
|
+
readonly mode: v.LiteralSchema<"secret", undefined>;
|
|
709
|
+
/** Target Secret name in the namespace. */
|
|
710
|
+
readonly secretName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
711
|
+
/** Secret `type`; absent ⇒ `Opaque`. */
|
|
712
|
+
readonly secretType: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
713
|
+
readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
714
|
+
/** Key inside the rendered Secret / `.env`. */
|
|
715
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
|
|
716
|
+
/** Resolve the value from the workspace encrypted bundle by key. */
|
|
717
|
+
readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
|
|
718
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
719
|
+
}, undefined>, undefined>;
|
|
720
|
+
/** OR a non-secret value, templated over the provision vars. */
|
|
721
|
+
readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
722
|
+
}, undefined>, v.CheckAction<{
|
|
723
|
+
key: string;
|
|
724
|
+
secretRef?: {
|
|
725
|
+
key: string;
|
|
726
|
+
} | undefined;
|
|
727
|
+
valueTemplate?: string | undefined;
|
|
728
|
+
}, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
|
|
729
|
+
}, undefined>, v.ObjectSchema<{
|
|
730
|
+
readonly mode: v.LiteralSchema<"generatorEnvFile", undefined>;
|
|
731
|
+
/**
|
|
732
|
+
* Repo-relative path within the overlay tree to write the `KEY=value` env file the
|
|
733
|
+
* overlay's `secretGenerator` reads (e.g. `overlays/<env>/<component>/.env`). The
|
|
734
|
+
* overlay names the Secret.
|
|
735
|
+
*/
|
|
736
|
+
readonly envFilePath: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
737
|
+
readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
738
|
+
/** Key inside the rendered Secret / `.env`. */
|
|
739
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
|
|
740
|
+
/** Resolve the value from the workspace encrypted bundle by key. */
|
|
741
|
+
readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
|
|
742
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
743
|
+
}, undefined>, undefined>;
|
|
744
|
+
/** OR a non-secret value, templated over the provision vars. */
|
|
745
|
+
readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
746
|
+
}, undefined>, v.CheckAction<{
|
|
747
|
+
key: string;
|
|
748
|
+
secretRef?: {
|
|
749
|
+
key: string;
|
|
750
|
+
} | undefined;
|
|
751
|
+
valueTemplate?: string | undefined;
|
|
752
|
+
}, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
|
|
753
|
+
}, undefined>], undefined>, undefined>, undefined>;
|
|
754
|
+
}, undefined>;
|
|
755
|
+
export type KubernetesProvisionConfig = v.InferOutput<typeof kubernetesProvisionConfigSchema>;
|
|
563
756
|
/** Built-in environment backend kinds the contract knows by name. */
|
|
564
757
|
export declare const RESERVED_ENVIRONMENT_BACKEND_KINDS: readonly ['manifest', 'kubernetes'];
|
|
565
758
|
/**
|
|
@@ -780,10 +973,115 @@ export declare const environmentBackendConfigSchema: v.VariantSchema<"kind", [v.
|
|
|
780
973
|
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
781
974
|
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
782
975
|
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
976
|
+
/**
|
|
977
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
978
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Only the
|
|
979
|
+
* container-backed render path honors it; absent ⇒ the harness default (180s).
|
|
980
|
+
*/
|
|
981
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
783
982
|
/** Extra labels stamped on the namespace + every applied resource. */
|
|
784
983
|
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
785
984
|
/** Extra annotations stamped on the namespace. */
|
|
786
985
|
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
986
|
+
/** Structured image overrides (the kustomize `images:` shape), templated over provision vars. */
|
|
987
|
+
readonly images: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
988
|
+
/** The image to match (the `name:` in a kustomization `images:` entry), e.g. `registry/app`. */
|
|
989
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
990
|
+
/** Optional replacement repo, templated; absent ⇒ keep the original repo. */
|
|
991
|
+
readonly newNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
992
|
+
/** Replacement tag, templated (e.g. `{{branch}}` / `{{sha}}`); mutually exclusive with digest. */
|
|
993
|
+
readonly newTagTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
994
|
+
/** Replacement digest, templated; alternative to a tag. */
|
|
995
|
+
readonly digestTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
996
|
+
}, undefined>, v.CheckAction<{
|
|
997
|
+
name: string;
|
|
998
|
+
newNameTemplate?: string | undefined;
|
|
999
|
+
newTagTemplate?: string | undefined;
|
|
1000
|
+
digestTemplate?: string | undefined;
|
|
1001
|
+
}, "an image override must set at least one of newNameTemplate, newTagTemplate, or digestTemplate.">, v.CheckAction<{
|
|
1002
|
+
name: string;
|
|
1003
|
+
newNameTemplate?: string | undefined;
|
|
1004
|
+
newTagTemplate?: string | undefined;
|
|
1005
|
+
digestTemplate?: string | undefined;
|
|
1006
|
+
}, "newTagTemplate and digestTemplate are mutually exclusive on an image override.">]>, undefined>, undefined>;
|
|
1007
|
+
/** Helm releases to install — workspace-shared singletons merged with the service's per-env ones. */
|
|
1008
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
1009
|
+
/** Release name. */
|
|
1010
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
1011
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
1012
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
1013
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
1014
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
1015
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
1016
|
+
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.">]>;
|
|
1017
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
1018
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
1019
|
+
/** Inline `--values` overrides. */
|
|
1020
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
1021
|
+
/** Templated `--set` overrides. */
|
|
1022
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
1023
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
1024
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
1025
|
+
/** The value, templated over the provision vars. */
|
|
1026
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
1027
|
+
}, undefined>, undefined>, undefined>;
|
|
1028
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
1029
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
1030
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
1031
|
+
readonly secretRef: v.ObjectSchema<{
|
|
1032
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
1033
|
+
}, undefined>;
|
|
1034
|
+
}, undefined>, undefined>, undefined>;
|
|
1035
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
1036
|
+
}, undefined>, undefined>, undefined>;
|
|
1037
|
+
/** Secrets fed in before apply (a `Secret` resource or a `secretGenerator` `.env`). */
|
|
1038
|
+
readonly secretInjections: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"mode", [v.ObjectSchema<{
|
|
1039
|
+
readonly mode: v.LiteralSchema<"secret", undefined>;
|
|
1040
|
+
/** Target Secret name in the namespace. */
|
|
1041
|
+
readonly secretName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
1042
|
+
/** Secret `type`; absent ⇒ `Opaque`. */
|
|
1043
|
+
readonly secretType: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
1044
|
+
readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
1045
|
+
/** Key inside the rendered Secret / `.env`. */
|
|
1046
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
|
|
1047
|
+
/** Resolve the value from the workspace encrypted bundle by key. */
|
|
1048
|
+
readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
|
|
1049
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
1050
|
+
}, undefined>, undefined>;
|
|
1051
|
+
/** OR a non-secret value, templated over the provision vars. */
|
|
1052
|
+
readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
1053
|
+
}, undefined>, v.CheckAction<{
|
|
1054
|
+
key: string;
|
|
1055
|
+
secretRef?: {
|
|
1056
|
+
key: string;
|
|
1057
|
+
} | undefined;
|
|
1058
|
+
valueTemplate?: string | undefined;
|
|
1059
|
+
}, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
|
|
1060
|
+
}, undefined>, v.ObjectSchema<{
|
|
1061
|
+
readonly mode: v.LiteralSchema<"generatorEnvFile", undefined>;
|
|
1062
|
+
/**
|
|
1063
|
+
* Repo-relative path within the overlay tree to write the `KEY=value` env file the
|
|
1064
|
+
* overlay's `secretGenerator` reads (e.g. `overlays/<env>/<component>/.env`). The
|
|
1065
|
+
* overlay names the Secret.
|
|
1066
|
+
*/
|
|
1067
|
+
readonly envFilePath: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
1068
|
+
readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
1069
|
+
/** Key inside the rendered Secret / `.env`. */
|
|
1070
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
|
|
1071
|
+
/** Resolve the value from the workspace encrypted bundle by key. */
|
|
1072
|
+
readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
|
|
1073
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
1074
|
+
}, undefined>, undefined>;
|
|
1075
|
+
/** OR a non-secret value, templated over the provision vars. */
|
|
1076
|
+
readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
1077
|
+
}, undefined>, v.CheckAction<{
|
|
1078
|
+
key: string;
|
|
1079
|
+
secretRef?: {
|
|
1080
|
+
key: string;
|
|
1081
|
+
} | undefined;
|
|
1082
|
+
valueTemplate?: string | undefined;
|
|
1083
|
+
}, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
|
|
1084
|
+
}, undefined>], undefined>, undefined>, undefined>;
|
|
787
1085
|
}, undefined>;
|
|
788
1086
|
}, undefined>, v.ObjectSchema<{
|
|
789
1087
|
readonly kind: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>, v.RegexAction<string, "must be a lower-kebab slug">, v.CheckAction<string, "reserved backend kind">]>;
|
|
@@ -1108,6 +1406,12 @@ export declare const kubernetesEngineConfigSchema: v.ObjectSchema<{
|
|
|
1108
1406
|
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
1109
1407
|
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
1110
1408
|
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
1409
|
+
/**
|
|
1410
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
1411
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Absent ⇒ the
|
|
1412
|
+
* harness default (180s). Merged into the provision config via `...kube` at provision time.
|
|
1413
|
+
*/
|
|
1414
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
1111
1415
|
/** Extra labels stamped on the namespace + every applied resource. */
|
|
1112
1416
|
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
1113
1417
|
/** Extra annotations stamped on the namespace. */
|
|
@@ -1337,6 +1641,12 @@ export declare const infraHandlerConfigSchema: v.VariantSchema<"engine", [v.Obje
|
|
|
1337
1641
|
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
1338
1642
|
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
1339
1643
|
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
1644
|
+
/**
|
|
1645
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
1646
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Absent ⇒ the
|
|
1647
|
+
* harness default (180s). Merged into the provision config via `...kube` at provision time.
|
|
1648
|
+
*/
|
|
1649
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
1340
1650
|
/** Extra labels stamped on the namespace + every applied resource. */
|
|
1341
1651
|
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
1342
1652
|
/** Extra annotations stamped on the namespace. */
|
|
@@ -1427,6 +1737,12 @@ export declare const infraHandlerConfigSchema: v.VariantSchema<"engine", [v.Obje
|
|
|
1427
1737
|
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
1428
1738
|
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
1429
1739
|
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
1740
|
+
/**
|
|
1741
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
1742
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Absent ⇒ the
|
|
1743
|
+
* harness default (180s). Merged into the provision config via `...kube` at provision time.
|
|
1744
|
+
*/
|
|
1745
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
1430
1746
|
/** Extra labels stamped on the namespace + every applied resource. */
|
|
1431
1747
|
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
1432
1748
|
/** Extra annotations stamped on the namespace. */
|
|
@@ -1622,43 +1938,1941 @@ export declare const upsertCustomManifestTypeSchema: v.ObjectSchema<{
|
|
|
1622
1938
|
readonly description: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
1623
1939
|
}, undefined>;
|
|
1624
1940
|
export type UpsertCustomManifestTypeInput = v.InferOutput<typeof upsertCustomManifestTypeSchema>;
|
|
1625
|
-
/**
|
|
1626
|
-
export declare const
|
|
1627
|
-
readonly
|
|
1628
|
-
|
|
1629
|
-
readonly
|
|
1630
|
-
readonly
|
|
1631
|
-
readonly headerName: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
1632
|
-
readonly headerValue: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
1633
|
-
}, undefined>;
|
|
1634
|
-
export type EnvironmentAccessHandle = v.InferOutput<typeof environmentAccessHandleSchema>;
|
|
1635
|
-
/** A provisioned environment, as exposed to clients and downstream agents. */
|
|
1636
|
-
export declare const environmentHandleSchema: v.ObjectSchema<{
|
|
1637
|
-
readonly id: v.StringSchema<undefined>;
|
|
1638
|
-
readonly workspaceId: v.StringSchema<undefined>;
|
|
1639
|
-
readonly blockId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
1640
|
-
readonly executionId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
1941
|
+
/** One registered infra handler, as exposed to clients (never secret VALUES). */
|
|
1942
|
+
export declare const environmentHandlerViewSchema: v.ObjectSchema<{
|
|
1943
|
+
readonly provisionType: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
|
|
1944
|
+
/** For `custom`: the manifest id this handler is keyed to; `null` otherwise. */
|
|
1945
|
+
readonly manifestId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
1946
|
+
readonly engine: v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "remote-custom", "none"], undefined>;
|
|
1641
1947
|
readonly providerId: v.StringSchema<undefined>;
|
|
1642
|
-
readonly
|
|
1643
|
-
readonly
|
|
1644
|
-
readonly
|
|
1645
|
-
/**
|
|
1646
|
-
readonly
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
readonly
|
|
1652
|
-
readonly
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1948
|
+
readonly label: v.StringSchema<undefined>;
|
|
1949
|
+
readonly baseUrl: v.StringSchema<undefined>;
|
|
1950
|
+
readonly connectedAt: v.NumberSchema<undefined>;
|
|
1951
|
+
/** Which secret keys are set (names only), so the UI can show completeness. */
|
|
1952
|
+
readonly secretKeys: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
1953
|
+
/** For `remote-custom`: the manifest id this provider accepts; `null` otherwise. */
|
|
1954
|
+
readonly acceptsManifestId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
1955
|
+
/** The stored handler config, sans secrets, for connect-form prefill on edit. */
|
|
1956
|
+
readonly config: v.OptionalSchema<v.VariantSchema<"engine", [v.ObjectSchema<{
|
|
1957
|
+
readonly engine: v.LiteralSchema<"local-docker", undefined>;
|
|
1958
|
+
readonly manifest: v.ObjectSchema<{
|
|
1959
|
+
readonly providerId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
1960
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
1961
|
+
/** Management API root; provision/status/teardown paths are appended to it. */
|
|
1962
|
+
readonly baseUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
1963
|
+
readonly auth: v.VariantSchema<"type", [v.ObjectSchema<{
|
|
1964
|
+
readonly type: v.LiteralSchema<"none", undefined>;
|
|
1965
|
+
}, undefined>, v.ObjectSchema<{
|
|
1966
|
+
readonly type: v.LiteralSchema<"api_key", undefined>;
|
|
1967
|
+
readonly headerName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
1968
|
+
readonly secretRef: v.ObjectSchema<{
|
|
1969
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
1970
|
+
}, undefined>;
|
|
1971
|
+
/** Optional prefix prepended to the secret value, e.g. `Token `. */
|
|
1972
|
+
readonly valuePrefix: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
1973
|
+
}, undefined>, v.ObjectSchema<{
|
|
1974
|
+
readonly type: v.LiteralSchema<"bearer", undefined>;
|
|
1975
|
+
readonly secretRef: v.ObjectSchema<{
|
|
1976
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
1977
|
+
}, undefined>;
|
|
1978
|
+
}, undefined>, v.ObjectSchema<{
|
|
1979
|
+
readonly type: v.LiteralSchema<"basic", undefined>;
|
|
1980
|
+
readonly usernameSecretRef: v.ObjectSchema<{
|
|
1981
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
1982
|
+
}, undefined>;
|
|
1983
|
+
readonly passwordSecretRef: v.ObjectSchema<{
|
|
1984
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
1985
|
+
}, undefined>;
|
|
1986
|
+
}, undefined>, v.ObjectSchema<{
|
|
1987
|
+
readonly type: v.LiteralSchema<"oauth2_client_credentials", undefined>;
|
|
1988
|
+
readonly tokenUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
1989
|
+
readonly clientIdSecretRef: v.ObjectSchema<{
|
|
1990
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
1991
|
+
}, undefined>;
|
|
1992
|
+
readonly clientSecretSecretRef: v.ObjectSchema<{
|
|
1993
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
1994
|
+
}, undefined>;
|
|
1995
|
+
readonly scope: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
1996
|
+
readonly audience: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
1997
|
+
}, undefined>, v.ObjectSchema<{
|
|
1998
|
+
readonly type: v.LiteralSchema<"custom_headers", undefined>;
|
|
1999
|
+
readonly headers: v.ArraySchema<v.ObjectSchema<{
|
|
2000
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2001
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2002
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2003
|
+
}, undefined>;
|
|
2004
|
+
}, undefined>, undefined>;
|
|
2005
|
+
}, undefined>], undefined>;
|
|
2006
|
+
readonly provision: v.ObjectSchema<{
|
|
2007
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2008
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2009
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2010
|
+
readonly key: v.StringSchema<undefined>;
|
|
2011
|
+
readonly value: v.StringSchema<undefined>;
|
|
2012
|
+
}, undefined>, undefined>, undefined>;
|
|
2013
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2014
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2015
|
+
readonly value: v.StringSchema<undefined>;
|
|
2016
|
+
}, undefined>, undefined>, undefined>;
|
|
2017
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2018
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2019
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2020
|
+
}, undefined>;
|
|
2021
|
+
/** Optional: polled to observe async provisioning progress. */
|
|
2022
|
+
readonly status: v.OptionalSchema<v.ObjectSchema<{
|
|
2023
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2024
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2025
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2026
|
+
readonly key: v.StringSchema<undefined>;
|
|
2027
|
+
readonly value: v.StringSchema<undefined>;
|
|
2028
|
+
}, undefined>, undefined>, undefined>;
|
|
2029
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2030
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2031
|
+
readonly value: v.StringSchema<undefined>;
|
|
2032
|
+
}, undefined>, undefined>, undefined>;
|
|
2033
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2034
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2035
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2036
|
+
}, undefined>, undefined>;
|
|
2037
|
+
/** Optional: called to destroy the environment (manual or on TTL expiry). */
|
|
2038
|
+
readonly teardown: v.OptionalSchema<v.ObjectSchema<{
|
|
2039
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2040
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2041
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2042
|
+
readonly key: v.StringSchema<undefined>;
|
|
2043
|
+
readonly value: v.StringSchema<undefined>;
|
|
2044
|
+
}, undefined>, undefined>, undefined>;
|
|
2045
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2046
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2047
|
+
readonly value: v.StringSchema<undefined>;
|
|
2048
|
+
}, undefined>, undefined>, undefined>;
|
|
2049
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2050
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2051
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2052
|
+
}, undefined>, undefined>;
|
|
2053
|
+
readonly response: v.ObjectSchema<{
|
|
2054
|
+
readonly urlPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2055
|
+
readonly statusPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2056
|
+
readonly statusMap: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2057
|
+
readonly from: v.StringSchema<undefined>;
|
|
2058
|
+
readonly to: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
|
|
2059
|
+
}, undefined>, undefined>, undefined>;
|
|
2060
|
+
readonly expiresAtPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2061
|
+
readonly externalIdPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2062
|
+
readonly access: v.OptionalSchema<v.ObjectSchema<{
|
|
2063
|
+
readonly scheme: v.PicklistSchema<["none", "bearer", "basic", "custom_header"], undefined>;
|
|
2064
|
+
readonly tokenPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2065
|
+
readonly usernamePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2066
|
+
readonly passwordPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2067
|
+
readonly headerName: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2068
|
+
readonly headerValuePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2069
|
+
}, undefined>, undefined>;
|
|
2070
|
+
}, undefined>;
|
|
2071
|
+
/** Fallback TTL (ms) when the response carries no explicit expiry. */
|
|
2072
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
2073
|
+
/**
|
|
2074
|
+
* Opaque, provider-specific configuration for a CUSTOM backend (e.g. a Kargo project,
|
|
2075
|
+
* link-selection key, status map). The generic HttpEnvironmentProvider ignores it
|
|
2076
|
+
* entirely; a custom backend — registered by reference into the app-owned
|
|
2077
|
+
* `EnvironmentBackendRegistry` (see `backend/docs/native-environment-adapter.md`) — reads
|
|
2078
|
+
* + validates it off the per-call
|
|
2079
|
+
* `manifest`. This is the per-WORKSPACE config carrier: a custom backend rides the generic
|
|
2080
|
+
* manifest member of `environmentBackendConfigSchema`, so its bespoke settings live here and
|
|
2081
|
+
* its credentials in the secret bundle. NOT covered by the manifest URL/SSRF checks (which
|
|
2082
|
+
* only guard `baseUrl`/`tokenUrl`); a backend that puts a URL here must guard it itself
|
|
2083
|
+
* (reuse the exported `UrlSafetyPolicy`).
|
|
2084
|
+
*/
|
|
2085
|
+
readonly providerConfig: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
2086
|
+
}, undefined>;
|
|
2087
|
+
}, undefined>, v.ObjectSchema<{
|
|
2088
|
+
readonly engine: v.LiteralSchema<"local-k3s", undefined>;
|
|
2089
|
+
readonly kubernetes: v.ObjectSchema<{
|
|
2090
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
2091
|
+
/** kube-apiserver root URL, e.g. `https://my-cluster.example:6443`. */
|
|
2092
|
+
readonly apiServerUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2093
|
+
/** PEM CA bundle to verify the apiserver TLS cert (omit only for a publicly-trusted CA). */
|
|
2094
|
+
readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2095
|
+
/** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
|
|
2096
|
+
readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
2097
|
+
/**
|
|
2098
|
+
* Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. With
|
|
2099
|
+
* `renderer: 'kustomize'`, ABSENT ⇒ honor the overlay's own `namespace:` when it pins one
|
|
2100
|
+
* (the shared-namespace ephemeral-env shape, where base + overlay name a fixed namespace);
|
|
2101
|
+
* SET ⇒ override it (the adapter sets the namespace at build time) for true per-PR
|
|
2102
|
+
* isolation. For raw manifests, absent ⇒ a default derived from the PR number / block id.
|
|
2103
|
+
*/
|
|
2104
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
2105
|
+
/** How the environment URL is derived once applied. */
|
|
2106
|
+
readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
|
|
2107
|
+
readonly source: v.LiteralSchema<"ingressTemplate", undefined>;
|
|
2108
|
+
/** Host template, e.g. `{{branch}}.preview.example.com`; rendered with the provision vars. */
|
|
2109
|
+
readonly hostTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
2110
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2111
|
+
}, undefined>, v.ObjectSchema<{
|
|
2112
|
+
readonly source: v.LiteralSchema<"ingressStatus", undefined>;
|
|
2113
|
+
/** Ingress object to read `.status.loadBalancer` from; absent ⇒ the only Ingress applied. */
|
|
2114
|
+
readonly ingressName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2115
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2116
|
+
}, undefined>, v.ObjectSchema<{
|
|
2117
|
+
readonly source: v.LiteralSchema<"serviceStatus", undefined>;
|
|
2118
|
+
/** Service object to read `.status.loadBalancer` (k3s ServiceLB) from. */
|
|
2119
|
+
readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
|
|
2120
|
+
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>;
|
|
2121
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2122
|
+
}, undefined>, v.ObjectSchema<{
|
|
2123
|
+
readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
|
|
2124
|
+
/** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
|
|
2125
|
+
readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2126
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2127
|
+
}, undefined>, v.ObjectSchema<{
|
|
2128
|
+
readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
|
|
2129
|
+
/** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
|
|
2130
|
+
readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2131
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2132
|
+
}, undefined>], undefined>;
|
|
2133
|
+
/** Optional image reference made available to the manifests as `{{image}}`. */
|
|
2134
|
+
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
2135
|
+
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
2136
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
2137
|
+
/**
|
|
2138
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
2139
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Absent ⇒ the
|
|
2140
|
+
* harness default (180s). Merged into the provision config via `...kube` at provision time.
|
|
2141
|
+
*/
|
|
2142
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
2143
|
+
/** Extra labels stamped on the namespace + every applied resource. */
|
|
2144
|
+
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
2145
|
+
/** Extra annotations stamped on the namespace. */
|
|
2146
|
+
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
2147
|
+
/**
|
|
2148
|
+
* Workspace-level (cluster-singleton) helm releases the deploy adapter ensures before
|
|
2149
|
+
* applying a service's manifests — e.g. an ingress/gateway controller shared by every
|
|
2150
|
+
* per-PR env. Use `scope: 'shared'`; installed once, never torn down per-PR. Merged
|
|
2151
|
+
* with the service's own (per-environment) `helmReleases` at provision time.
|
|
2152
|
+
*/
|
|
2153
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2154
|
+
/** Release name. */
|
|
2155
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2156
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
2157
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2158
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
2159
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
2160
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
2161
|
+
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.">]>;
|
|
2162
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
2163
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
2164
|
+
/** Inline `--values` overrides. */
|
|
2165
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
2166
|
+
/** Templated `--set` overrides. */
|
|
2167
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2168
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
2169
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2170
|
+
/** The value, templated over the provision vars. */
|
|
2171
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2172
|
+
}, undefined>, undefined>, undefined>;
|
|
2173
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
2174
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2175
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2176
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2177
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2178
|
+
}, undefined>;
|
|
2179
|
+
}, undefined>, undefined>, undefined>;
|
|
2180
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
2181
|
+
}, undefined>, undefined>, undefined>;
|
|
2182
|
+
}, undefined>;
|
|
2183
|
+
}, undefined>, v.ObjectSchema<{
|
|
2184
|
+
readonly engine: v.LiteralSchema<"remote-kubernetes", undefined>;
|
|
2185
|
+
readonly kubernetes: v.ObjectSchema<{
|
|
2186
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
2187
|
+
/** kube-apiserver root URL, e.g. `https://my-cluster.example:6443`. */
|
|
2188
|
+
readonly apiServerUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2189
|
+
/** PEM CA bundle to verify the apiserver TLS cert (omit only for a publicly-trusted CA). */
|
|
2190
|
+
readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2191
|
+
/** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
|
|
2192
|
+
readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
2193
|
+
/**
|
|
2194
|
+
* Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. With
|
|
2195
|
+
* `renderer: 'kustomize'`, ABSENT ⇒ honor the overlay's own `namespace:` when it pins one
|
|
2196
|
+
* (the shared-namespace ephemeral-env shape, where base + overlay name a fixed namespace);
|
|
2197
|
+
* SET ⇒ override it (the adapter sets the namespace at build time) for true per-PR
|
|
2198
|
+
* isolation. For raw manifests, absent ⇒ a default derived from the PR number / block id.
|
|
2199
|
+
*/
|
|
2200
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
2201
|
+
/** How the environment URL is derived once applied. */
|
|
2202
|
+
readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
|
|
2203
|
+
readonly source: v.LiteralSchema<"ingressTemplate", undefined>;
|
|
2204
|
+
/** Host template, e.g. `{{branch}}.preview.example.com`; rendered with the provision vars. */
|
|
2205
|
+
readonly hostTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
2206
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2207
|
+
}, undefined>, v.ObjectSchema<{
|
|
2208
|
+
readonly source: v.LiteralSchema<"ingressStatus", undefined>;
|
|
2209
|
+
/** Ingress object to read `.status.loadBalancer` from; absent ⇒ the only Ingress applied. */
|
|
2210
|
+
readonly ingressName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2211
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2212
|
+
}, undefined>, v.ObjectSchema<{
|
|
2213
|
+
readonly source: v.LiteralSchema<"serviceStatus", undefined>;
|
|
2214
|
+
/** Service object to read `.status.loadBalancer` (k3s ServiceLB) from. */
|
|
2215
|
+
readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
|
|
2216
|
+
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>;
|
|
2217
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2218
|
+
}, undefined>, v.ObjectSchema<{
|
|
2219
|
+
readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
|
|
2220
|
+
/** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
|
|
2221
|
+
readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2222
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2223
|
+
}, undefined>, v.ObjectSchema<{
|
|
2224
|
+
readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
|
|
2225
|
+
/** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
|
|
2226
|
+
readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2227
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2228
|
+
}, undefined>], undefined>;
|
|
2229
|
+
/** Optional image reference made available to the manifests as `{{image}}`. */
|
|
2230
|
+
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
2231
|
+
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
2232
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
2233
|
+
/**
|
|
2234
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
2235
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Absent ⇒ the
|
|
2236
|
+
* harness default (180s). Merged into the provision config via `...kube` at provision time.
|
|
2237
|
+
*/
|
|
2238
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
2239
|
+
/** Extra labels stamped on the namespace + every applied resource. */
|
|
2240
|
+
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
2241
|
+
/** Extra annotations stamped on the namespace. */
|
|
2242
|
+
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
2243
|
+
/**
|
|
2244
|
+
* Workspace-level (cluster-singleton) helm releases the deploy adapter ensures before
|
|
2245
|
+
* applying a service's manifests — e.g. an ingress/gateway controller shared by every
|
|
2246
|
+
* per-PR env. Use `scope: 'shared'`; installed once, never torn down per-PR. Merged
|
|
2247
|
+
* with the service's own (per-environment) `helmReleases` at provision time.
|
|
2248
|
+
*/
|
|
2249
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2250
|
+
/** Release name. */
|
|
2251
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2252
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
2253
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2254
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
2255
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
2256
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
2257
|
+
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.">]>;
|
|
2258
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
2259
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
2260
|
+
/** Inline `--values` overrides. */
|
|
2261
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
2262
|
+
/** Templated `--set` overrides. */
|
|
2263
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2264
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
2265
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2266
|
+
/** The value, templated over the provision vars. */
|
|
2267
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2268
|
+
}, undefined>, undefined>, undefined>;
|
|
2269
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
2270
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2271
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2272
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2273
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2274
|
+
}, undefined>;
|
|
2275
|
+
}, undefined>, undefined>, undefined>;
|
|
2276
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
2277
|
+
}, undefined>, undefined>, undefined>;
|
|
2278
|
+
}, undefined>;
|
|
2279
|
+
}, undefined>, v.ObjectSchema<{
|
|
2280
|
+
readonly engine: v.LiteralSchema<"remote-custom", undefined>;
|
|
2281
|
+
readonly manifest: v.ObjectSchema<{
|
|
2282
|
+
readonly providerId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2283
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
2284
|
+
/** Management API root; provision/status/teardown paths are appended to it. */
|
|
2285
|
+
readonly baseUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2286
|
+
readonly auth: v.VariantSchema<"type", [v.ObjectSchema<{
|
|
2287
|
+
readonly type: v.LiteralSchema<"none", undefined>;
|
|
2288
|
+
}, undefined>, v.ObjectSchema<{
|
|
2289
|
+
readonly type: v.LiteralSchema<"api_key", undefined>;
|
|
2290
|
+
readonly headerName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2291
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2292
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2293
|
+
}, undefined>;
|
|
2294
|
+
/** Optional prefix prepended to the secret value, e.g. `Token `. */
|
|
2295
|
+
readonly valuePrefix: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2296
|
+
}, undefined>, v.ObjectSchema<{
|
|
2297
|
+
readonly type: v.LiteralSchema<"bearer", undefined>;
|
|
2298
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2299
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2300
|
+
}, undefined>;
|
|
2301
|
+
}, undefined>, v.ObjectSchema<{
|
|
2302
|
+
readonly type: v.LiteralSchema<"basic", undefined>;
|
|
2303
|
+
readonly usernameSecretRef: v.ObjectSchema<{
|
|
2304
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2305
|
+
}, undefined>;
|
|
2306
|
+
readonly passwordSecretRef: v.ObjectSchema<{
|
|
2307
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2308
|
+
}, undefined>;
|
|
2309
|
+
}, undefined>, v.ObjectSchema<{
|
|
2310
|
+
readonly type: v.LiteralSchema<"oauth2_client_credentials", undefined>;
|
|
2311
|
+
readonly tokenUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2312
|
+
readonly clientIdSecretRef: v.ObjectSchema<{
|
|
2313
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2314
|
+
}, undefined>;
|
|
2315
|
+
readonly clientSecretSecretRef: v.ObjectSchema<{
|
|
2316
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2317
|
+
}, undefined>;
|
|
2318
|
+
readonly scope: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2319
|
+
readonly audience: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2320
|
+
}, undefined>, v.ObjectSchema<{
|
|
2321
|
+
readonly type: v.LiteralSchema<"custom_headers", undefined>;
|
|
2322
|
+
readonly headers: v.ArraySchema<v.ObjectSchema<{
|
|
2323
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2324
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2325
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2326
|
+
}, undefined>;
|
|
2327
|
+
}, undefined>, undefined>;
|
|
2328
|
+
}, undefined>], undefined>;
|
|
2329
|
+
readonly provision: v.ObjectSchema<{
|
|
2330
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2331
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2332
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2333
|
+
readonly key: v.StringSchema<undefined>;
|
|
2334
|
+
readonly value: v.StringSchema<undefined>;
|
|
2335
|
+
}, undefined>, undefined>, undefined>;
|
|
2336
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2337
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2338
|
+
readonly value: v.StringSchema<undefined>;
|
|
2339
|
+
}, undefined>, undefined>, undefined>;
|
|
2340
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2341
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2342
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2343
|
+
}, undefined>;
|
|
2344
|
+
/** Optional: polled to observe async provisioning progress. */
|
|
2345
|
+
readonly status: v.OptionalSchema<v.ObjectSchema<{
|
|
2346
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2347
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2348
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2349
|
+
readonly key: v.StringSchema<undefined>;
|
|
2350
|
+
readonly value: v.StringSchema<undefined>;
|
|
2351
|
+
}, undefined>, undefined>, undefined>;
|
|
2352
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2353
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2354
|
+
readonly value: v.StringSchema<undefined>;
|
|
2355
|
+
}, undefined>, undefined>, undefined>;
|
|
2356
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2357
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2358
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2359
|
+
}, undefined>, undefined>;
|
|
2360
|
+
/** Optional: called to destroy the environment (manual or on TTL expiry). */
|
|
2361
|
+
readonly teardown: v.OptionalSchema<v.ObjectSchema<{
|
|
2362
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2363
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2364
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2365
|
+
readonly key: v.StringSchema<undefined>;
|
|
2366
|
+
readonly value: v.StringSchema<undefined>;
|
|
2367
|
+
}, undefined>, undefined>, undefined>;
|
|
2368
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2369
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2370
|
+
readonly value: v.StringSchema<undefined>;
|
|
2371
|
+
}, undefined>, undefined>, undefined>;
|
|
2372
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2373
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2374
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2375
|
+
}, undefined>, undefined>;
|
|
2376
|
+
readonly response: v.ObjectSchema<{
|
|
2377
|
+
readonly urlPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2378
|
+
readonly statusPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2379
|
+
readonly statusMap: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2380
|
+
readonly from: v.StringSchema<undefined>;
|
|
2381
|
+
readonly to: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
|
|
2382
|
+
}, undefined>, undefined>, undefined>;
|
|
2383
|
+
readonly expiresAtPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2384
|
+
readonly externalIdPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2385
|
+
readonly access: v.OptionalSchema<v.ObjectSchema<{
|
|
2386
|
+
readonly scheme: v.PicklistSchema<["none", "bearer", "basic", "custom_header"], undefined>;
|
|
2387
|
+
readonly tokenPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2388
|
+
readonly usernamePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2389
|
+
readonly passwordPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2390
|
+
readonly headerName: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2391
|
+
readonly headerValuePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2392
|
+
}, undefined>, undefined>;
|
|
2393
|
+
}, undefined>;
|
|
2394
|
+
/** Fallback TTL (ms) when the response carries no explicit expiry. */
|
|
2395
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
2396
|
+
/**
|
|
2397
|
+
* Opaque, provider-specific configuration for a CUSTOM backend (e.g. a Kargo project,
|
|
2398
|
+
* link-selection key, status map). The generic HttpEnvironmentProvider ignores it
|
|
2399
|
+
* entirely; a custom backend — registered by reference into the app-owned
|
|
2400
|
+
* `EnvironmentBackendRegistry` (see `backend/docs/native-environment-adapter.md`) — reads
|
|
2401
|
+
* + validates it off the per-call
|
|
2402
|
+
* `manifest`. This is the per-WORKSPACE config carrier: a custom backend rides the generic
|
|
2403
|
+
* manifest member of `environmentBackendConfigSchema`, so its bespoke settings live here and
|
|
2404
|
+
* its credentials in the secret bundle. NOT covered by the manifest URL/SSRF checks (which
|
|
2405
|
+
* only guard `baseUrl`/`tokenUrl`); a backend that puts a URL here must guard it itself
|
|
2406
|
+
* (reuse the exported `UrlSafetyPolicy`).
|
|
2407
|
+
*/
|
|
2408
|
+
readonly providerConfig: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
2409
|
+
}, undefined>;
|
|
2410
|
+
/** Which custom manifest shape this remote provider consumes — matched to a service's `manifestId`. */
|
|
2411
|
+
readonly acceptsManifestId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2412
|
+
}, undefined>], undefined>, undefined>;
|
|
2413
|
+
}, undefined>;
|
|
2414
|
+
export type EnvironmentHandlerView = v.InferOutput<typeof environmentHandlerViewSchema>;
|
|
2415
|
+
/**
|
|
2416
|
+
* Register (or replace) one per-type infra handler: the engine connection config + its
|
|
2417
|
+
* secret bundle (write-only). `manifestId` keys a `custom` handler to a specific manifest
|
|
2418
|
+
* id; `backendKind` pins the registry backend that builds the provider (else resolved from
|
|
2419
|
+
* the engine). Every secret key the chosen backend references must be supplied.
|
|
2420
|
+
*/
|
|
2421
|
+
export declare const registerEnvironmentHandlerSchema: v.ObjectSchema<{
|
|
2422
|
+
readonly provisionType: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
|
|
2423
|
+
readonly manifestId: v.OptionalSchema<v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>, undefined>, undefined>;
|
|
2424
|
+
readonly config: v.VariantSchema<"engine", [v.ObjectSchema<{
|
|
2425
|
+
readonly engine: v.LiteralSchema<"local-docker", undefined>;
|
|
2426
|
+
readonly manifest: v.ObjectSchema<{
|
|
2427
|
+
readonly providerId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2428
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
2429
|
+
/** Management API root; provision/status/teardown paths are appended to it. */
|
|
2430
|
+
readonly baseUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2431
|
+
readonly auth: v.VariantSchema<"type", [v.ObjectSchema<{
|
|
2432
|
+
readonly type: v.LiteralSchema<"none", undefined>;
|
|
2433
|
+
}, undefined>, v.ObjectSchema<{
|
|
2434
|
+
readonly type: v.LiteralSchema<"api_key", undefined>;
|
|
2435
|
+
readonly headerName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2436
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2437
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2438
|
+
}, undefined>;
|
|
2439
|
+
/** Optional prefix prepended to the secret value, e.g. `Token `. */
|
|
2440
|
+
readonly valuePrefix: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2441
|
+
}, undefined>, v.ObjectSchema<{
|
|
2442
|
+
readonly type: v.LiteralSchema<"bearer", undefined>;
|
|
2443
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2444
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2445
|
+
}, undefined>;
|
|
2446
|
+
}, undefined>, v.ObjectSchema<{
|
|
2447
|
+
readonly type: v.LiteralSchema<"basic", undefined>;
|
|
2448
|
+
readonly usernameSecretRef: v.ObjectSchema<{
|
|
2449
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2450
|
+
}, undefined>;
|
|
2451
|
+
readonly passwordSecretRef: v.ObjectSchema<{
|
|
2452
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2453
|
+
}, undefined>;
|
|
2454
|
+
}, undefined>, v.ObjectSchema<{
|
|
2455
|
+
readonly type: v.LiteralSchema<"oauth2_client_credentials", undefined>;
|
|
2456
|
+
readonly tokenUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2457
|
+
readonly clientIdSecretRef: v.ObjectSchema<{
|
|
2458
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2459
|
+
}, undefined>;
|
|
2460
|
+
readonly clientSecretSecretRef: v.ObjectSchema<{
|
|
2461
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2462
|
+
}, undefined>;
|
|
2463
|
+
readonly scope: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2464
|
+
readonly audience: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2465
|
+
}, undefined>, v.ObjectSchema<{
|
|
2466
|
+
readonly type: v.LiteralSchema<"custom_headers", undefined>;
|
|
2467
|
+
readonly headers: v.ArraySchema<v.ObjectSchema<{
|
|
2468
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2469
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2470
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2471
|
+
}, undefined>;
|
|
2472
|
+
}, undefined>, undefined>;
|
|
2473
|
+
}, undefined>], undefined>;
|
|
2474
|
+
readonly provision: v.ObjectSchema<{
|
|
2475
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2476
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2477
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2478
|
+
readonly key: v.StringSchema<undefined>;
|
|
2479
|
+
readonly value: v.StringSchema<undefined>;
|
|
2480
|
+
}, undefined>, undefined>, undefined>;
|
|
2481
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2482
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2483
|
+
readonly value: v.StringSchema<undefined>;
|
|
2484
|
+
}, undefined>, undefined>, undefined>;
|
|
2485
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2486
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2487
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2488
|
+
}, undefined>;
|
|
2489
|
+
/** Optional: polled to observe async provisioning progress. */
|
|
2490
|
+
readonly status: v.OptionalSchema<v.ObjectSchema<{
|
|
2491
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2492
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2493
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2494
|
+
readonly key: v.StringSchema<undefined>;
|
|
2495
|
+
readonly value: v.StringSchema<undefined>;
|
|
2496
|
+
}, undefined>, undefined>, undefined>;
|
|
2497
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2498
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2499
|
+
readonly value: v.StringSchema<undefined>;
|
|
2500
|
+
}, undefined>, undefined>, undefined>;
|
|
2501
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2502
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2503
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2504
|
+
}, undefined>, undefined>;
|
|
2505
|
+
/** Optional: called to destroy the environment (manual or on TTL expiry). */
|
|
2506
|
+
readonly teardown: v.OptionalSchema<v.ObjectSchema<{
|
|
2507
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2508
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2509
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2510
|
+
readonly key: v.StringSchema<undefined>;
|
|
2511
|
+
readonly value: v.StringSchema<undefined>;
|
|
2512
|
+
}, undefined>, undefined>, undefined>;
|
|
2513
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2514
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2515
|
+
readonly value: v.StringSchema<undefined>;
|
|
2516
|
+
}, undefined>, undefined>, undefined>;
|
|
2517
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2518
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2519
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2520
|
+
}, undefined>, undefined>;
|
|
2521
|
+
readonly response: v.ObjectSchema<{
|
|
2522
|
+
readonly urlPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2523
|
+
readonly statusPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2524
|
+
readonly statusMap: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2525
|
+
readonly from: v.StringSchema<undefined>;
|
|
2526
|
+
readonly to: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
|
|
2527
|
+
}, undefined>, undefined>, undefined>;
|
|
2528
|
+
readonly expiresAtPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2529
|
+
readonly externalIdPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2530
|
+
readonly access: v.OptionalSchema<v.ObjectSchema<{
|
|
2531
|
+
readonly scheme: v.PicklistSchema<["none", "bearer", "basic", "custom_header"], undefined>;
|
|
2532
|
+
readonly tokenPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2533
|
+
readonly usernamePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2534
|
+
readonly passwordPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2535
|
+
readonly headerName: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2536
|
+
readonly headerValuePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2537
|
+
}, undefined>, undefined>;
|
|
2538
|
+
}, undefined>;
|
|
2539
|
+
/** Fallback TTL (ms) when the response carries no explicit expiry. */
|
|
2540
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
2541
|
+
/**
|
|
2542
|
+
* Opaque, provider-specific configuration for a CUSTOM backend (e.g. a Kargo project,
|
|
2543
|
+
* link-selection key, status map). The generic HttpEnvironmentProvider ignores it
|
|
2544
|
+
* entirely; a custom backend — registered by reference into the app-owned
|
|
2545
|
+
* `EnvironmentBackendRegistry` (see `backend/docs/native-environment-adapter.md`) — reads
|
|
2546
|
+
* + validates it off the per-call
|
|
2547
|
+
* `manifest`. This is the per-WORKSPACE config carrier: a custom backend rides the generic
|
|
2548
|
+
* manifest member of `environmentBackendConfigSchema`, so its bespoke settings live here and
|
|
2549
|
+
* its credentials in the secret bundle. NOT covered by the manifest URL/SSRF checks (which
|
|
2550
|
+
* only guard `baseUrl`/`tokenUrl`); a backend that puts a URL here must guard it itself
|
|
2551
|
+
* (reuse the exported `UrlSafetyPolicy`).
|
|
2552
|
+
*/
|
|
2553
|
+
readonly providerConfig: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
2554
|
+
}, undefined>;
|
|
2555
|
+
}, undefined>, v.ObjectSchema<{
|
|
2556
|
+
readonly engine: v.LiteralSchema<"local-k3s", undefined>;
|
|
2557
|
+
readonly kubernetes: v.ObjectSchema<{
|
|
2558
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
2559
|
+
/** kube-apiserver root URL, e.g. `https://my-cluster.example:6443`. */
|
|
2560
|
+
readonly apiServerUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2561
|
+
/** PEM CA bundle to verify the apiserver TLS cert (omit only for a publicly-trusted CA). */
|
|
2562
|
+
readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2563
|
+
/** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
|
|
2564
|
+
readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
2565
|
+
/**
|
|
2566
|
+
* Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. With
|
|
2567
|
+
* `renderer: 'kustomize'`, ABSENT ⇒ honor the overlay's own `namespace:` when it pins one
|
|
2568
|
+
* (the shared-namespace ephemeral-env shape, where base + overlay name a fixed namespace);
|
|
2569
|
+
* SET ⇒ override it (the adapter sets the namespace at build time) for true per-PR
|
|
2570
|
+
* isolation. For raw manifests, absent ⇒ a default derived from the PR number / block id.
|
|
2571
|
+
*/
|
|
2572
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
2573
|
+
/** How the environment URL is derived once applied. */
|
|
2574
|
+
readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
|
|
2575
|
+
readonly source: v.LiteralSchema<"ingressTemplate", undefined>;
|
|
2576
|
+
/** Host template, e.g. `{{branch}}.preview.example.com`; rendered with the provision vars. */
|
|
2577
|
+
readonly hostTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
2578
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2579
|
+
}, undefined>, v.ObjectSchema<{
|
|
2580
|
+
readonly source: v.LiteralSchema<"ingressStatus", undefined>;
|
|
2581
|
+
/** Ingress object to read `.status.loadBalancer` from; absent ⇒ the only Ingress applied. */
|
|
2582
|
+
readonly ingressName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2583
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2584
|
+
}, undefined>, v.ObjectSchema<{
|
|
2585
|
+
readonly source: v.LiteralSchema<"serviceStatus", undefined>;
|
|
2586
|
+
/** Service object to read `.status.loadBalancer` (k3s ServiceLB) from. */
|
|
2587
|
+
readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
|
|
2588
|
+
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>;
|
|
2589
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2590
|
+
}, undefined>, v.ObjectSchema<{
|
|
2591
|
+
readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
|
|
2592
|
+
/** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
|
|
2593
|
+
readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2594
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2595
|
+
}, undefined>, v.ObjectSchema<{
|
|
2596
|
+
readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
|
|
2597
|
+
/** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
|
|
2598
|
+
readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2599
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2600
|
+
}, undefined>], undefined>;
|
|
2601
|
+
/** Optional image reference made available to the manifests as `{{image}}`. */
|
|
2602
|
+
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
2603
|
+
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
2604
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
2605
|
+
/**
|
|
2606
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
2607
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Absent ⇒ the
|
|
2608
|
+
* harness default (180s). Merged into the provision config via `...kube` at provision time.
|
|
2609
|
+
*/
|
|
2610
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
2611
|
+
/** Extra labels stamped on the namespace + every applied resource. */
|
|
2612
|
+
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
2613
|
+
/** Extra annotations stamped on the namespace. */
|
|
2614
|
+
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
2615
|
+
/**
|
|
2616
|
+
* Workspace-level (cluster-singleton) helm releases the deploy adapter ensures before
|
|
2617
|
+
* applying a service's manifests — e.g. an ingress/gateway controller shared by every
|
|
2618
|
+
* per-PR env. Use `scope: 'shared'`; installed once, never torn down per-PR. Merged
|
|
2619
|
+
* with the service's own (per-environment) `helmReleases` at provision time.
|
|
2620
|
+
*/
|
|
2621
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2622
|
+
/** Release name. */
|
|
2623
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2624
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
2625
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2626
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
2627
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
2628
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
2629
|
+
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.">]>;
|
|
2630
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
2631
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
2632
|
+
/** Inline `--values` overrides. */
|
|
2633
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
2634
|
+
/** Templated `--set` overrides. */
|
|
2635
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2636
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
2637
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2638
|
+
/** The value, templated over the provision vars. */
|
|
2639
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2640
|
+
}, undefined>, undefined>, undefined>;
|
|
2641
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
2642
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2643
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2644
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2645
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2646
|
+
}, undefined>;
|
|
2647
|
+
}, undefined>, undefined>, undefined>;
|
|
2648
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
2649
|
+
}, undefined>, undefined>, undefined>;
|
|
2650
|
+
}, undefined>;
|
|
2651
|
+
}, undefined>, v.ObjectSchema<{
|
|
2652
|
+
readonly engine: v.LiteralSchema<"remote-kubernetes", undefined>;
|
|
2653
|
+
readonly kubernetes: v.ObjectSchema<{
|
|
2654
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
2655
|
+
/** kube-apiserver root URL, e.g. `https://my-cluster.example:6443`. */
|
|
2656
|
+
readonly apiServerUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2657
|
+
/** PEM CA bundle to verify the apiserver TLS cert (omit only for a publicly-trusted CA). */
|
|
2658
|
+
readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2659
|
+
/** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
|
|
2660
|
+
readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
2661
|
+
/**
|
|
2662
|
+
* Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. With
|
|
2663
|
+
* `renderer: 'kustomize'`, ABSENT ⇒ honor the overlay's own `namespace:` when it pins one
|
|
2664
|
+
* (the shared-namespace ephemeral-env shape, where base + overlay name a fixed namespace);
|
|
2665
|
+
* SET ⇒ override it (the adapter sets the namespace at build time) for true per-PR
|
|
2666
|
+
* isolation. For raw manifests, absent ⇒ a default derived from the PR number / block id.
|
|
2667
|
+
*/
|
|
2668
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
2669
|
+
/** How the environment URL is derived once applied. */
|
|
2670
|
+
readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
|
|
2671
|
+
readonly source: v.LiteralSchema<"ingressTemplate", undefined>;
|
|
2672
|
+
/** Host template, e.g. `{{branch}}.preview.example.com`; rendered with the provision vars. */
|
|
2673
|
+
readonly hostTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
2674
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2675
|
+
}, undefined>, v.ObjectSchema<{
|
|
2676
|
+
readonly source: v.LiteralSchema<"ingressStatus", undefined>;
|
|
2677
|
+
/** Ingress object to read `.status.loadBalancer` from; absent ⇒ the only Ingress applied. */
|
|
2678
|
+
readonly ingressName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2679
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2680
|
+
}, undefined>, v.ObjectSchema<{
|
|
2681
|
+
readonly source: v.LiteralSchema<"serviceStatus", undefined>;
|
|
2682
|
+
/** Service object to read `.status.loadBalancer` (k3s ServiceLB) from. */
|
|
2683
|
+
readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
|
|
2684
|
+
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>;
|
|
2685
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2686
|
+
}, undefined>, v.ObjectSchema<{
|
|
2687
|
+
readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
|
|
2688
|
+
/** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
|
|
2689
|
+
readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2690
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2691
|
+
}, undefined>, v.ObjectSchema<{
|
|
2692
|
+
readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
|
|
2693
|
+
/** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
|
|
2694
|
+
readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
2695
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
2696
|
+
}, undefined>], undefined>;
|
|
2697
|
+
/** Optional image reference made available to the manifests as `{{image}}`. */
|
|
2698
|
+
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
2699
|
+
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
2700
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
2701
|
+
/**
|
|
2702
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
2703
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Absent ⇒ the
|
|
2704
|
+
* harness default (180s). Merged into the provision config via `...kube` at provision time.
|
|
2705
|
+
*/
|
|
2706
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
2707
|
+
/** Extra labels stamped on the namespace + every applied resource. */
|
|
2708
|
+
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
2709
|
+
/** Extra annotations stamped on the namespace. */
|
|
2710
|
+
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
2711
|
+
/**
|
|
2712
|
+
* Workspace-level (cluster-singleton) helm releases the deploy adapter ensures before
|
|
2713
|
+
* applying a service's manifests — e.g. an ingress/gateway controller shared by every
|
|
2714
|
+
* per-PR env. Use `scope: 'shared'`; installed once, never torn down per-PR. Merged
|
|
2715
|
+
* with the service's own (per-environment) `helmReleases` at provision time.
|
|
2716
|
+
*/
|
|
2717
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2718
|
+
/** Release name. */
|
|
2719
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2720
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
2721
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2722
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
2723
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
2724
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
2725
|
+
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.">]>;
|
|
2726
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
2727
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
2728
|
+
/** Inline `--values` overrides. */
|
|
2729
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
2730
|
+
/** Templated `--set` overrides. */
|
|
2731
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2732
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
2733
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2734
|
+
/** The value, templated over the provision vars. */
|
|
2735
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2736
|
+
}, undefined>, undefined>, undefined>;
|
|
2737
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
2738
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2739
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2740
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2741
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2742
|
+
}, undefined>;
|
|
2743
|
+
}, undefined>, undefined>, undefined>;
|
|
2744
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
2745
|
+
}, undefined>, undefined>, undefined>;
|
|
2746
|
+
}, undefined>;
|
|
2747
|
+
}, undefined>, v.ObjectSchema<{
|
|
2748
|
+
readonly engine: v.LiteralSchema<"remote-custom", undefined>;
|
|
2749
|
+
readonly manifest: v.ObjectSchema<{
|
|
2750
|
+
readonly providerId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2751
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
2752
|
+
/** Management API root; provision/status/teardown paths are appended to it. */
|
|
2753
|
+
readonly baseUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2754
|
+
readonly auth: v.VariantSchema<"type", [v.ObjectSchema<{
|
|
2755
|
+
readonly type: v.LiteralSchema<"none", undefined>;
|
|
2756
|
+
}, undefined>, v.ObjectSchema<{
|
|
2757
|
+
readonly type: v.LiteralSchema<"api_key", undefined>;
|
|
2758
|
+
readonly headerName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2759
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2760
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2761
|
+
}, undefined>;
|
|
2762
|
+
/** Optional prefix prepended to the secret value, e.g. `Token `. */
|
|
2763
|
+
readonly valuePrefix: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2764
|
+
}, undefined>, v.ObjectSchema<{
|
|
2765
|
+
readonly type: v.LiteralSchema<"bearer", undefined>;
|
|
2766
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2767
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2768
|
+
}, undefined>;
|
|
2769
|
+
}, undefined>, v.ObjectSchema<{
|
|
2770
|
+
readonly type: v.LiteralSchema<"basic", undefined>;
|
|
2771
|
+
readonly usernameSecretRef: v.ObjectSchema<{
|
|
2772
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2773
|
+
}, undefined>;
|
|
2774
|
+
readonly passwordSecretRef: v.ObjectSchema<{
|
|
2775
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2776
|
+
}, undefined>;
|
|
2777
|
+
}, undefined>, v.ObjectSchema<{
|
|
2778
|
+
readonly type: v.LiteralSchema<"oauth2_client_credentials", undefined>;
|
|
2779
|
+
readonly tokenUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2780
|
+
readonly clientIdSecretRef: v.ObjectSchema<{
|
|
2781
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2782
|
+
}, undefined>;
|
|
2783
|
+
readonly clientSecretSecretRef: v.ObjectSchema<{
|
|
2784
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2785
|
+
}, undefined>;
|
|
2786
|
+
readonly scope: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2787
|
+
readonly audience: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2788
|
+
}, undefined>, v.ObjectSchema<{
|
|
2789
|
+
readonly type: v.LiteralSchema<"custom_headers", undefined>;
|
|
2790
|
+
readonly headers: v.ArraySchema<v.ObjectSchema<{
|
|
2791
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2792
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2793
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2794
|
+
}, undefined>;
|
|
2795
|
+
}, undefined>, undefined>;
|
|
2796
|
+
}, undefined>], undefined>;
|
|
2797
|
+
readonly provision: v.ObjectSchema<{
|
|
2798
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2799
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2800
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2801
|
+
readonly key: v.StringSchema<undefined>;
|
|
2802
|
+
readonly value: v.StringSchema<undefined>;
|
|
2803
|
+
}, undefined>, undefined>, undefined>;
|
|
2804
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2805
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2806
|
+
readonly value: v.StringSchema<undefined>;
|
|
2807
|
+
}, undefined>, undefined>, undefined>;
|
|
2808
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2809
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2810
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2811
|
+
}, undefined>;
|
|
2812
|
+
/** Optional: polled to observe async provisioning progress. */
|
|
2813
|
+
readonly status: v.OptionalSchema<v.ObjectSchema<{
|
|
2814
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2815
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2816
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2817
|
+
readonly key: v.StringSchema<undefined>;
|
|
2818
|
+
readonly value: v.StringSchema<undefined>;
|
|
2819
|
+
}, undefined>, undefined>, undefined>;
|
|
2820
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2821
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2822
|
+
readonly value: v.StringSchema<undefined>;
|
|
2823
|
+
}, undefined>, undefined>, undefined>;
|
|
2824
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2825
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2826
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2827
|
+
}, undefined>, undefined>;
|
|
2828
|
+
/** Optional: called to destroy the environment (manual or on TTL expiry). */
|
|
2829
|
+
readonly teardown: v.OptionalSchema<v.ObjectSchema<{
|
|
2830
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2831
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2832
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2833
|
+
readonly key: v.StringSchema<undefined>;
|
|
2834
|
+
readonly value: v.StringSchema<undefined>;
|
|
2835
|
+
}, undefined>, undefined>, undefined>;
|
|
2836
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2837
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2838
|
+
readonly value: v.StringSchema<undefined>;
|
|
2839
|
+
}, undefined>, undefined>, undefined>;
|
|
2840
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2841
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2842
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2843
|
+
}, undefined>, undefined>;
|
|
2844
|
+
readonly response: v.ObjectSchema<{
|
|
2845
|
+
readonly urlPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2846
|
+
readonly statusPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2847
|
+
readonly statusMap: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2848
|
+
readonly from: v.StringSchema<undefined>;
|
|
2849
|
+
readonly to: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
|
|
2850
|
+
}, undefined>, undefined>, undefined>;
|
|
2851
|
+
readonly expiresAtPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2852
|
+
readonly externalIdPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2853
|
+
readonly access: v.OptionalSchema<v.ObjectSchema<{
|
|
2854
|
+
readonly scheme: v.PicklistSchema<["none", "bearer", "basic", "custom_header"], undefined>;
|
|
2855
|
+
readonly tokenPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2856
|
+
readonly usernamePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2857
|
+
readonly passwordPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2858
|
+
readonly headerName: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2859
|
+
readonly headerValuePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2860
|
+
}, undefined>, undefined>;
|
|
2861
|
+
}, undefined>;
|
|
2862
|
+
/** Fallback TTL (ms) when the response carries no explicit expiry. */
|
|
2863
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
2864
|
+
/**
|
|
2865
|
+
* Opaque, provider-specific configuration for a CUSTOM backend (e.g. a Kargo project,
|
|
2866
|
+
* link-selection key, status map). The generic HttpEnvironmentProvider ignores it
|
|
2867
|
+
* entirely; a custom backend — registered by reference into the app-owned
|
|
2868
|
+
* `EnvironmentBackendRegistry` (see `backend/docs/native-environment-adapter.md`) — reads
|
|
2869
|
+
* + validates it off the per-call
|
|
2870
|
+
* `manifest`. This is the per-WORKSPACE config carrier: a custom backend rides the generic
|
|
2871
|
+
* manifest member of `environmentBackendConfigSchema`, so its bespoke settings live here and
|
|
2872
|
+
* its credentials in the secret bundle. NOT covered by the manifest URL/SSRF checks (which
|
|
2873
|
+
* only guard `baseUrl`/`tokenUrl`); a backend that puts a URL here must guard it itself
|
|
2874
|
+
* (reuse the exported `UrlSafetyPolicy`).
|
|
2875
|
+
*/
|
|
2876
|
+
readonly providerConfig: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
2877
|
+
}, undefined>;
|
|
2878
|
+
/** Which custom manifest shape this remote provider consumes — matched to a service's `manifestId`. */
|
|
2879
|
+
readonly acceptsManifestId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2880
|
+
}, undefined>], undefined>;
|
|
2881
|
+
readonly backendKind: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2882
|
+
readonly secrets: v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>;
|
|
2883
|
+
}, undefined>;
|
|
2884
|
+
export type RegisterEnvironmentHandlerInput = v.InferOutput<typeof registerEnvironmentHandlerSchema>;
|
|
2885
|
+
/**
|
|
2886
|
+
* The body for a per-USER handler override PUT, where the provision type is taken from the
|
|
2887
|
+
* path (`/me/environment-handlers/:workspaceId/:provisionType`) — so the body carries only
|
|
2888
|
+
* the config + secrets (+ optional `manifestId`/`backendKind`), and must NOT re-send a
|
|
2889
|
+
* `provisionType` the handler would ignore.
|
|
2890
|
+
*/
|
|
2891
|
+
export declare const upsertEnvironmentUserHandlerBodySchema: v.ObjectSchema<{
|
|
2892
|
+
readonly manifestId: v.OptionalSchema<v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>, undefined>, undefined>;
|
|
2893
|
+
readonly config: v.VariantSchema<"engine", [v.ObjectSchema<{
|
|
2894
|
+
readonly engine: v.LiteralSchema<"local-docker", undefined>;
|
|
2895
|
+
readonly manifest: v.ObjectSchema<{
|
|
2896
|
+
readonly providerId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2897
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
2898
|
+
/** Management API root; provision/status/teardown paths are appended to it. */
|
|
2899
|
+
readonly baseUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2900
|
+
readonly auth: v.VariantSchema<"type", [v.ObjectSchema<{
|
|
2901
|
+
readonly type: v.LiteralSchema<"none", undefined>;
|
|
2902
|
+
}, undefined>, v.ObjectSchema<{
|
|
2903
|
+
readonly type: v.LiteralSchema<"api_key", undefined>;
|
|
2904
|
+
readonly headerName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2905
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2906
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2907
|
+
}, undefined>;
|
|
2908
|
+
/** Optional prefix prepended to the secret value, e.g. `Token `. */
|
|
2909
|
+
readonly valuePrefix: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2910
|
+
}, undefined>, v.ObjectSchema<{
|
|
2911
|
+
readonly type: v.LiteralSchema<"bearer", undefined>;
|
|
2912
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2913
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2914
|
+
}, undefined>;
|
|
2915
|
+
}, undefined>, v.ObjectSchema<{
|
|
2916
|
+
readonly type: v.LiteralSchema<"basic", undefined>;
|
|
2917
|
+
readonly usernameSecretRef: v.ObjectSchema<{
|
|
2918
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2919
|
+
}, undefined>;
|
|
2920
|
+
readonly passwordSecretRef: v.ObjectSchema<{
|
|
2921
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2922
|
+
}, undefined>;
|
|
2923
|
+
}, undefined>, v.ObjectSchema<{
|
|
2924
|
+
readonly type: v.LiteralSchema<"oauth2_client_credentials", undefined>;
|
|
2925
|
+
readonly tokenUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2926
|
+
readonly clientIdSecretRef: v.ObjectSchema<{
|
|
2927
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2928
|
+
}, undefined>;
|
|
2929
|
+
readonly clientSecretSecretRef: v.ObjectSchema<{
|
|
2930
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2931
|
+
}, undefined>;
|
|
2932
|
+
readonly scope: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2933
|
+
readonly audience: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2934
|
+
}, undefined>, v.ObjectSchema<{
|
|
2935
|
+
readonly type: v.LiteralSchema<"custom_headers", undefined>;
|
|
2936
|
+
readonly headers: v.ArraySchema<v.ObjectSchema<{
|
|
2937
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2938
|
+
readonly secretRef: v.ObjectSchema<{
|
|
2939
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
2940
|
+
}, undefined>;
|
|
2941
|
+
}, undefined>, undefined>;
|
|
2942
|
+
}, undefined>], undefined>;
|
|
2943
|
+
readonly provision: v.ObjectSchema<{
|
|
2944
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2945
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2946
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2947
|
+
readonly key: v.StringSchema<undefined>;
|
|
2948
|
+
readonly value: v.StringSchema<undefined>;
|
|
2949
|
+
}, undefined>, undefined>, undefined>;
|
|
2950
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2951
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2952
|
+
readonly value: v.StringSchema<undefined>;
|
|
2953
|
+
}, undefined>, undefined>, undefined>;
|
|
2954
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2955
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2956
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2957
|
+
}, undefined>;
|
|
2958
|
+
/** Optional: polled to observe async provisioning progress. */
|
|
2959
|
+
readonly status: v.OptionalSchema<v.ObjectSchema<{
|
|
2960
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2961
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2962
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2963
|
+
readonly key: v.StringSchema<undefined>;
|
|
2964
|
+
readonly value: v.StringSchema<undefined>;
|
|
2965
|
+
}, undefined>, undefined>, undefined>;
|
|
2966
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2967
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2968
|
+
readonly value: v.StringSchema<undefined>;
|
|
2969
|
+
}, undefined>, undefined>, undefined>;
|
|
2970
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2971
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2972
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2973
|
+
}, undefined>, undefined>;
|
|
2974
|
+
/** Optional: called to destroy the environment (manual or on TTL expiry). */
|
|
2975
|
+
readonly teardown: v.OptionalSchema<v.ObjectSchema<{
|
|
2976
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
2977
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
2978
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2979
|
+
readonly key: v.StringSchema<undefined>;
|
|
2980
|
+
readonly value: v.StringSchema<undefined>;
|
|
2981
|
+
}, undefined>, undefined>, undefined>;
|
|
2982
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2983
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
2984
|
+
readonly value: v.StringSchema<undefined>;
|
|
2985
|
+
}, undefined>, undefined>, undefined>;
|
|
2986
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2987
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
2988
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
2989
|
+
}, undefined>, undefined>;
|
|
2990
|
+
readonly response: v.ObjectSchema<{
|
|
2991
|
+
readonly urlPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2992
|
+
readonly statusPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2993
|
+
readonly statusMap: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
2994
|
+
readonly from: v.StringSchema<undefined>;
|
|
2995
|
+
readonly to: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
|
|
2996
|
+
}, undefined>, undefined>, undefined>;
|
|
2997
|
+
readonly expiresAtPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2998
|
+
readonly externalIdPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
2999
|
+
readonly access: v.OptionalSchema<v.ObjectSchema<{
|
|
3000
|
+
readonly scheme: v.PicklistSchema<["none", "bearer", "basic", "custom_header"], undefined>;
|
|
3001
|
+
readonly tokenPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3002
|
+
readonly usernamePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3003
|
+
readonly passwordPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3004
|
+
readonly headerName: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3005
|
+
readonly headerValuePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3006
|
+
}, undefined>, undefined>;
|
|
3007
|
+
}, undefined>;
|
|
3008
|
+
/** Fallback TTL (ms) when the response carries no explicit expiry. */
|
|
3009
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
3010
|
+
/**
|
|
3011
|
+
* Opaque, provider-specific configuration for a CUSTOM backend (e.g. a Kargo project,
|
|
3012
|
+
* link-selection key, status map). The generic HttpEnvironmentProvider ignores it
|
|
3013
|
+
* entirely; a custom backend — registered by reference into the app-owned
|
|
3014
|
+
* `EnvironmentBackendRegistry` (see `backend/docs/native-environment-adapter.md`) — reads
|
|
3015
|
+
* + validates it off the per-call
|
|
3016
|
+
* `manifest`. This is the per-WORKSPACE config carrier: a custom backend rides the generic
|
|
3017
|
+
* manifest member of `environmentBackendConfigSchema`, so its bespoke settings live here and
|
|
3018
|
+
* its credentials in the secret bundle. NOT covered by the manifest URL/SSRF checks (which
|
|
3019
|
+
* only guard `baseUrl`/`tokenUrl`); a backend that puts a URL here must guard it itself
|
|
3020
|
+
* (reuse the exported `UrlSafetyPolicy`).
|
|
3021
|
+
*/
|
|
3022
|
+
readonly providerConfig: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
3023
|
+
}, undefined>;
|
|
3024
|
+
}, undefined>, v.ObjectSchema<{
|
|
3025
|
+
readonly engine: v.LiteralSchema<"local-k3s", undefined>;
|
|
3026
|
+
readonly kubernetes: v.ObjectSchema<{
|
|
3027
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
3028
|
+
/** kube-apiserver root URL, e.g. `https://my-cluster.example:6443`. */
|
|
3029
|
+
readonly apiServerUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3030
|
+
/** PEM CA bundle to verify the apiserver TLS cert (omit only for a publicly-trusted CA). */
|
|
3031
|
+
readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3032
|
+
/** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
|
|
3033
|
+
readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
3034
|
+
/**
|
|
3035
|
+
* Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. With
|
|
3036
|
+
* `renderer: 'kustomize'`, ABSENT ⇒ honor the overlay's own `namespace:` when it pins one
|
|
3037
|
+
* (the shared-namespace ephemeral-env shape, where base + overlay name a fixed namespace);
|
|
3038
|
+
* SET ⇒ override it (the adapter sets the namespace at build time) for true per-PR
|
|
3039
|
+
* isolation. For raw manifests, absent ⇒ a default derived from the PR number / block id.
|
|
3040
|
+
*/
|
|
3041
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
3042
|
+
/** How the environment URL is derived once applied. */
|
|
3043
|
+
readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
|
|
3044
|
+
readonly source: v.LiteralSchema<"ingressTemplate", undefined>;
|
|
3045
|
+
/** Host template, e.g. `{{branch}}.preview.example.com`; rendered with the provision vars. */
|
|
3046
|
+
readonly hostTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
3047
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3048
|
+
}, undefined>, v.ObjectSchema<{
|
|
3049
|
+
readonly source: v.LiteralSchema<"ingressStatus", undefined>;
|
|
3050
|
+
/** Ingress object to read `.status.loadBalancer` from; absent ⇒ the only Ingress applied. */
|
|
3051
|
+
readonly ingressName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3052
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3053
|
+
}, undefined>, v.ObjectSchema<{
|
|
3054
|
+
readonly source: v.LiteralSchema<"serviceStatus", undefined>;
|
|
3055
|
+
/** Service object to read `.status.loadBalancer` (k3s ServiceLB) from. */
|
|
3056
|
+
readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
|
|
3057
|
+
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>;
|
|
3058
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3059
|
+
}, undefined>, v.ObjectSchema<{
|
|
3060
|
+
readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
|
|
3061
|
+
/** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
|
|
3062
|
+
readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3063
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3064
|
+
}, undefined>, v.ObjectSchema<{
|
|
3065
|
+
readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
|
|
3066
|
+
/** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
|
|
3067
|
+
readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3068
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3069
|
+
}, undefined>], undefined>;
|
|
3070
|
+
/** Optional image reference made available to the manifests as `{{image}}`. */
|
|
3071
|
+
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
3072
|
+
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
3073
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
3074
|
+
/**
|
|
3075
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
3076
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Absent ⇒ the
|
|
3077
|
+
* harness default (180s). Merged into the provision config via `...kube` at provision time.
|
|
3078
|
+
*/
|
|
3079
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
3080
|
+
/** Extra labels stamped on the namespace + every applied resource. */
|
|
3081
|
+
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
3082
|
+
/** Extra annotations stamped on the namespace. */
|
|
3083
|
+
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
3084
|
+
/**
|
|
3085
|
+
* Workspace-level (cluster-singleton) helm releases the deploy adapter ensures before
|
|
3086
|
+
* applying a service's manifests — e.g. an ingress/gateway controller shared by every
|
|
3087
|
+
* per-PR env. Use `scope: 'shared'`; installed once, never torn down per-PR. Merged
|
|
3088
|
+
* with the service's own (per-environment) `helmReleases` at provision time.
|
|
3089
|
+
*/
|
|
3090
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3091
|
+
/** Release name. */
|
|
3092
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3093
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
3094
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3095
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
3096
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
3097
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
3098
|
+
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.">]>;
|
|
3099
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
3100
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
3101
|
+
/** Inline `--values` overrides. */
|
|
3102
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
3103
|
+
/** Templated `--set` overrides. */
|
|
3104
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3105
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
3106
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3107
|
+
/** The value, templated over the provision vars. */
|
|
3108
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3109
|
+
}, undefined>, undefined>, undefined>;
|
|
3110
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
3111
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3112
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3113
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3114
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3115
|
+
}, undefined>;
|
|
3116
|
+
}, undefined>, undefined>, undefined>;
|
|
3117
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
3118
|
+
}, undefined>, undefined>, undefined>;
|
|
3119
|
+
}, undefined>;
|
|
3120
|
+
}, undefined>, v.ObjectSchema<{
|
|
3121
|
+
readonly engine: v.LiteralSchema<"remote-kubernetes", undefined>;
|
|
3122
|
+
readonly kubernetes: v.ObjectSchema<{
|
|
3123
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
3124
|
+
/** kube-apiserver root URL, e.g. `https://my-cluster.example:6443`. */
|
|
3125
|
+
readonly apiServerUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3126
|
+
/** PEM CA bundle to verify the apiserver TLS cert (omit only for a publicly-trusted CA). */
|
|
3127
|
+
readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3128
|
+
/** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
|
|
3129
|
+
readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
3130
|
+
/**
|
|
3131
|
+
* Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. With
|
|
3132
|
+
* `renderer: 'kustomize'`, ABSENT ⇒ honor the overlay's own `namespace:` when it pins one
|
|
3133
|
+
* (the shared-namespace ephemeral-env shape, where base + overlay name a fixed namespace);
|
|
3134
|
+
* SET ⇒ override it (the adapter sets the namespace at build time) for true per-PR
|
|
3135
|
+
* isolation. For raw manifests, absent ⇒ a default derived from the PR number / block id.
|
|
3136
|
+
*/
|
|
3137
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
3138
|
+
/** How the environment URL is derived once applied. */
|
|
3139
|
+
readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
|
|
3140
|
+
readonly source: v.LiteralSchema<"ingressTemplate", undefined>;
|
|
3141
|
+
/** Host template, e.g. `{{branch}}.preview.example.com`; rendered with the provision vars. */
|
|
3142
|
+
readonly hostTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
3143
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3144
|
+
}, undefined>, v.ObjectSchema<{
|
|
3145
|
+
readonly source: v.LiteralSchema<"ingressStatus", undefined>;
|
|
3146
|
+
/** Ingress object to read `.status.loadBalancer` from; absent ⇒ the only Ingress applied. */
|
|
3147
|
+
readonly ingressName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3148
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3149
|
+
}, undefined>, v.ObjectSchema<{
|
|
3150
|
+
readonly source: v.LiteralSchema<"serviceStatus", undefined>;
|
|
3151
|
+
/** Service object to read `.status.loadBalancer` (k3s ServiceLB) from. */
|
|
3152
|
+
readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
|
|
3153
|
+
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>;
|
|
3154
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3155
|
+
}, undefined>, v.ObjectSchema<{
|
|
3156
|
+
readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
|
|
3157
|
+
/** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
|
|
3158
|
+
readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3159
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3160
|
+
}, undefined>, v.ObjectSchema<{
|
|
3161
|
+
readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
|
|
3162
|
+
/** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
|
|
3163
|
+
readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3164
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3165
|
+
}, undefined>], undefined>;
|
|
3166
|
+
/** Optional image reference made available to the manifests as `{{image}}`. */
|
|
3167
|
+
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
3168
|
+
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
3169
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
3170
|
+
/**
|
|
3171
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
3172
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Absent ⇒ the
|
|
3173
|
+
* harness default (180s). Merged into the provision config via `...kube` at provision time.
|
|
3174
|
+
*/
|
|
3175
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
3176
|
+
/** Extra labels stamped on the namespace + every applied resource. */
|
|
3177
|
+
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
3178
|
+
/** Extra annotations stamped on the namespace. */
|
|
3179
|
+
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
3180
|
+
/**
|
|
3181
|
+
* Workspace-level (cluster-singleton) helm releases the deploy adapter ensures before
|
|
3182
|
+
* applying a service's manifests — e.g. an ingress/gateway controller shared by every
|
|
3183
|
+
* per-PR env. Use `scope: 'shared'`; installed once, never torn down per-PR. Merged
|
|
3184
|
+
* with the service's own (per-environment) `helmReleases` at provision time.
|
|
3185
|
+
*/
|
|
3186
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3187
|
+
/** Release name. */
|
|
3188
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3189
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
3190
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3191
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
3192
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
3193
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
3194
|
+
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.">]>;
|
|
3195
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
3196
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
3197
|
+
/** Inline `--values` overrides. */
|
|
3198
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
3199
|
+
/** Templated `--set` overrides. */
|
|
3200
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3201
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
3202
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3203
|
+
/** The value, templated over the provision vars. */
|
|
3204
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3205
|
+
}, undefined>, undefined>, undefined>;
|
|
3206
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
3207
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3208
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3209
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3210
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3211
|
+
}, undefined>;
|
|
3212
|
+
}, undefined>, undefined>, undefined>;
|
|
3213
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
3214
|
+
}, undefined>, undefined>, undefined>;
|
|
3215
|
+
}, undefined>;
|
|
3216
|
+
}, undefined>, v.ObjectSchema<{
|
|
3217
|
+
readonly engine: v.LiteralSchema<"remote-custom", undefined>;
|
|
3218
|
+
readonly manifest: v.ObjectSchema<{
|
|
3219
|
+
readonly providerId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3220
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
3221
|
+
/** Management API root; provision/status/teardown paths are appended to it. */
|
|
3222
|
+
readonly baseUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3223
|
+
readonly auth: v.VariantSchema<"type", [v.ObjectSchema<{
|
|
3224
|
+
readonly type: v.LiteralSchema<"none", undefined>;
|
|
3225
|
+
}, undefined>, v.ObjectSchema<{
|
|
3226
|
+
readonly type: v.LiteralSchema<"api_key", undefined>;
|
|
3227
|
+
readonly headerName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3228
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3229
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3230
|
+
}, undefined>;
|
|
3231
|
+
/** Optional prefix prepended to the secret value, e.g. `Token `. */
|
|
3232
|
+
readonly valuePrefix: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3233
|
+
}, undefined>, v.ObjectSchema<{
|
|
3234
|
+
readonly type: v.LiteralSchema<"bearer", undefined>;
|
|
3235
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3236
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3237
|
+
}, undefined>;
|
|
3238
|
+
}, undefined>, v.ObjectSchema<{
|
|
3239
|
+
readonly type: v.LiteralSchema<"basic", undefined>;
|
|
3240
|
+
readonly usernameSecretRef: v.ObjectSchema<{
|
|
3241
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3242
|
+
}, undefined>;
|
|
3243
|
+
readonly passwordSecretRef: v.ObjectSchema<{
|
|
3244
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3245
|
+
}, undefined>;
|
|
3246
|
+
}, undefined>, v.ObjectSchema<{
|
|
3247
|
+
readonly type: v.LiteralSchema<"oauth2_client_credentials", undefined>;
|
|
3248
|
+
readonly tokenUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3249
|
+
readonly clientIdSecretRef: v.ObjectSchema<{
|
|
3250
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3251
|
+
}, undefined>;
|
|
3252
|
+
readonly clientSecretSecretRef: v.ObjectSchema<{
|
|
3253
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3254
|
+
}, undefined>;
|
|
3255
|
+
readonly scope: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3256
|
+
readonly audience: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3257
|
+
}, undefined>, v.ObjectSchema<{
|
|
3258
|
+
readonly type: v.LiteralSchema<"custom_headers", undefined>;
|
|
3259
|
+
readonly headers: v.ArraySchema<v.ObjectSchema<{
|
|
3260
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3261
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3262
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3263
|
+
}, undefined>;
|
|
3264
|
+
}, undefined>, undefined>;
|
|
3265
|
+
}, undefined>], undefined>;
|
|
3266
|
+
readonly provision: v.ObjectSchema<{
|
|
3267
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
3268
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3269
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3270
|
+
readonly key: v.StringSchema<undefined>;
|
|
3271
|
+
readonly value: v.StringSchema<undefined>;
|
|
3272
|
+
}, undefined>, undefined>, undefined>;
|
|
3273
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3274
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3275
|
+
readonly value: v.StringSchema<undefined>;
|
|
3276
|
+
}, undefined>, undefined>, undefined>;
|
|
3277
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3278
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
3279
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
3280
|
+
}, undefined>;
|
|
3281
|
+
/** Optional: polled to observe async provisioning progress. */
|
|
3282
|
+
readonly status: v.OptionalSchema<v.ObjectSchema<{
|
|
3283
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
3284
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3285
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3286
|
+
readonly key: v.StringSchema<undefined>;
|
|
3287
|
+
readonly value: v.StringSchema<undefined>;
|
|
3288
|
+
}, undefined>, undefined>, undefined>;
|
|
3289
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3290
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3291
|
+
readonly value: v.StringSchema<undefined>;
|
|
3292
|
+
}, undefined>, undefined>, undefined>;
|
|
3293
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3294
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
3295
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
3296
|
+
}, undefined>, undefined>;
|
|
3297
|
+
/** Optional: called to destroy the environment (manual or on TTL expiry). */
|
|
3298
|
+
readonly teardown: v.OptionalSchema<v.ObjectSchema<{
|
|
3299
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
3300
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3301
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3302
|
+
readonly key: v.StringSchema<undefined>;
|
|
3303
|
+
readonly value: v.StringSchema<undefined>;
|
|
3304
|
+
}, undefined>, undefined>, undefined>;
|
|
3305
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3306
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3307
|
+
readonly value: v.StringSchema<undefined>;
|
|
3308
|
+
}, undefined>, undefined>, undefined>;
|
|
3309
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3310
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
3311
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
3312
|
+
}, undefined>, undefined>;
|
|
3313
|
+
readonly response: v.ObjectSchema<{
|
|
3314
|
+
readonly urlPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3315
|
+
readonly statusPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3316
|
+
readonly statusMap: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3317
|
+
readonly from: v.StringSchema<undefined>;
|
|
3318
|
+
readonly to: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
|
|
3319
|
+
}, undefined>, undefined>, undefined>;
|
|
3320
|
+
readonly expiresAtPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3321
|
+
readonly externalIdPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3322
|
+
readonly access: v.OptionalSchema<v.ObjectSchema<{
|
|
3323
|
+
readonly scheme: v.PicklistSchema<["none", "bearer", "basic", "custom_header"], undefined>;
|
|
3324
|
+
readonly tokenPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3325
|
+
readonly usernamePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3326
|
+
readonly passwordPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3327
|
+
readonly headerName: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3328
|
+
readonly headerValuePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3329
|
+
}, undefined>, undefined>;
|
|
3330
|
+
}, undefined>;
|
|
3331
|
+
/** Fallback TTL (ms) when the response carries no explicit expiry. */
|
|
3332
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
3333
|
+
/**
|
|
3334
|
+
* Opaque, provider-specific configuration for a CUSTOM backend (e.g. a Kargo project,
|
|
3335
|
+
* link-selection key, status map). The generic HttpEnvironmentProvider ignores it
|
|
3336
|
+
* entirely; a custom backend — registered by reference into the app-owned
|
|
3337
|
+
* `EnvironmentBackendRegistry` (see `backend/docs/native-environment-adapter.md`) — reads
|
|
3338
|
+
* + validates it off the per-call
|
|
3339
|
+
* `manifest`. This is the per-WORKSPACE config carrier: a custom backend rides the generic
|
|
3340
|
+
* manifest member of `environmentBackendConfigSchema`, so its bespoke settings live here and
|
|
3341
|
+
* its credentials in the secret bundle. NOT covered by the manifest URL/SSRF checks (which
|
|
3342
|
+
* only guard `baseUrl`/`tokenUrl`); a backend that puts a URL here must guard it itself
|
|
3343
|
+
* (reuse the exported `UrlSafetyPolicy`).
|
|
3344
|
+
*/
|
|
3345
|
+
readonly providerConfig: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
3346
|
+
}, undefined>;
|
|
3347
|
+
/** Which custom manifest shape this remote provider consumes — matched to a service's `manifestId`. */
|
|
3348
|
+
readonly acceptsManifestId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3349
|
+
}, undefined>], undefined>;
|
|
3350
|
+
readonly backendKind: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3351
|
+
readonly secrets: v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>;
|
|
3352
|
+
}, undefined>;
|
|
3353
|
+
export type UpsertEnvironmentUserHandlerBody = v.InferOutput<typeof upsertEnvironmentUserHandlerBodySchema>;
|
|
3354
|
+
/** The batched per-type handler bundle: every workspace handler + the custom-type catalog. */
|
|
3355
|
+
export declare const environmentHandlersBundleSchema: v.ObjectSchema<{
|
|
3356
|
+
readonly handlers: v.ArraySchema<v.ObjectSchema<{
|
|
3357
|
+
readonly provisionType: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
|
|
3358
|
+
/** For `custom`: the manifest id this handler is keyed to; `null` otherwise. */
|
|
3359
|
+
readonly manifestId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
3360
|
+
readonly engine: v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "remote-custom", "none"], undefined>;
|
|
3361
|
+
readonly providerId: v.StringSchema<undefined>;
|
|
3362
|
+
readonly label: v.StringSchema<undefined>;
|
|
3363
|
+
readonly baseUrl: v.StringSchema<undefined>;
|
|
3364
|
+
readonly connectedAt: v.NumberSchema<undefined>;
|
|
3365
|
+
/** Which secret keys are set (names only), so the UI can show completeness. */
|
|
3366
|
+
readonly secretKeys: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
3367
|
+
/** For `remote-custom`: the manifest id this provider accepts; `null` otherwise. */
|
|
3368
|
+
readonly acceptsManifestId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
3369
|
+
/** The stored handler config, sans secrets, for connect-form prefill on edit. */
|
|
3370
|
+
readonly config: v.OptionalSchema<v.VariantSchema<"engine", [v.ObjectSchema<{
|
|
3371
|
+
readonly engine: v.LiteralSchema<"local-docker", undefined>;
|
|
3372
|
+
readonly manifest: v.ObjectSchema<{
|
|
3373
|
+
readonly providerId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3374
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
3375
|
+
/** Management API root; provision/status/teardown paths are appended to it. */
|
|
3376
|
+
readonly baseUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3377
|
+
readonly auth: v.VariantSchema<"type", [v.ObjectSchema<{
|
|
3378
|
+
readonly type: v.LiteralSchema<"none", undefined>;
|
|
3379
|
+
}, undefined>, v.ObjectSchema<{
|
|
3380
|
+
readonly type: v.LiteralSchema<"api_key", undefined>;
|
|
3381
|
+
readonly headerName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3382
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3383
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3384
|
+
}, undefined>;
|
|
3385
|
+
/** Optional prefix prepended to the secret value, e.g. `Token `. */
|
|
3386
|
+
readonly valuePrefix: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3387
|
+
}, undefined>, v.ObjectSchema<{
|
|
3388
|
+
readonly type: v.LiteralSchema<"bearer", undefined>;
|
|
3389
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3390
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3391
|
+
}, undefined>;
|
|
3392
|
+
}, undefined>, v.ObjectSchema<{
|
|
3393
|
+
readonly type: v.LiteralSchema<"basic", undefined>;
|
|
3394
|
+
readonly usernameSecretRef: v.ObjectSchema<{
|
|
3395
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3396
|
+
}, undefined>;
|
|
3397
|
+
readonly passwordSecretRef: v.ObjectSchema<{
|
|
3398
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3399
|
+
}, undefined>;
|
|
3400
|
+
}, undefined>, v.ObjectSchema<{
|
|
3401
|
+
readonly type: v.LiteralSchema<"oauth2_client_credentials", undefined>;
|
|
3402
|
+
readonly tokenUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3403
|
+
readonly clientIdSecretRef: v.ObjectSchema<{
|
|
3404
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3405
|
+
}, undefined>;
|
|
3406
|
+
readonly clientSecretSecretRef: v.ObjectSchema<{
|
|
3407
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3408
|
+
}, undefined>;
|
|
3409
|
+
readonly scope: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3410
|
+
readonly audience: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3411
|
+
}, undefined>, v.ObjectSchema<{
|
|
3412
|
+
readonly type: v.LiteralSchema<"custom_headers", undefined>;
|
|
3413
|
+
readonly headers: v.ArraySchema<v.ObjectSchema<{
|
|
3414
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3415
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3416
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3417
|
+
}, undefined>;
|
|
3418
|
+
}, undefined>, undefined>;
|
|
3419
|
+
}, undefined>], undefined>;
|
|
3420
|
+
readonly provision: v.ObjectSchema<{
|
|
3421
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
3422
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3423
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3424
|
+
readonly key: v.StringSchema<undefined>;
|
|
3425
|
+
readonly value: v.StringSchema<undefined>;
|
|
3426
|
+
}, undefined>, undefined>, undefined>;
|
|
3427
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3428
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3429
|
+
readonly value: v.StringSchema<undefined>;
|
|
3430
|
+
}, undefined>, undefined>, undefined>;
|
|
3431
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3432
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
3433
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
3434
|
+
}, undefined>;
|
|
3435
|
+
/** Optional: polled to observe async provisioning progress. */
|
|
3436
|
+
readonly status: v.OptionalSchema<v.ObjectSchema<{
|
|
3437
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
3438
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3439
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3440
|
+
readonly key: v.StringSchema<undefined>;
|
|
3441
|
+
readonly value: v.StringSchema<undefined>;
|
|
3442
|
+
}, undefined>, undefined>, undefined>;
|
|
3443
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3444
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3445
|
+
readonly value: v.StringSchema<undefined>;
|
|
3446
|
+
}, undefined>, undefined>, undefined>;
|
|
3447
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3448
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
3449
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
3450
|
+
}, undefined>, undefined>;
|
|
3451
|
+
/** Optional: called to destroy the environment (manual or on TTL expiry). */
|
|
3452
|
+
readonly teardown: v.OptionalSchema<v.ObjectSchema<{
|
|
3453
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
3454
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3455
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3456
|
+
readonly key: v.StringSchema<undefined>;
|
|
3457
|
+
readonly value: v.StringSchema<undefined>;
|
|
3458
|
+
}, undefined>, undefined>, undefined>;
|
|
3459
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3460
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3461
|
+
readonly value: v.StringSchema<undefined>;
|
|
3462
|
+
}, undefined>, undefined>, undefined>;
|
|
3463
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3464
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
3465
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
3466
|
+
}, undefined>, undefined>;
|
|
3467
|
+
readonly response: v.ObjectSchema<{
|
|
3468
|
+
readonly urlPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3469
|
+
readonly statusPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3470
|
+
readonly statusMap: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3471
|
+
readonly from: v.StringSchema<undefined>;
|
|
3472
|
+
readonly to: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
|
|
3473
|
+
}, undefined>, undefined>, undefined>;
|
|
3474
|
+
readonly expiresAtPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3475
|
+
readonly externalIdPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3476
|
+
readonly access: v.OptionalSchema<v.ObjectSchema<{
|
|
3477
|
+
readonly scheme: v.PicklistSchema<["none", "bearer", "basic", "custom_header"], undefined>;
|
|
3478
|
+
readonly tokenPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3479
|
+
readonly usernamePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3480
|
+
readonly passwordPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3481
|
+
readonly headerName: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3482
|
+
readonly headerValuePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3483
|
+
}, undefined>, undefined>;
|
|
3484
|
+
}, undefined>;
|
|
3485
|
+
/** Fallback TTL (ms) when the response carries no explicit expiry. */
|
|
3486
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
3487
|
+
/**
|
|
3488
|
+
* Opaque, provider-specific configuration for a CUSTOM backend (e.g. a Kargo project,
|
|
3489
|
+
* link-selection key, status map). The generic HttpEnvironmentProvider ignores it
|
|
3490
|
+
* entirely; a custom backend — registered by reference into the app-owned
|
|
3491
|
+
* `EnvironmentBackendRegistry` (see `backend/docs/native-environment-adapter.md`) — reads
|
|
3492
|
+
* + validates it off the per-call
|
|
3493
|
+
* `manifest`. This is the per-WORKSPACE config carrier: a custom backend rides the generic
|
|
3494
|
+
* manifest member of `environmentBackendConfigSchema`, so its bespoke settings live here and
|
|
3495
|
+
* its credentials in the secret bundle. NOT covered by the manifest URL/SSRF checks (which
|
|
3496
|
+
* only guard `baseUrl`/`tokenUrl`); a backend that puts a URL here must guard it itself
|
|
3497
|
+
* (reuse the exported `UrlSafetyPolicy`).
|
|
3498
|
+
*/
|
|
3499
|
+
readonly providerConfig: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
3500
|
+
}, undefined>;
|
|
3501
|
+
}, undefined>, v.ObjectSchema<{
|
|
3502
|
+
readonly engine: v.LiteralSchema<"local-k3s", undefined>;
|
|
3503
|
+
readonly kubernetes: v.ObjectSchema<{
|
|
3504
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
3505
|
+
/** kube-apiserver root URL, e.g. `https://my-cluster.example:6443`. */
|
|
3506
|
+
readonly apiServerUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3507
|
+
/** PEM CA bundle to verify the apiserver TLS cert (omit only for a publicly-trusted CA). */
|
|
3508
|
+
readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3509
|
+
/** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
|
|
3510
|
+
readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
3511
|
+
/**
|
|
3512
|
+
* Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. With
|
|
3513
|
+
* `renderer: 'kustomize'`, ABSENT ⇒ honor the overlay's own `namespace:` when it pins one
|
|
3514
|
+
* (the shared-namespace ephemeral-env shape, where base + overlay name a fixed namespace);
|
|
3515
|
+
* SET ⇒ override it (the adapter sets the namespace at build time) for true per-PR
|
|
3516
|
+
* isolation. For raw manifests, absent ⇒ a default derived from the PR number / block id.
|
|
3517
|
+
*/
|
|
3518
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
3519
|
+
/** How the environment URL is derived once applied. */
|
|
3520
|
+
readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
|
|
3521
|
+
readonly source: v.LiteralSchema<"ingressTemplate", undefined>;
|
|
3522
|
+
/** Host template, e.g. `{{branch}}.preview.example.com`; rendered with the provision vars. */
|
|
3523
|
+
readonly hostTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
3524
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3525
|
+
}, undefined>, v.ObjectSchema<{
|
|
3526
|
+
readonly source: v.LiteralSchema<"ingressStatus", undefined>;
|
|
3527
|
+
/** Ingress object to read `.status.loadBalancer` from; absent ⇒ the only Ingress applied. */
|
|
3528
|
+
readonly ingressName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3529
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3530
|
+
}, undefined>, v.ObjectSchema<{
|
|
3531
|
+
readonly source: v.LiteralSchema<"serviceStatus", undefined>;
|
|
3532
|
+
/** Service object to read `.status.loadBalancer` (k3s ServiceLB) from. */
|
|
3533
|
+
readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
|
|
3534
|
+
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>;
|
|
3535
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3536
|
+
}, undefined>, v.ObjectSchema<{
|
|
3537
|
+
readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
|
|
3538
|
+
/** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
|
|
3539
|
+
readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3540
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3541
|
+
}, undefined>, v.ObjectSchema<{
|
|
3542
|
+
readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
|
|
3543
|
+
/** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
|
|
3544
|
+
readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3545
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3546
|
+
}, undefined>], undefined>;
|
|
3547
|
+
/** Optional image reference made available to the manifests as `{{image}}`. */
|
|
3548
|
+
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
3549
|
+
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
3550
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
3551
|
+
/**
|
|
3552
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
3553
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Absent ⇒ the
|
|
3554
|
+
* harness default (180s). Merged into the provision config via `...kube` at provision time.
|
|
3555
|
+
*/
|
|
3556
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
3557
|
+
/** Extra labels stamped on the namespace + every applied resource. */
|
|
3558
|
+
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
3559
|
+
/** Extra annotations stamped on the namespace. */
|
|
3560
|
+
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
3561
|
+
/**
|
|
3562
|
+
* Workspace-level (cluster-singleton) helm releases the deploy adapter ensures before
|
|
3563
|
+
* applying a service's manifests — e.g. an ingress/gateway controller shared by every
|
|
3564
|
+
* per-PR env. Use `scope: 'shared'`; installed once, never torn down per-PR. Merged
|
|
3565
|
+
* with the service's own (per-environment) `helmReleases` at provision time.
|
|
3566
|
+
*/
|
|
3567
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3568
|
+
/** Release name. */
|
|
3569
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3570
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
3571
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3572
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
3573
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
3574
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
3575
|
+
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.">]>;
|
|
3576
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
3577
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
3578
|
+
/** Inline `--values` overrides. */
|
|
3579
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
3580
|
+
/** Templated `--set` overrides. */
|
|
3581
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3582
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
3583
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3584
|
+
/** The value, templated over the provision vars. */
|
|
3585
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3586
|
+
}, undefined>, undefined>, undefined>;
|
|
3587
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
3588
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3589
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3590
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3591
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3592
|
+
}, undefined>;
|
|
3593
|
+
}, undefined>, undefined>, undefined>;
|
|
3594
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
3595
|
+
}, undefined>, undefined>, undefined>;
|
|
3596
|
+
}, undefined>;
|
|
3597
|
+
}, undefined>, v.ObjectSchema<{
|
|
3598
|
+
readonly engine: v.LiteralSchema<"remote-kubernetes", undefined>;
|
|
3599
|
+
readonly kubernetes: v.ObjectSchema<{
|
|
3600
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
3601
|
+
/** kube-apiserver root URL, e.g. `https://my-cluster.example:6443`. */
|
|
3602
|
+
readonly apiServerUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3603
|
+
/** PEM CA bundle to verify the apiserver TLS cert (omit only for a publicly-trusted CA). */
|
|
3604
|
+
readonly caCertPem: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3605
|
+
/** Skip apiserver TLS verification — strongly discouraged; kind/dev clusters only. */
|
|
3606
|
+
readonly insecureSkipTlsVerify: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
3607
|
+
/**
|
|
3608
|
+
* Namespace name template for the per-PR environment, e.g. `cf-env-{{pullNumber}}`. With
|
|
3609
|
+
* `renderer: 'kustomize'`, ABSENT ⇒ honor the overlay's own `namespace:` when it pins one
|
|
3610
|
+
* (the shared-namespace ephemeral-env shape, where base + overlay name a fixed namespace);
|
|
3611
|
+
* SET ⇒ override it (the adapter sets the namespace at build time) for true per-PR
|
|
3612
|
+
* isolation. For raw manifests, absent ⇒ a default derived from the PR number / block id.
|
|
3613
|
+
*/
|
|
3614
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
3615
|
+
/** How the environment URL is derived once applied. */
|
|
3616
|
+
readonly url: v.VariantSchema<"source", [v.ObjectSchema<{
|
|
3617
|
+
readonly source: v.LiteralSchema<"ingressTemplate", undefined>;
|
|
3618
|
+
/** Host template, e.g. `{{branch}}.preview.example.com`; rendered with the provision vars. */
|
|
3619
|
+
readonly hostTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
3620
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3621
|
+
}, undefined>, v.ObjectSchema<{
|
|
3622
|
+
readonly source: v.LiteralSchema<"ingressStatus", undefined>;
|
|
3623
|
+
/** Ingress object to read `.status.loadBalancer` from; absent ⇒ the only Ingress applied. */
|
|
3624
|
+
readonly ingressName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3625
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3626
|
+
}, undefined>, v.ObjectSchema<{
|
|
3627
|
+
readonly source: v.LiteralSchema<"serviceStatus", undefined>;
|
|
3628
|
+
/** Service object to read `.status.loadBalancer` (k3s ServiceLB) from. */
|
|
3629
|
+
readonly serviceName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
|
|
3630
|
+
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>;
|
|
3631
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3632
|
+
}, undefined>, v.ObjectSchema<{
|
|
3633
|
+
readonly source: v.LiteralSchema<"gatewayStatus", undefined>;
|
|
3634
|
+
/** Gateway-API `Gateway` to read `.status.addresses[]` from; absent ⇒ the only one applied. */
|
|
3635
|
+
readonly gatewayName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3636
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3637
|
+
}, undefined>, v.ObjectSchema<{
|
|
3638
|
+
readonly source: v.LiteralSchema<"httpRouteStatus", undefined>;
|
|
3639
|
+
/** `HTTPRoute` whose `parentRefs` resolve to the Gateway address; absent ⇒ the only one applied. */
|
|
3640
|
+
readonly httpRouteName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
3641
|
+
readonly scheme: v.OptionalSchema<v.PicklistSchema<["http", "https"], undefined>, undefined>;
|
|
3642
|
+
}, undefined>], undefined>;
|
|
3643
|
+
/** Optional image reference made available to the manifests as `{{image}}`. */
|
|
3644
|
+
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
3645
|
+
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
3646
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
3647
|
+
/**
|
|
3648
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
3649
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Absent ⇒ the
|
|
3650
|
+
* harness default (180s). Merged into the provision config via `...kube` at provision time.
|
|
3651
|
+
*/
|
|
3652
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
3653
|
+
/** Extra labels stamped on the namespace + every applied resource. */
|
|
3654
|
+
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
3655
|
+
/** Extra annotations stamped on the namespace. */
|
|
3656
|
+
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
3657
|
+
/**
|
|
3658
|
+
* Workspace-level (cluster-singleton) helm releases the deploy adapter ensures before
|
|
3659
|
+
* applying a service's manifests — e.g. an ingress/gateway controller shared by every
|
|
3660
|
+
* per-PR env. Use `scope: 'shared'`; installed once, never torn down per-PR. Merged
|
|
3661
|
+
* with the service's own (per-environment) `helmReleases` at provision time.
|
|
3662
|
+
*/
|
|
3663
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3664
|
+
/** Release name. */
|
|
3665
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3666
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
3667
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3668
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
3669
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
3670
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
3671
|
+
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.">]>;
|
|
3672
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
3673
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
3674
|
+
/** Inline `--values` overrides. */
|
|
3675
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
3676
|
+
/** Templated `--set` overrides. */
|
|
3677
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3678
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
3679
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3680
|
+
/** The value, templated over the provision vars. */
|
|
3681
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3682
|
+
}, undefined>, undefined>, undefined>;
|
|
3683
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
3684
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3685
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3686
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3687
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3688
|
+
}, undefined>;
|
|
3689
|
+
}, undefined>, undefined>, undefined>;
|
|
3690
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
3691
|
+
}, undefined>, undefined>, undefined>;
|
|
3692
|
+
}, undefined>;
|
|
3693
|
+
}, undefined>, v.ObjectSchema<{
|
|
3694
|
+
readonly engine: v.LiteralSchema<"remote-custom", undefined>;
|
|
3695
|
+
readonly manifest: v.ObjectSchema<{
|
|
3696
|
+
readonly providerId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3697
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
3698
|
+
/** Management API root; provision/status/teardown paths are appended to it. */
|
|
3699
|
+
readonly baseUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3700
|
+
readonly auth: v.VariantSchema<"type", [v.ObjectSchema<{
|
|
3701
|
+
readonly type: v.LiteralSchema<"none", undefined>;
|
|
3702
|
+
}, undefined>, v.ObjectSchema<{
|
|
3703
|
+
readonly type: v.LiteralSchema<"api_key", undefined>;
|
|
3704
|
+
readonly headerName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3705
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3706
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3707
|
+
}, undefined>;
|
|
3708
|
+
/** Optional prefix prepended to the secret value, e.g. `Token `. */
|
|
3709
|
+
readonly valuePrefix: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3710
|
+
}, undefined>, v.ObjectSchema<{
|
|
3711
|
+
readonly type: v.LiteralSchema<"bearer", undefined>;
|
|
3712
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3713
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3714
|
+
}, undefined>;
|
|
3715
|
+
}, undefined>, v.ObjectSchema<{
|
|
3716
|
+
readonly type: v.LiteralSchema<"basic", undefined>;
|
|
3717
|
+
readonly usernameSecretRef: v.ObjectSchema<{
|
|
3718
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3719
|
+
}, undefined>;
|
|
3720
|
+
readonly passwordSecretRef: v.ObjectSchema<{
|
|
3721
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3722
|
+
}, undefined>;
|
|
3723
|
+
}, undefined>, v.ObjectSchema<{
|
|
3724
|
+
readonly type: v.LiteralSchema<"oauth2_client_credentials", undefined>;
|
|
3725
|
+
readonly tokenUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3726
|
+
readonly clientIdSecretRef: v.ObjectSchema<{
|
|
3727
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3728
|
+
}, undefined>;
|
|
3729
|
+
readonly clientSecretSecretRef: v.ObjectSchema<{
|
|
3730
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3731
|
+
}, undefined>;
|
|
3732
|
+
readonly scope: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3733
|
+
readonly audience: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3734
|
+
}, undefined>, v.ObjectSchema<{
|
|
3735
|
+
readonly type: v.LiteralSchema<"custom_headers", undefined>;
|
|
3736
|
+
readonly headers: v.ArraySchema<v.ObjectSchema<{
|
|
3737
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3738
|
+
readonly secretRef: v.ObjectSchema<{
|
|
3739
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3740
|
+
}, undefined>;
|
|
3741
|
+
}, undefined>, undefined>;
|
|
3742
|
+
}, undefined>], undefined>;
|
|
3743
|
+
readonly provision: v.ObjectSchema<{
|
|
3744
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
3745
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3746
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3747
|
+
readonly key: v.StringSchema<undefined>;
|
|
3748
|
+
readonly value: v.StringSchema<undefined>;
|
|
3749
|
+
}, undefined>, undefined>, undefined>;
|
|
3750
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3751
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3752
|
+
readonly value: v.StringSchema<undefined>;
|
|
3753
|
+
}, undefined>, undefined>, undefined>;
|
|
3754
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3755
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
3756
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
3757
|
+
}, undefined>;
|
|
3758
|
+
/** Optional: polled to observe async provisioning progress. */
|
|
3759
|
+
readonly status: v.OptionalSchema<v.ObjectSchema<{
|
|
3760
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
3761
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3762
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3763
|
+
readonly key: v.StringSchema<undefined>;
|
|
3764
|
+
readonly value: v.StringSchema<undefined>;
|
|
3765
|
+
}, undefined>, undefined>, undefined>;
|
|
3766
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3767
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3768
|
+
readonly value: v.StringSchema<undefined>;
|
|
3769
|
+
}, undefined>, undefined>, undefined>;
|
|
3770
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3771
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
3772
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
3773
|
+
}, undefined>, undefined>;
|
|
3774
|
+
/** Optional: called to destroy the environment (manual or on TTL expiry). */
|
|
3775
|
+
readonly teardown: v.OptionalSchema<v.ObjectSchema<{
|
|
3776
|
+
readonly method: v.PicklistSchema<["GET", "POST", "PUT", "PATCH", "DELETE"], undefined>;
|
|
3777
|
+
readonly pathTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
3778
|
+
readonly query: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3779
|
+
readonly key: v.StringSchema<undefined>;
|
|
3780
|
+
readonly value: v.StringSchema<undefined>;
|
|
3781
|
+
}, undefined>, undefined>, undefined>;
|
|
3782
|
+
readonly headers: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3783
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
3784
|
+
readonly value: v.StringSchema<undefined>;
|
|
3785
|
+
}, undefined>, undefined>, undefined>;
|
|
3786
|
+
readonly bodyTemplate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3787
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
3788
|
+
readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
|
|
3789
|
+
}, undefined>, undefined>;
|
|
3790
|
+
readonly response: v.ObjectSchema<{
|
|
3791
|
+
readonly urlPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3792
|
+
readonly statusPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3793
|
+
readonly statusMap: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
3794
|
+
readonly from: v.StringSchema<undefined>;
|
|
3795
|
+
readonly to: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
|
|
3796
|
+
}, undefined>, undefined>, undefined>;
|
|
3797
|
+
readonly expiresAtPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3798
|
+
readonly externalIdPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3799
|
+
readonly access: v.OptionalSchema<v.ObjectSchema<{
|
|
3800
|
+
readonly scheme: v.PicklistSchema<["none", "bearer", "basic", "custom_header"], undefined>;
|
|
3801
|
+
readonly tokenPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3802
|
+
readonly usernamePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3803
|
+
readonly passwordPath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3804
|
+
readonly headerName: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3805
|
+
readonly headerValuePath: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3806
|
+
}, undefined>, undefined>;
|
|
3807
|
+
}, undefined>;
|
|
3808
|
+
/** Fallback TTL (ms) when the response carries no explicit expiry. */
|
|
3809
|
+
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
3810
|
+
/**
|
|
3811
|
+
* Opaque, provider-specific configuration for a CUSTOM backend (e.g. a Kargo project,
|
|
3812
|
+
* link-selection key, status map). The generic HttpEnvironmentProvider ignores it
|
|
3813
|
+
* entirely; a custom backend — registered by reference into the app-owned
|
|
3814
|
+
* `EnvironmentBackendRegistry` (see `backend/docs/native-environment-adapter.md`) — reads
|
|
3815
|
+
* + validates it off the per-call
|
|
3816
|
+
* `manifest`. This is the per-WORKSPACE config carrier: a custom backend rides the generic
|
|
3817
|
+
* manifest member of `environmentBackendConfigSchema`, so its bespoke settings live here and
|
|
3818
|
+
* its credentials in the secret bundle. NOT covered by the manifest URL/SSRF checks (which
|
|
3819
|
+
* only guard `baseUrl`/`tokenUrl`); a backend that puts a URL here must guard it itself
|
|
3820
|
+
* (reuse the exported `UrlSafetyPolicy`).
|
|
3821
|
+
*/
|
|
3822
|
+
readonly providerConfig: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
3823
|
+
}, undefined>;
|
|
3824
|
+
/** Which custom manifest shape this remote provider consumes — matched to a service's `manifestId`. */
|
|
3825
|
+
readonly acceptsManifestId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3826
|
+
}, undefined>], undefined>, undefined>;
|
|
3827
|
+
}, undefined>, undefined>;
|
|
3828
|
+
readonly customTypes: v.ArraySchema<v.ObjectSchema<{
|
|
3829
|
+
readonly manifestId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
3830
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
3831
|
+
/** `registered` (from a code provider) or `workspace` (UI-defined). */
|
|
3832
|
+
readonly source: v.PicklistSchema<["registered", "workspace"], undefined>;
|
|
3833
|
+
/** Optional hint describing the input shape the provider expects. */
|
|
3834
|
+
readonly acceptsInputHint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
3835
|
+
readonly description: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
3836
|
+
}, undefined>, undefined>;
|
|
3837
|
+
}, undefined>;
|
|
3838
|
+
export type EnvironmentHandlersBundle = v.InferOutput<typeof environmentHandlersBundleSchema>;
|
|
3839
|
+
/** Resolved access creds for a provisioned env, as surfaced to a tester agent. */
|
|
3840
|
+
export declare const environmentAccessHandleSchema: v.ObjectSchema<{
|
|
3841
|
+
readonly scheme: v.PicklistSchema<["none", "bearer", "basic", "custom_header"], undefined>;
|
|
3842
|
+
readonly token: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3843
|
+
readonly username: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3844
|
+
readonly password: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3845
|
+
readonly headerName: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3846
|
+
readonly headerValue: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3847
|
+
}, undefined>;
|
|
3848
|
+
export type EnvironmentAccessHandle = v.InferOutput<typeof environmentAccessHandleSchema>;
|
|
3849
|
+
/** A provisioned environment, as exposed to clients and downstream agents. */
|
|
3850
|
+
export declare const environmentHandleSchema: v.ObjectSchema<{
|
|
3851
|
+
readonly id: v.StringSchema<undefined>;
|
|
3852
|
+
readonly workspaceId: v.StringSchema<undefined>;
|
|
3853
|
+
readonly blockId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
3854
|
+
readonly executionId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
3855
|
+
readonly providerId: v.StringSchema<undefined>;
|
|
3856
|
+
readonly externalId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
3857
|
+
readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
3858
|
+
readonly status: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
|
|
3859
|
+
/** Present only on the dedicated access endpoint / in agent context. */
|
|
3860
|
+
readonly access: v.OptionalSchema<v.ObjectSchema<{
|
|
3861
|
+
readonly scheme: v.PicklistSchema<["none", "bearer", "basic", "custom_header"], undefined>;
|
|
3862
|
+
readonly token: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3863
|
+
readonly username: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3864
|
+
readonly password: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3865
|
+
readonly headerName: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3866
|
+
readonly headerValue: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
3867
|
+
}, undefined>, undefined>;
|
|
3868
|
+
readonly createdAt: v.NumberSchema<undefined>;
|
|
3869
|
+
readonly expiresAt: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
|
|
3870
|
+
readonly lastError: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
3871
|
+
/**
|
|
3872
|
+
* The service's declared provision type this environment was stood up for
|
|
3873
|
+
* (`kubernetes` | `docker-compose` | `custom` | `infraless`). Recorded at provision
|
|
3874
|
+
* time so run details can show exactly what was provisioned. Null for legacy rows.
|
|
3875
|
+
*/
|
|
1662
3876
|
readonly provisionType: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>, undefined>, undefined>;
|
|
1663
3877
|
/**
|
|
1664
3878
|
* The resolved engine that handled the provisioning (`local-docker` | `local-k3s` |
|
|
@@ -1882,10 +4096,115 @@ export declare const environmentConnectionSchema: v.ObjectSchema<{
|
|
|
1882
4096
|
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
1883
4097
|
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
1884
4098
|
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
4099
|
+
/**
|
|
4100
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
4101
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Only the
|
|
4102
|
+
* container-backed render path honors it; absent ⇒ the harness default (180s).
|
|
4103
|
+
*/
|
|
4104
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
1885
4105
|
/** Extra labels stamped on the namespace + every applied resource. */
|
|
1886
4106
|
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
1887
4107
|
/** Extra annotations stamped on the namespace. */
|
|
1888
4108
|
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
4109
|
+
/** Structured image overrides (the kustomize `images:` shape), templated over provision vars. */
|
|
4110
|
+
readonly images: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
4111
|
+
/** The image to match (the `name:` in a kustomization `images:` entry), e.g. `registry/app`. */
|
|
4112
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4113
|
+
/** Optional replacement repo, templated; absent ⇒ keep the original repo. */
|
|
4114
|
+
readonly newNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
4115
|
+
/** Replacement tag, templated (e.g. `{{branch}}` / `{{sha}}`); mutually exclusive with digest. */
|
|
4116
|
+
readonly newTagTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
4117
|
+
/** Replacement digest, templated; alternative to a tag. */
|
|
4118
|
+
readonly digestTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
4119
|
+
}, undefined>, v.CheckAction<{
|
|
4120
|
+
name: string;
|
|
4121
|
+
newNameTemplate?: string | undefined;
|
|
4122
|
+
newTagTemplate?: string | undefined;
|
|
4123
|
+
digestTemplate?: string | undefined;
|
|
4124
|
+
}, "an image override must set at least one of newNameTemplate, newTagTemplate, or digestTemplate.">, v.CheckAction<{
|
|
4125
|
+
name: string;
|
|
4126
|
+
newNameTemplate?: string | undefined;
|
|
4127
|
+
newTagTemplate?: string | undefined;
|
|
4128
|
+
digestTemplate?: string | undefined;
|
|
4129
|
+
}, "newTagTemplate and digestTemplate are mutually exclusive on an image override.">]>, undefined>, undefined>;
|
|
4130
|
+
/** Helm releases to install — workspace-shared singletons merged with the service's per-env ones. */
|
|
4131
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
4132
|
+
/** Release name. */
|
|
4133
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4134
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
4135
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4136
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
4137
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
4138
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
4139
|
+
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.">]>;
|
|
4140
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
4141
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
4142
|
+
/** Inline `--values` overrides. */
|
|
4143
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
4144
|
+
/** Templated `--set` overrides. */
|
|
4145
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
4146
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
4147
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4148
|
+
/** The value, templated over the provision vars. */
|
|
4149
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
4150
|
+
}, undefined>, undefined>, undefined>;
|
|
4151
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
4152
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
4153
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4154
|
+
readonly secretRef: v.ObjectSchema<{
|
|
4155
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
4156
|
+
}, undefined>;
|
|
4157
|
+
}, undefined>, undefined>, undefined>;
|
|
4158
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
4159
|
+
}, undefined>, undefined>, undefined>;
|
|
4160
|
+
/** Secrets fed in before apply (a `Secret` resource or a `secretGenerator` `.env`). */
|
|
4161
|
+
readonly secretInjections: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"mode", [v.ObjectSchema<{
|
|
4162
|
+
readonly mode: v.LiteralSchema<"secret", undefined>;
|
|
4163
|
+
/** Target Secret name in the namespace. */
|
|
4164
|
+
readonly secretName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4165
|
+
/** Secret `type`; absent ⇒ `Opaque`. */
|
|
4166
|
+
readonly secretType: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
4167
|
+
readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
4168
|
+
/** Key inside the rendered Secret / `.env`. */
|
|
4169
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
|
|
4170
|
+
/** Resolve the value from the workspace encrypted bundle by key. */
|
|
4171
|
+
readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
|
|
4172
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
4173
|
+
}, undefined>, undefined>;
|
|
4174
|
+
/** OR a non-secret value, templated over the provision vars. */
|
|
4175
|
+
readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
4176
|
+
}, undefined>, v.CheckAction<{
|
|
4177
|
+
key: string;
|
|
4178
|
+
secretRef?: {
|
|
4179
|
+
key: string;
|
|
4180
|
+
} | undefined;
|
|
4181
|
+
valueTemplate?: string | undefined;
|
|
4182
|
+
}, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
|
|
4183
|
+
}, undefined>, v.ObjectSchema<{
|
|
4184
|
+
readonly mode: v.LiteralSchema<"generatorEnvFile", undefined>;
|
|
4185
|
+
/**
|
|
4186
|
+
* Repo-relative path within the overlay tree to write the `KEY=value` env file the
|
|
4187
|
+
* overlay's `secretGenerator` reads (e.g. `overlays/<env>/<component>/.env`). The
|
|
4188
|
+
* overlay names the Secret.
|
|
4189
|
+
*/
|
|
4190
|
+
readonly envFilePath: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
4191
|
+
readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
4192
|
+
/** Key inside the rendered Secret / `.env`. */
|
|
4193
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
|
|
4194
|
+
/** Resolve the value from the workspace encrypted bundle by key. */
|
|
4195
|
+
readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
|
|
4196
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
4197
|
+
}, undefined>, undefined>;
|
|
4198
|
+
/** OR a non-secret value, templated over the provision vars. */
|
|
4199
|
+
readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
4200
|
+
}, undefined>, v.CheckAction<{
|
|
4201
|
+
key: string;
|
|
4202
|
+
secretRef?: {
|
|
4203
|
+
key: string;
|
|
4204
|
+
} | undefined;
|
|
4205
|
+
valueTemplate?: string | undefined;
|
|
4206
|
+
}, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
|
|
4207
|
+
}, undefined>], undefined>, undefined>, undefined>;
|
|
1889
4208
|
}, undefined>;
|
|
1890
4209
|
}, undefined>, v.ObjectSchema<{
|
|
1891
4210
|
readonly kind: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>, v.RegexAction<string, "must be a lower-kebab slug">, v.CheckAction<string, "reserved backend kind">]>;
|
|
@@ -2229,10 +4548,115 @@ export declare const registerEnvironmentProviderSchema: v.ObjectSchema<{
|
|
|
2229
4548
|
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
2230
4549
|
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
2231
4550
|
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
4551
|
+
/**
|
|
4552
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
4553
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Only the
|
|
4554
|
+
* container-backed render path honors it; absent ⇒ the harness default (180s).
|
|
4555
|
+
*/
|
|
4556
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
2232
4557
|
/** Extra labels stamped on the namespace + every applied resource. */
|
|
2233
4558
|
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
2234
4559
|
/** Extra annotations stamped on the namespace. */
|
|
2235
4560
|
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
4561
|
+
/** Structured image overrides (the kustomize `images:` shape), templated over provision vars. */
|
|
4562
|
+
readonly images: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
4563
|
+
/** The image to match (the `name:` in a kustomization `images:` entry), e.g. `registry/app`. */
|
|
4564
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4565
|
+
/** Optional replacement repo, templated; absent ⇒ keep the original repo. */
|
|
4566
|
+
readonly newNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
4567
|
+
/** Replacement tag, templated (e.g. `{{branch}}` / `{{sha}}`); mutually exclusive with digest. */
|
|
4568
|
+
readonly newTagTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
4569
|
+
/** Replacement digest, templated; alternative to a tag. */
|
|
4570
|
+
readonly digestTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
4571
|
+
}, undefined>, v.CheckAction<{
|
|
4572
|
+
name: string;
|
|
4573
|
+
newNameTemplate?: string | undefined;
|
|
4574
|
+
newTagTemplate?: string | undefined;
|
|
4575
|
+
digestTemplate?: string | undefined;
|
|
4576
|
+
}, "an image override must set at least one of newNameTemplate, newTagTemplate, or digestTemplate.">, v.CheckAction<{
|
|
4577
|
+
name: string;
|
|
4578
|
+
newNameTemplate?: string | undefined;
|
|
4579
|
+
newTagTemplate?: string | undefined;
|
|
4580
|
+
digestTemplate?: string | undefined;
|
|
4581
|
+
}, "newTagTemplate and digestTemplate are mutually exclusive on an image override.">]>, undefined>, undefined>;
|
|
4582
|
+
/** Helm releases to install — workspace-shared singletons merged with the service's per-env ones. */
|
|
4583
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
4584
|
+
/** Release name. */
|
|
4585
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4586
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
4587
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4588
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
4589
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
4590
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
4591
|
+
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.">]>;
|
|
4592
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
4593
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
4594
|
+
/** Inline `--values` overrides. */
|
|
4595
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
4596
|
+
/** Templated `--set` overrides. */
|
|
4597
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
4598
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
4599
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4600
|
+
/** The value, templated over the provision vars. */
|
|
4601
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
4602
|
+
}, undefined>, undefined>, undefined>;
|
|
4603
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
4604
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
4605
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4606
|
+
readonly secretRef: v.ObjectSchema<{
|
|
4607
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
4608
|
+
}, undefined>;
|
|
4609
|
+
}, undefined>, undefined>, undefined>;
|
|
4610
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
4611
|
+
}, undefined>, undefined>, undefined>;
|
|
4612
|
+
/** Secrets fed in before apply (a `Secret` resource or a `secretGenerator` `.env`). */
|
|
4613
|
+
readonly secretInjections: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"mode", [v.ObjectSchema<{
|
|
4614
|
+
readonly mode: v.LiteralSchema<"secret", undefined>;
|
|
4615
|
+
/** Target Secret name in the namespace. */
|
|
4616
|
+
readonly secretName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
4617
|
+
/** Secret `type`; absent ⇒ `Opaque`. */
|
|
4618
|
+
readonly secretType: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
4619
|
+
readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
4620
|
+
/** Key inside the rendered Secret / `.env`. */
|
|
4621
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
|
|
4622
|
+
/** Resolve the value from the workspace encrypted bundle by key. */
|
|
4623
|
+
readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
|
|
4624
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
4625
|
+
}, undefined>, undefined>;
|
|
4626
|
+
/** OR a non-secret value, templated over the provision vars. */
|
|
4627
|
+
readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
4628
|
+
}, undefined>, v.CheckAction<{
|
|
4629
|
+
key: string;
|
|
4630
|
+
secretRef?: {
|
|
4631
|
+
key: string;
|
|
4632
|
+
} | undefined;
|
|
4633
|
+
valueTemplate?: string | undefined;
|
|
4634
|
+
}, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
|
|
4635
|
+
}, undefined>, v.ObjectSchema<{
|
|
4636
|
+
readonly mode: v.LiteralSchema<"generatorEnvFile", undefined>;
|
|
4637
|
+
/**
|
|
4638
|
+
* Repo-relative path within the overlay tree to write the `KEY=value` env file the
|
|
4639
|
+
* overlay's `secretGenerator` reads (e.g. `overlays/<env>/<component>/.env`). The
|
|
4640
|
+
* overlay names the Secret.
|
|
4641
|
+
*/
|
|
4642
|
+
readonly envFilePath: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
4643
|
+
readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
4644
|
+
/** Key inside the rendered Secret / `.env`. */
|
|
4645
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
|
|
4646
|
+
/** Resolve the value from the workspace encrypted bundle by key. */
|
|
4647
|
+
readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
|
|
4648
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
4649
|
+
}, undefined>, undefined>;
|
|
4650
|
+
/** OR a non-secret value, templated over the provision vars. */
|
|
4651
|
+
readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
4652
|
+
}, undefined>, v.CheckAction<{
|
|
4653
|
+
key: string;
|
|
4654
|
+
secretRef?: {
|
|
4655
|
+
key: string;
|
|
4656
|
+
} | undefined;
|
|
4657
|
+
valueTemplate?: string | undefined;
|
|
4658
|
+
}, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
|
|
4659
|
+
}, undefined>], undefined>, undefined>, undefined>;
|
|
2236
4660
|
}, undefined>;
|
|
2237
4661
|
}, undefined>, v.ObjectSchema<{
|
|
2238
4662
|
readonly kind: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>, v.RegexAction<string, "must be a lower-kebab slug">, v.CheckAction<string, "reserved backend kind">]>;
|
|
@@ -2578,10 +5002,115 @@ export declare const testEnvironmentConnectionSchema: v.ObjectSchema<{
|
|
|
2578
5002
|
readonly imageTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
2579
5003
|
/** Fallback TTL (ms) after which the env is swept + torn down. */
|
|
2580
5004
|
readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
|
|
5005
|
+
/**
|
|
5006
|
+
* How long (seconds) the container deploy adapter waits for each Deployment to roll out
|
|
5007
|
+
* before reporting the env still `provisioning` (the backend keeps polling). Only the
|
|
5008
|
+
* container-backed render path honors it; absent ⇒ the harness default (180s).
|
|
5009
|
+
*/
|
|
5010
|
+
readonly rolloutTimeoutSeconds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
2581
5011
|
/** Extra labels stamped on the namespace + every applied resource. */
|
|
2582
5012
|
readonly labels: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
2583
5013
|
/** Extra annotations stamped on the namespace. */
|
|
2584
5014
|
readonly annotations: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
|
|
5015
|
+
/** Structured image overrides (the kustomize `images:` shape), templated over provision vars. */
|
|
5016
|
+
readonly images: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
5017
|
+
/** The image to match (the `name:` in a kustomization `images:` entry), e.g. `registry/app`. */
|
|
5018
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
5019
|
+
/** Optional replacement repo, templated; absent ⇒ keep the original repo. */
|
|
5020
|
+
readonly newNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
5021
|
+
/** Replacement tag, templated (e.g. `{{branch}}` / `{{sha}}`); mutually exclusive with digest. */
|
|
5022
|
+
readonly newTagTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
5023
|
+
/** Replacement digest, templated; alternative to a tag. */
|
|
5024
|
+
readonly digestTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
5025
|
+
}, undefined>, v.CheckAction<{
|
|
5026
|
+
name: string;
|
|
5027
|
+
newNameTemplate?: string | undefined;
|
|
5028
|
+
newTagTemplate?: string | undefined;
|
|
5029
|
+
digestTemplate?: string | undefined;
|
|
5030
|
+
}, "an image override must set at least one of newNameTemplate, newTagTemplate, or digestTemplate.">, v.CheckAction<{
|
|
5031
|
+
name: string;
|
|
5032
|
+
newNameTemplate?: string | undefined;
|
|
5033
|
+
newTagTemplate?: string | undefined;
|
|
5034
|
+
digestTemplate?: string | undefined;
|
|
5035
|
+
}, "newTagTemplate and digestTemplate are mutually exclusive on an image override.">]>, undefined>, undefined>;
|
|
5036
|
+
/** Helm releases to install — workspace-shared singletons merged with the service's per-env ones. */
|
|
5037
|
+
readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
5038
|
+
/** Release name. */
|
|
5039
|
+
readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
5040
|
+
/** Chart ref: an OCI ref (`oci://…`) or, with `repo`, a `repo/chart` name. */
|
|
5041
|
+
readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
5042
|
+
/** Chart repo URL; absent ⇒ `chart` is an OCI ref. */
|
|
5043
|
+
readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
5044
|
+
/** PINNED chart version, e.g. `1.2.3` / `v1.2.3` (floating tags like `latest`/`^1.0` rejected). */
|
|
5045
|
+
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.">]>;
|
|
5046
|
+
/** Namespace to install into, templated; absent ⇒ the environment namespace. */
|
|
5047
|
+
readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
5048
|
+
/** Inline `--values` overrides. */
|
|
5049
|
+
readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
5050
|
+
/** Templated `--set` overrides. */
|
|
5051
|
+
readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
5052
|
+
/** Dotted `--set` path, e.g. `config.rateLimit.enabled`. */
|
|
5053
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
5054
|
+
/** The value, templated over the provision vars. */
|
|
5055
|
+
readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
5056
|
+
}, undefined>, undefined>, undefined>;
|
|
5057
|
+
/** Secret-bundle-backed values folded in at provision time (`--set <path>=<secret>`). */
|
|
5058
|
+
readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
5059
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
5060
|
+
readonly secretRef: v.ObjectSchema<{
|
|
5061
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
5062
|
+
}, undefined>;
|
|
5063
|
+
}, undefined>, undefined>, undefined>;
|
|
5064
|
+
readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
|
|
5065
|
+
}, undefined>, undefined>, undefined>;
|
|
5066
|
+
/** Secrets fed in before apply (a `Secret` resource or a `secretGenerator` `.env`). */
|
|
5067
|
+
readonly secretInjections: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"mode", [v.ObjectSchema<{
|
|
5068
|
+
readonly mode: v.LiteralSchema<"secret", undefined>;
|
|
5069
|
+
/** Target Secret name in the namespace. */
|
|
5070
|
+
readonly secretName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
5071
|
+
/** Secret `type`; absent ⇒ `Opaque`. */
|
|
5072
|
+
readonly secretType: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
5073
|
+
readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
5074
|
+
/** Key inside the rendered Secret / `.env`. */
|
|
5075
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
|
|
5076
|
+
/** Resolve the value from the workspace encrypted bundle by key. */
|
|
5077
|
+
readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
|
|
5078
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
5079
|
+
}, undefined>, undefined>;
|
|
5080
|
+
/** OR a non-secret value, templated over the provision vars. */
|
|
5081
|
+
readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
5082
|
+
}, undefined>, v.CheckAction<{
|
|
5083
|
+
key: string;
|
|
5084
|
+
secretRef?: {
|
|
5085
|
+
key: string;
|
|
5086
|
+
} | undefined;
|
|
5087
|
+
valueTemplate?: string | undefined;
|
|
5088
|
+
}, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
|
|
5089
|
+
}, undefined>, v.ObjectSchema<{
|
|
5090
|
+
readonly mode: v.LiteralSchema<"generatorEnvFile", undefined>;
|
|
5091
|
+
/**
|
|
5092
|
+
* Repo-relative path within the overlay tree to write the `KEY=value` env file the
|
|
5093
|
+
* overlay's `secretGenerator` reads (e.g. `overlays/<env>/<component>/.env`). The
|
|
5094
|
+
* overlay names the Secret.
|
|
5095
|
+
*/
|
|
5096
|
+
readonly envFilePath: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
5097
|
+
readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
5098
|
+
/** Key inside the rendered Secret / `.env`. */
|
|
5099
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
|
|
5100
|
+
/** Resolve the value from the workspace encrypted bundle by key. */
|
|
5101
|
+
readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
|
|
5102
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
|
|
5103
|
+
}, undefined>, undefined>;
|
|
5104
|
+
/** OR a non-secret value, templated over the provision vars. */
|
|
5105
|
+
readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
|
|
5106
|
+
}, undefined>, v.CheckAction<{
|
|
5107
|
+
key: string;
|
|
5108
|
+
secretRef?: {
|
|
5109
|
+
key: string;
|
|
5110
|
+
} | undefined;
|
|
5111
|
+
valueTemplate?: string | undefined;
|
|
5112
|
+
}, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
|
|
5113
|
+
}, undefined>], undefined>, undefined>, undefined>;
|
|
2585
5114
|
}, undefined>;
|
|
2586
5115
|
}, undefined>, v.ObjectSchema<{
|
|
2587
5116
|
readonly kind: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>, v.RegexAction<string, "must be a lower-kebab slug">, v.CheckAction<string, "reserved backend kind">]>;
|