@opensoha/contracts 0.1.17 → 0.1.19

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.
Files changed (275) hide show
  1. package/COMPATIBILITY.md +72 -0
  2. package/README.md +38 -0
  3. package/auth/catalog_generated.go +2 -2
  4. package/auth/outpost_headers.go +17 -0
  5. package/auth/outpost_headers_test.go +16 -0
  6. package/auth/permission-catalog.json +383 -1
  7. package/compat/consumer-revisions.json +7 -0
  8. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  9. package/compat/openapi-loose-boundaries-0.1.0.json +78 -46
  10. package/delivery/canonical.go +136 -0
  11. package/delivery/document.go +203 -0
  12. package/delivery/document.schema.json +1527 -0
  13. package/delivery/document_test.go +191 -0
  14. package/delivery/parser.go +155 -0
  15. package/evaluation/evaluation-run.schema.json +64 -10
  16. package/fixtures/json-schema/gateway-manifest/invalid/bad-execution-mode.json +73 -0
  17. package/fixtures/json-schema/gateway-manifest/invalid/unversioned-check.json +85 -0
  18. package/fixtures/json-schema/gateway-manifest/valid/checks.json +86 -0
  19. package/fixtures/json-schema/gateway-manifest/valid/versioned-task.json +73 -0
  20. package/fixtures/json-schema/network-ingest-event/invalid/vpn-probe-negative-rtt.json +34 -0
  21. package/fixtures/json-schema/network-ingest-event/invalid/vpn-stats-secret.json +27 -0
  22. package/fixtures/json-schema/network-ingest-event/valid/vpn-probe-batch.json +45 -0
  23. package/fixtures/json-schema/network-ingest-event/valid/vpn-tunnel-stats.json +26 -0
  24. package/fixtures/json-schema/network-runtime-protocol/invalid/vpn-managed-bad-token.json +15 -0
  25. package/fixtures/json-schema/network-runtime-protocol/invalid/vpn-managed-mode-override.json +16 -0
  26. package/fixtures/json-schema/network-runtime-protocol/valid/managed-vpn-macos-enrollment.json +27 -0
  27. package/fixtures/json-schema/network-runtime-protocol/valid/vpn-managed-connect.json +15 -0
  28. package/fixtures/openapi/AgentChatInput/invalid/empty-question.json +4 -0
  29. package/fixtures/openapi/AgentChatInput/invalid/system-role.json +9 -0
  30. package/fixtures/openapi/AgentChatInput/valid/authorized-background.json +5 -0
  31. package/fixtures/openapi/AgentChatInput/valid/conversation.json +15 -0
  32. package/fixtures/openapi/AgentRunnerToolCallRequest/invalid/model-identity.json +1 -0
  33. package/fixtures/openapi/AgentRunnerToolCallRequest/valid/search.json +1 -0
  34. package/fixtures/openapi/ApplicationInput/invalid/negative-version.json +6 -0
  35. package/fixtures/openapi/ApplicationInput/invalid/zero-version.json +6 -0
  36. package/fixtures/openapi/ApplicationInput/valid/versioned.json +6 -0
  37. package/fixtures/openapi/ApprovalRequest/invalid/resolved-scopes.json +20 -0
  38. package/fixtures/openapi/ApprovalRequest/valid/resolved-scopes.json +21 -0
  39. package/fixtures/openapi/BuildTemplateInput/invalid/negative-revision.json +6 -0
  40. package/fixtures/openapi/BuildTemplateInput/valid/draft.json +11 -0
  41. package/fixtures/openapi/BuildTriggerRequest/invalid/no-ref.json +1 -0
  42. package/fixtures/openapi/BuildTriggerRequest/valid/no-environment.json +1 -0
  43. package/fixtures/openapi/BuildpacksConfiguration/invalid/mutable-builder.json +5 -0
  44. package/fixtures/openapi/BuildpacksConfiguration/invalid/privilege-override.json +6 -0
  45. package/fixtures/openapi/BuildpacksConfiguration/invalid/unsupported-platform.json +5 -0
  46. package/fixtures/openapi/BuildpacksConfiguration/valid/pinned.json +5 -0
  47. package/fixtures/openapi/CapabilityAssessment/invalid/contract.json +16 -0
  48. package/fixtures/openapi/CapabilityAssessment/valid/contract.json +16 -0
  49. package/fixtures/openapi/CapabilityPlan/invalid/contract.json +16 -0
  50. package/fixtures/openapi/CapabilityPlan/valid/contract.json +19 -0
  51. package/fixtures/openapi/CapabilityPlanValidation/invalid/contract.json +5 -0
  52. package/fixtures/openapi/CapabilityPlanValidation/valid/contract.json +11 -0
  53. package/fixtures/openapi/CapabilityTask/invalid/contract.json +33 -0
  54. package/fixtures/openapi/CapabilityTask/valid/contract.json +34 -0
  55. package/fixtures/openapi/CapabilityTaskInput/invalid/contract.json +22 -0
  56. package/fixtures/openapi/CapabilityTaskInput/valid/contract.json +22 -0
  57. package/fixtures/openapi/CapabilityValueSemantic/invalid/contract.json +4 -0
  58. package/fixtures/openapi/CapabilityValueSemantic/valid/contract.json +7 -0
  59. package/fixtures/openapi/ConnectionCheckResult/invalid/missing-health.json +1 -0
  60. package/fixtures/openapi/ConnectionCheckResult/invalid/task-id.json +1 -0
  61. package/fixtures/openapi/ConnectionCheckResult/valid/failure.json +1 -0
  62. package/fixtures/openapi/ConnectionCheckResult/valid/healthy.json +1 -0
  63. package/fixtures/openapi/DeliveryAccessResult/invalid/release-verification.json +8 -0
  64. package/fixtures/openapi/DeliveryAccessResult/valid/release-verification.json +8 -0
  65. package/fixtures/openapi/DeliveryBatchAssessment/invalid/release-verification.json +11 -0
  66. package/fixtures/openapi/DeliveryBatchAssessment/valid/release-verification.json +11 -0
  67. package/fixtures/openapi/DeliveryBatchAssessmentInput/invalid/release-verification.json +9 -0
  68. package/fixtures/openapi/DeliveryBatchAssessmentInput/valid/release-verification.json +8 -0
  69. package/fixtures/openapi/DeliveryBatchInput/invalid/ambiguous-source.json +19 -0
  70. package/fixtures/openapi/DeliveryBatchInput/invalid/missing-idempotency.json +16 -0
  71. package/fixtures/openapi/DeliveryBatchInput/valid/quick-deploy.json +17 -0
  72. package/fixtures/openapi/DeliveryBatchInput/valid/saved-workflow.json +5 -0
  73. package/fixtures/openapi/DeliveryBlueprintInput/invalid/unversioned-preset.json +31 -0
  74. package/fixtures/openapi/DeliveryBlueprintInput/valid/service-preset.json +32 -0
  75. package/fixtures/openapi/DeliveryDocument/invalid/unknown-field.json +24 -0
  76. package/fixtures/openapi/DeliveryDocument/invalid/unknown-kind.json +23 -0
  77. package/fixtures/openapi/DeliveryDocument/invalid/unknown-version.json +23 -0
  78. package/fixtures/openapi/DeliveryDocument/valid/build-template.json +26 -0
  79. package/fixtures/openapi/DeliveryDocument/valid/deployment-template.json +26 -0
  80. package/fixtures/openapi/DeliveryDocument/valid/legacy-dag.json +39 -0
  81. package/fixtures/openapi/DeliveryDocument/valid/workflow-template.json +23 -0
  82. package/fixtures/openapi/DeliveryDocument/valid/workflow.json +20 -0
  83. package/fixtures/openapi/DeliveryDraftInput/invalid/short-idempotency-key.json +30 -0
  84. package/fixtures/openapi/DeliveryDraftInput/valid/idempotent-create.json +30 -0
  85. package/fixtures/openapi/DeliveryDraftService/invalid/zero-version.json +7 -0
  86. package/fixtures/openapi/DeliveryDraftService/valid/versioned-template.json +9 -0
  87. package/fixtures/openapi/DeliveryExecutionHistoryPage/invalid-kind.json +9 -0
  88. package/fixtures/openapi/DeliveryExecutionHistoryPage/valid-build.json +16 -0
  89. package/fixtures/openapi/DeliveryExecutionHistoryPage/valid-empty.json +3 -0
  90. package/fixtures/openapi/DeliveryPlanApprovalInput/invalid/confirm.json +1 -0
  91. package/fixtures/openapi/DeliveryPlanApprovalInput/valid/approve.json +1 -0
  92. package/fixtures/openapi/DeliveryPlanInput/invalid/draft-manifest-revision.json +1 -0
  93. package/fixtures/openapi/DeliveryPlanInput/valid/manifest-revision.json +1 -0
  94. package/fixtures/openapi/DeliveryTargetInput/invalid/deploy-without-environment.json +7 -0
  95. package/fixtures/openapi/DeliveryTargetInput/valid/build-without-environment.json +6 -0
  96. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/duplicate-kind.json +13 -0
  97. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/embedded-credentials.json +16 -0
  98. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/empty-kinds.json +10 -0
  99. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/negative-generation.json +15 -0
  100. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/unknown-kind.json +12 -0
  101. package/fixtures/openapi/DeliveryTemplateSourceInput/valid/manual-source.json +15 -0
  102. package/fixtures/openapi/DeliveryWorkflowDefinition/invalid/unversioned-template.json +15 -0
  103. package/fixtures/openapi/DeliveryWorkflowDefinition/valid/cross-app.json +24 -0
  104. package/fixtures/openapi/DeliveryWorkflowInput/invalid/short-key.json +1 -0
  105. package/fixtures/openapi/DeliveryWorkflowInput/valid/idempotent-create.json +1 -0
  106. package/fixtures/openapi/DeploymentTemplatePreviewInput/invalid/invalid-target-override.json +7 -0
  107. package/fixtures/openapi/DeploymentTemplatePreviewInput/invalid/invalid-zero-version.json +6 -0
  108. package/fixtures/openapi/DeploymentTemplatePreviewInput/valid/valid.json +6 -0
  109. package/fixtures/openapi/DockerDeliveryConfiguration/invalid/empty-mappings.json +5 -0
  110. package/fixtures/openapi/DockerDeliveryConfiguration/valid/compose.json +7 -0
  111. package/fixtures/openapi/DockerDeliverySnapshot/invalid/missing-required-field.json +19 -0
  112. package/fixtures/openapi/DockerDeliverySnapshot/valid/frozen-project.json +20 -0
  113. package/fixtures/openapi/DockerOperationCallbackRequest/invalid/cancellation-acknowledged-not-boolean.json +13 -0
  114. package/fixtures/openapi/DockerOperationCallbackRequest/valid/cancellation-acknowledged.json +13 -0
  115. package/fixtures/openapi/DockerProjectInput/invalid/empty-host.json +4 -0
  116. package/fixtures/openapi/DockerProjectInput/valid/inline-idempotent.json +7 -0
  117. package/fixtures/openapi/DockerQuickCreateHostInput/invalid/capacity-type.json +1 -0
  118. package/fixtures/openapi/DockerQuickCreateHostInput/valid/capacity.json +1 -0
  119. package/fixtures/openapi/HelmDeliveryConfiguration/invalid/plain-credential.json +21 -0
  120. package/fixtures/openapi/HelmDeliveryConfiguration/invalid/release-name.json +20 -0
  121. package/fixtures/openapi/HelmDeliveryConfiguration/valid/private-oci.json +20 -0
  122. package/fixtures/openapi/HelmDeliverySnapshot/invalid/secret-plan.json +31 -0
  123. package/fixtures/openapi/HelmDeliverySnapshot/invalid/unknown-operation.json +28 -0
  124. package/fixtures/openapi/HelmDeliverySnapshot/valid/first-install.json +28 -0
  125. package/fixtures/openapi/IdentityApplication/invalid/outpost-status.json +1 -0
  126. package/fixtures/openapi/IdentityApplicationOnboardingInput/invalid/missing-access.json +12 -0
  127. package/fixtures/openapi/IdentityApplicationOnboardingInput/valid/link.json +13 -0
  128. package/fixtures/openapi/IdentityOutpost/invalid/missing-runtime-status.json +9 -0
  129. package/fixtures/openapi/IdentityOutpost/valid/healthy.json +17 -0
  130. package/fixtures/openapi/IdentityOutpost/valid/unregistered.json +12 -0
  131. package/fixtures/openapi/IdentityOutpostDeployment/invalid/missing-protocol.json +3 -0
  132. package/fixtures/openapi/IdentityOutpostDeployment/valid/remote.json +6 -0
  133. package/fixtures/openapi/IdentityOutpostInput/invalid/forged-observation.json +7 -0
  134. package/fixtures/openapi/IdentityOutpostInput/valid/forward-auth.json +6 -0
  135. package/fixtures/openapi/IdentityOutpostInput/valid/legacy.json +8 -0
  136. package/fixtures/openapi/IdentityProviderSetup/invalid/fake-verification.json +1 -0
  137. package/fixtures/openapi/IdentityProviderSetup/valid/incomplete.json +1 -0
  138. package/fixtures/openapi/IdentityProviderSetup/valid/remote.json +1 -0
  139. package/fixtures/openapi/IdentityProviderUserMetadata/invalid/attributes.json +8 -0
  140. package/fixtures/openapi/IdentityProviderUserMetadata/valid/attributes.json +13 -0
  141. package/fixtures/openapi/KubernetesCustomResource/invalid/negative-generation.json +1 -0
  142. package/fixtures/openapi/KubernetesCustomResource/valid/deleting-operator.json +1 -0
  143. package/fixtures/openapi/KubernetesResourceCreationReceipt/invalid/manifest-content.json +20 -0
  144. package/fixtures/openapi/KubernetesResourceCreationReceipt/valid/confirmed.json +20 -0
  145. package/fixtures/openapi/KubernetesResourceCreationReceipt/valid/unknown.json +19 -0
  146. package/fixtures/openapi/ManifestDeploymentEnvelope/invalid/negative-resource-observation.json +57 -0
  147. package/fixtures/openapi/ManifestDeploymentEnvelope/valid/operator-deleting.json +57 -0
  148. package/fixtures/openapi/ManifestExecutionTaskPayload/invalid/gitops-empty.json +7 -0
  149. package/fixtures/openapi/ManifestExecutionTaskPayload/valid/gitops-frozen-children.json +18 -0
  150. package/fixtures/openapi/ManifestKustomizeOptions/invalid/escaping-entry.json +1 -0
  151. package/fixtures/openapi/ManifestKustomizeOptions/invalid/mutable-image.json +1 -0
  152. package/fixtures/openapi/ManifestKustomizeOptions/valid/overlay-images.json +7 -0
  153. package/fixtures/openapi/ManifestRevisionInput/invalid/missing-version.json +1 -0
  154. package/fixtures/openapi/ManifestRevisionInput/valid/current-draft.json +1 -0
  155. package/fixtures/openapi/ManifestServiceTemplateInputs/invalid/mutable-image.json +8 -0
  156. package/fixtures/openapi/ManifestServiceTemplateInputs/valid/frozen-service-image.json +9 -0
  157. package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/auto-with-gateway.json +6 -0
  158. package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/missing-manual-gateway.json +5 -0
  159. package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/mode-override.json +7 -0
  160. package/fixtures/openapi/NetworkVPNConnectionIntentInput/valid/auto-intent.json +5 -0
  161. package/fixtures/openapi/NetworkVPNConnectionIntentInput/valid/manual-intent.json +6 -0
  162. package/fixtures/openapi/NetworkVPNProfileInput/invalid/unknown-private-key.json +25 -0
  163. package/fixtures/openapi/NetworkVPNProfileInput/valid/assigned-profile.json +24 -0
  164. package/fixtures/openapi/NetworkVPNSelectionPolicyInput/invalid/unbounded-attempts.json +21 -0
  165. package/fixtures/openapi/NetworkVPNSelectionPolicyInput/valid/provider-policy.json +21 -0
  166. package/fixtures/openapi/ObservabilityMetricAssessmentInput/invalid/arbitrary-expression.json +10 -0
  167. package/fixtures/openapi/ObservabilityMetricAssessmentInput/valid/metric-window.json +10 -0
  168. package/fixtures/openapi/PluginManifest/valid/hermes-api.json +53 -0
  169. package/fixtures/openapi/ProgressiveRolloutControlInput/invalid/missing-identity.json +5 -0
  170. package/fixtures/openapi/ProgressiveRolloutControlInput/invalid/skip-analysis.json +5 -0
  171. package/fixtures/openapi/ProgressiveRolloutControlInput/valid/pause.json +5 -0
  172. package/fixtures/openapi/ReleaseTargetInput/invalid/missing-required-field.json +15 -0
  173. package/fixtures/openapi/ReleaseTargetInput/valid/docker-compose.json +16 -0
  174. package/fixtures/openapi/RepositoryAnalysis/invalid/moving-ref.json +11 -0
  175. package/fixtures/openapi/RepositoryAnalysis/valid/go.json +29 -0
  176. package/fixtures/openapi/RepositoryAnalysisInput/invalid/arbitrary-source-url.json +6 -0
  177. package/fixtures/openapi/RepositoryAnalysisInput/invalid/missing-ref.json +4 -0
  178. package/fixtures/openapi/RepositoryAnalysisInput/valid/nested-project.json +6 -0
  179. package/fixtures/openapi/ServiceDeploymentTemplateBinding/invalid/invalid-unpinned.json +4 -0
  180. package/fixtures/openapi/ServiceDeploymentTemplateBinding/valid/valid.json +7 -0
  181. package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-executable-schema.json +25 -0
  182. package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-missing-schema.json +21 -0
  183. package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-mixed-renderers.json +40 -0
  184. package/fixtures/openapi/ServiceDeploymentTemplateInput/valid/valid-nested-parameters.json +41 -0
  185. package/fixtures/openapi/ServiceDeploymentTemplateInput/valid/valid-yaml.json +34 -0
  186. package/fixtures/openapi/TemplatePublishInput/invalid/missing-revision.json +1 -0
  187. package/fixtures/openapi/TemplatePublishInput/invalid/unknown-field.json +4 -0
  188. package/fixtures/openapi/TemplatePublishInput/invalid/zero-revision.json +3 -0
  189. package/fixtures/openapi/TemplatePublishInput/valid/revision.json +3 -0
  190. package/fixtures/openapi/ToolCapability/invalid/bad-idempotency.json +35 -0
  191. package/fixtures/openapi/ToolCapability/invalid/unversioned-check.json +47 -0
  192. package/fixtures/openapi/ToolCapability/valid/checks.json +48 -0
  193. package/fixtures/openapi/ToolCapability/valid/versioned-task.json +35 -0
  194. package/fixtures/openapi/ToolInvocationRequest/invalid/empty-version.json +8 -0
  195. package/fixtures/openapi/ToolInvocationRequest/valid/versioned.json +8 -0
  196. package/fixtures/openapi/ToolInvocationResult/invalid/missing-status-call.json +13 -0
  197. package/fixtures/openapi/ToolInvocationResult/valid/task.json +20 -0
  198. package/fixtures/openapi/UpdateBrandingSettingsRequest/invalid/dark-logo-type.json +9 -0
  199. package/fixtures/openapi/UpdateBrandingSettingsRequest/valid/dark-logos.json +10 -0
  200. package/fixtures/openapi/VirtualMachineCreateInput/invalid/capacity-type.json +1 -0
  201. package/fixtures/openapi/VirtualMachineCreateInput/valid/capacity.json +1 -0
  202. package/fixtures/openapi/VirtualizationCapacityInput/invalid/missing-disk.json +1 -0
  203. package/fixtures/openapi/VirtualizationCapacityInput/valid/running-vm.json +1 -0
  204. package/fixtures/openapi/VirtualizationCapacityResult/invalid/invented-status.json +1 -0
  205. package/fixtures/openapi/VirtualizationCapacityResult/valid/available.json +1 -0
  206. package/fixtures/openapi/VirtualizationWorkerCreateInput/invalid/secret-input.json +5 -0
  207. package/fixtures/openapi/VirtualizationWorkerCreateInput/valid/one-worker.json +4 -0
  208. package/fixtures/openapi/VirtualizationWorkerPoolInput/invalid/external-owner.json +27 -0
  209. package/fixtures/openapi/VirtualizationWorkerPoolInput/invalid/zero-budget.json +27 -0
  210. package/fixtures/openapi/VirtualizationWorkerPoolInput/valid/registered.json +27 -0
  211. package/fixtures/openapi/VirtualizationWorkerPoolListEnvelope/invalid/nested-data.json +5 -0
  212. package/fixtures/openapi/VirtualizationWorkerPoolListEnvelope/valid/empty.json +3 -0
  213. package/fixtures/openapi/WorkbenchContextSelection/invalid/missing-file-content.json +8 -0
  214. package/fixtures/openapi/WorkbenchContextSelection/invalid/unknown-reference-kind.json +8 -0
  215. package/fixtures/openapi/WorkbenchContextSelection/valid/text-and-resource.json +17 -0
  216. package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/trigger-without-plan.json +10 -0
  217. package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/unknown-trigger.json +28 -0
  218. package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/zero-interval.json +28 -0
  219. package/fixtures/openapi/WorkbenchInspectionTaskInput/valid/alert-capability.json +30 -0
  220. package/fixtures/openapi/WorkbenchInspectionTaskInput/valid/scheduled-capability.json +28 -0
  221. package/fixtures/openapi/WorkbenchInspectionTrigger/invalid/missing-rule.json +3 -0
  222. package/fixtures/openapi/WorkbenchInspectionTrigger/invalid/schedule-alert-selector.json +4 -0
  223. package/fixtures/openapi/WorkbenchInspectionTrigger/valid/schedule.json +3 -0
  224. package/fixtures/openapi/WorkbenchModelPreferences/invalid/unknown-effort.json +1 -0
  225. package/fixtures/openapi/WorkbenchModelPreferences/valid/selected.json +1 -0
  226. package/fixtures/openapi/WorkflowCatalogPage/invalid/unsupported-kind.json +6 -0
  227. package/fixtures/openapi/WorkflowCatalogPage/valid/build-without-environment.json +6 -0
  228. package/fixtures/openapi/WorkflowTemplateInput/invalid/zero-revision.json +6 -0
  229. package/fixtures/openapi/WorkflowTemplateInput/valid/draft.json +10 -0
  230. package/gen/go/sohaapi/client.go +11 -3
  231. package/gen/go/sohaapi/client_test.go +26 -3
  232. package/gen/go/sohaapi/types.go +8103 -863
  233. package/gen/go/sohaapi/types_test.go +100 -1
  234. package/gen/go/sohaapi/vpn_models_test.go +21 -0
  235. package/gen/ts/sohaapi/index.ts +20390 -13160
  236. package/go.mod +107 -5
  237. package/go.sum +379 -16
  238. package/helmrelease/delivery.go +283 -0
  239. package/helmrelease/delivery_test.go +102 -0
  240. package/helmrelease/frozen_chart.go +91 -0
  241. package/helmrelease/result.go +27 -0
  242. package/helmrelease/runtime/delivery.go +508 -0
  243. package/helmrelease/runtime/delivery_test.go +236 -0
  244. package/helmrelease/runtime/resources_test.go +60 -0
  245. package/helmrelease/values.go +99 -0
  246. package/knowledge/context-envelope.schema.json +1 -0
  247. package/mcp/gateway-manifest.schema.json +387 -72
  248. package/network/README.md +40 -0
  249. package/network/network-ingest-event.schema.json +228 -0
  250. package/network/network-runtime-protocol.schema.json +457 -1
  251. package/openapi/soha-api.json +54874 -38722
  252. package/openapi/soha-api.yaml +12199 -4982
  253. package/openapi/spec_generated.go +3 -3
  254. package/package.json +3 -1
  255. package/resource/manifest_health.go +155 -0
  256. package/resource/manifest_health_test.go +37 -0
  257. package/resource/models.go +14 -0
  258. package/resource/runtime/argocd.go +166 -0
  259. package/resource/runtime/argocd_integration_test.go +142 -0
  260. package/resource/runtime/argocd_observation.go +143 -0
  261. package/resource/runtime/argocd_operation.go +253 -0
  262. package/resource/runtime/argocd_resources.go +115 -0
  263. package/resource/runtime/argocd_resources_test.go +107 -0
  264. package/resource/runtime/argocd_test.go +386 -0
  265. package/resource/runtime/health.go +115 -0
  266. package/resource/runtime/health_test.go +78 -0
  267. package/resource/runtime/operator_integration_test.go +174 -0
  268. package/resource/runtime/ownership.go +178 -0
  269. package/resource/runtime/ownership_test.go +178 -0
  270. package/resource/runtime/rollout_integration_test.go +287 -0
  271. package/resource/runtime/rollout_observation.go +252 -0
  272. package/resource/runtime/rollout_operation.go +398 -0
  273. package/resource/runtime/rollout_resources.go +385 -0
  274. package/resource/runtime/rollout_task.go +165 -0
  275. package/resource/runtime/rollout_test.go +450 -0
@@ -0,0 +1,1527 @@
1
+ {
2
+ "$comment": "Generated from openapi/soha-api.yaml. Do not edit.",
3
+ "$defs": {
4
+ "BuildRepositoryRefInput": {
5
+ "additionalProperties": false,
6
+ "properties": {
7
+ "refName": {
8
+ "type": "string"
9
+ },
10
+ "refType": {
11
+ "enum": [
12
+ "branch",
13
+ "tag",
14
+ "commit"
15
+ ],
16
+ "type": "string"
17
+ },
18
+ "repositoryId": {
19
+ "type": "string"
20
+ }
21
+ },
22
+ "required": [
23
+ "repositoryId",
24
+ "refType",
25
+ "refName"
26
+ ],
27
+ "type": "object"
28
+ },
29
+ "DeliveryBatchTemplateDefinition": {
30
+ "additionalProperties": false,
31
+ "description": "Versioned batch stage recipe. The server compiles these stages for each target and applies ordering and dependency policy.",
32
+ "properties": {
33
+ "executionMode": {
34
+ "enum": [
35
+ "service_serial",
36
+ "build_all_then_deploy"
37
+ ],
38
+ "type": "string"
39
+ },
40
+ "maxConcurrency": {
41
+ "maximum": 32,
42
+ "minimum": 1,
43
+ "type": "integer"
44
+ },
45
+ "mode": {
46
+ "enum": [
47
+ "delivery_batch"
48
+ ],
49
+ "type": "string"
50
+ },
51
+ "schemaVersion": {
52
+ "enum": [
53
+ 1
54
+ ],
55
+ "type": "integer"
56
+ },
57
+ "stages": {
58
+ "description": "Exactly build, plan, deploy, health in that order. Stages irrelevant to the target action are omitted; approval remains part of the final plan.",
59
+ "items": {
60
+ "enum": [
61
+ "build",
62
+ "plan",
63
+ "deploy",
64
+ "health"
65
+ ],
66
+ "type": "string"
67
+ },
68
+ "maxItems": 4,
69
+ "minItems": 4,
70
+ "type": "array"
71
+ },
72
+ "stopOnFailure": {
73
+ "type": "boolean",
74
+ "x-go-pointer": true
75
+ }
76
+ },
77
+ "required": [
78
+ "mode",
79
+ "schemaVersion",
80
+ "stages",
81
+ "executionMode",
82
+ "stopOnFailure",
83
+ "maxConcurrency"
84
+ ],
85
+ "type": "object"
86
+ },
87
+ "DeliveryBuildTemplateDocument": {
88
+ "additionalProperties": false,
89
+ "properties": {
90
+ "apiVersion": {
91
+ "const": "delivery.soha.io/v1alpha1",
92
+ "type": "string"
93
+ },
94
+ "kind": {
95
+ "const": "BuildTemplate",
96
+ "type": "string"
97
+ },
98
+ "metadata": {
99
+ "$ref": "#/$defs/DeliveryDocumentMetadata"
100
+ },
101
+ "spec": {
102
+ "$ref": "#/$defs/DeliveryBuildTemplateSpec"
103
+ }
104
+ },
105
+ "required": [
106
+ "apiVersion",
107
+ "kind",
108
+ "metadata",
109
+ "spec"
110
+ ],
111
+ "type": "object"
112
+ },
113
+ "DeliveryBuildTemplateSpec": {
114
+ "additionalProperties": false,
115
+ "allOf": [
116
+ {
117
+ "anyOf": [
118
+ {
119
+ "properties": {
120
+ "dockerfileTemplate": {
121
+ "minLength": 1,
122
+ "type": "string"
123
+ }
124
+ },
125
+ "required": [
126
+ "dockerfileTemplate"
127
+ ]
128
+ },
129
+ {
130
+ "required": [
131
+ "buildCommands"
132
+ ]
133
+ }
134
+ ]
135
+ }
136
+ ],
137
+ "properties": {
138
+ "buildCommands": {
139
+ "items": {
140
+ "maxLength": 16384,
141
+ "minLength": 1,
142
+ "type": "string"
143
+ },
144
+ "maxItems": 256,
145
+ "minItems": 1,
146
+ "type": "array"
147
+ },
148
+ "builderKind": {
149
+ "default": "custom",
150
+ "maxLength": 128,
151
+ "minLength": 1,
152
+ "type": "string"
153
+ },
154
+ "defaultVariables": {
155
+ "additionalProperties": {
156
+ "oneOf": [
157
+ {
158
+ "maxLength": 16384,
159
+ "type": "string"
160
+ },
161
+ {
162
+ "type": "number"
163
+ },
164
+ {
165
+ "type": "boolean"
166
+ }
167
+ ]
168
+ },
169
+ "maxProperties": 64,
170
+ "type": "object"
171
+ },
172
+ "dockerfileTemplate": {
173
+ "maxLength": 1048576,
174
+ "type": "string"
175
+ },
176
+ "enabled": {
177
+ "default": true,
178
+ "type": "boolean"
179
+ },
180
+ "variableSchema": {
181
+ "additionalProperties": {
182
+ "$ref": "#/$defs/DeliveryBuildVariableSchema"
183
+ },
184
+ "maxProperties": 64,
185
+ "propertyNames": {
186
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]{0,127}$"
187
+ },
188
+ "type": "object"
189
+ }
190
+ },
191
+ "type": "object"
192
+ },
193
+ "DeliveryBuildVariableSchema": {
194
+ "additionalProperties": false,
195
+ "properties": {
196
+ "description": {
197
+ "maxLength": 1024,
198
+ "type": "string"
199
+ },
200
+ "enum": {
201
+ "items": {
202
+ "oneOf": [
203
+ {
204
+ "maxLength": 16384,
205
+ "type": "string"
206
+ },
207
+ {
208
+ "type": "number"
209
+ },
210
+ {
211
+ "type": "boolean"
212
+ }
213
+ ]
214
+ },
215
+ "maxItems": 64,
216
+ "minItems": 1,
217
+ "type": "array",
218
+ "uniqueItems": true
219
+ },
220
+ "label": {
221
+ "maxLength": 200,
222
+ "type": "string"
223
+ },
224
+ "maximum": {
225
+ "type": "number"
226
+ },
227
+ "maxLength": {
228
+ "maximum": 16384,
229
+ "minimum": 0,
230
+ "type": "integer"
231
+ },
232
+ "minimum": {
233
+ "type": "number"
234
+ },
235
+ "minLength": {
236
+ "maximum": 16384,
237
+ "minimum": 0,
238
+ "type": "integer"
239
+ },
240
+ "required": {
241
+ "type": "boolean"
242
+ },
243
+ "title": {
244
+ "maxLength": 200,
245
+ "type": "string"
246
+ },
247
+ "type": {
248
+ "enum": [
249
+ "string",
250
+ "boolean",
251
+ "integer",
252
+ "number"
253
+ ],
254
+ "type": "string"
255
+ }
256
+ },
257
+ "required": [
258
+ "type"
259
+ ],
260
+ "type": "object"
261
+ },
262
+ "DeliveryDeploymentTemplateDocument": {
263
+ "additionalProperties": false,
264
+ "properties": {
265
+ "apiVersion": {
266
+ "const": "delivery.soha.io/v1alpha1",
267
+ "type": "string"
268
+ },
269
+ "kind": {
270
+ "const": "DeploymentTemplate",
271
+ "type": "string"
272
+ },
273
+ "metadata": {
274
+ "$ref": "#/$defs/DeliveryDocumentMetadata"
275
+ },
276
+ "spec": {
277
+ "$ref": "#/$defs/DeliveryDeploymentTemplateSpec"
278
+ }
279
+ },
280
+ "required": [
281
+ "apiVersion",
282
+ "kind",
283
+ "metadata",
284
+ "spec"
285
+ ],
286
+ "type": "object"
287
+ },
288
+ "DeliveryDeploymentTemplateSpec": {
289
+ "additionalProperties": false,
290
+ "properties": {
291
+ "artifacts": {
292
+ "additionalProperties": {
293
+ "maxLength": 128,
294
+ "minLength": 1,
295
+ "type": "string"
296
+ },
297
+ "maxProperties": 32,
298
+ "type": "object"
299
+ },
300
+ "defaults": {
301
+ "$ref": "#/$defs/TemplateParameterValues"
302
+ },
303
+ "enabled": {
304
+ "default": true,
305
+ "type": "boolean"
306
+ },
307
+ "environmentOverrides": {
308
+ "items": {
309
+ "maxLength": 128,
310
+ "minLength": 1,
311
+ "type": "string"
312
+ },
313
+ "maxItems": 64,
314
+ "type": "array",
315
+ "uniqueItems": true
316
+ },
317
+ "health": {
318
+ "$ref": "#/$defs/DeploymentTemplateHealth"
319
+ },
320
+ "parameterSchema": {
321
+ "$ref": "#/$defs/TemplateParameterSchema"
322
+ },
323
+ "source": {
324
+ "$ref": "#/$defs/DeploymentTemplateSource"
325
+ }
326
+ },
327
+ "required": [
328
+ "source",
329
+ "parameterSchema",
330
+ "defaults",
331
+ "health"
332
+ ],
333
+ "type": "object"
334
+ },
335
+ "DeliveryDocument": {
336
+ "description": "One UTF-8 YAML 1.2 JSON-subset or JSON document. Duplicate keys, aliases, tags, non-string keys, non-finite numbers, unsafe integers, unknown fields and versions are rejected. Maximum 1 MiB per file and nesting depth 64. No import operation executes document contents.",
337
+ "discriminator": {
338
+ "mapping": {
339
+ "BuildTemplate": "#/$defs/DeliveryBuildTemplateDocument",
340
+ "DeploymentTemplate": "#/$defs/DeliveryDeploymentTemplateDocument",
341
+ "Workflow": "#/$defs/DeliveryWorkflowDocument",
342
+ "WorkflowTemplate": "#/$defs/DeliveryWorkflowTemplateDocument"
343
+ },
344
+ "propertyName": "kind"
345
+ },
346
+ "oneOf": [
347
+ {
348
+ "$ref": "#/$defs/DeliveryBuildTemplateDocument"
349
+ },
350
+ {
351
+ "$ref": "#/$defs/DeliveryDeploymentTemplateDocument"
352
+ },
353
+ {
354
+ "$ref": "#/$defs/DeliveryWorkflowTemplateDocument"
355
+ },
356
+ {
357
+ "$ref": "#/$defs/DeliveryWorkflowDocument"
358
+ }
359
+ ],
360
+ "title": "Soha Delivery Document"
361
+ },
362
+ "DeliveryDocumentDAG": {
363
+ "additionalProperties": false,
364
+ "oneOf": [
365
+ {
366
+ "not": {
367
+ "anyOf": [
368
+ {
369
+ "required": [
370
+ "stages"
371
+ ]
372
+ },
373
+ {
374
+ "required": [
375
+ "steps"
376
+ ]
377
+ },
378
+ {
379
+ "required": [
380
+ "onFailure"
381
+ ]
382
+ }
383
+ ]
384
+ },
385
+ "required": [
386
+ "nodes"
387
+ ]
388
+ },
389
+ {
390
+ "not": {
391
+ "anyOf": [
392
+ {
393
+ "required": [
394
+ "nodes"
395
+ ]
396
+ },
397
+ {
398
+ "required": [
399
+ "edges"
400
+ ]
401
+ },
402
+ {
403
+ "required": [
404
+ "steps"
405
+ ]
406
+ }
407
+ ]
408
+ },
409
+ "required": [
410
+ "stages"
411
+ ]
412
+ },
413
+ {
414
+ "not": {
415
+ "anyOf": [
416
+ {
417
+ "required": [
418
+ "nodes"
419
+ ]
420
+ },
421
+ {
422
+ "required": [
423
+ "edges"
424
+ ]
425
+ },
426
+ {
427
+ "required": [
428
+ "stages"
429
+ ]
430
+ }
431
+ ]
432
+ },
433
+ "required": [
434
+ "steps"
435
+ ]
436
+ }
437
+ ],
438
+ "properties": {
439
+ "edges": {
440
+ "items": {
441
+ "additionalProperties": false,
442
+ "properties": {
443
+ "condition": {
444
+ "enum": [
445
+ "success",
446
+ "failure",
447
+ "always"
448
+ ],
449
+ "type": "string"
450
+ },
451
+ "id": {
452
+ "maxLength": 128,
453
+ "type": "string"
454
+ },
455
+ "source": {
456
+ "maxLength": 128,
457
+ "minLength": 1,
458
+ "type": "string"
459
+ },
460
+ "target": {
461
+ "maxLength": 128,
462
+ "minLength": 1,
463
+ "type": "string"
464
+ }
465
+ },
466
+ "required": [
467
+ "source",
468
+ "target"
469
+ ],
470
+ "type": "object"
471
+ },
472
+ "maxItems": 1024,
473
+ "type": "array"
474
+ },
475
+ "mode": {
476
+ "enum": [
477
+ "release_dag",
478
+ "delivery_dag"
479
+ ],
480
+ "type": "string"
481
+ },
482
+ "nodes": {
483
+ "items": {
484
+ "allOf": [
485
+ {
486
+ "$ref": "#/$defs/DeliveryDocumentStep"
487
+ },
488
+ {
489
+ "required": [
490
+ "id"
491
+ ]
492
+ }
493
+ ]
494
+ },
495
+ "maxItems": 256,
496
+ "minItems": 1,
497
+ "type": "array"
498
+ },
499
+ "onFailure": {
500
+ "items": {
501
+ "$ref": "#/$defs/DeliveryDocumentStep"
502
+ },
503
+ "maxItems": 256,
504
+ "type": "array"
505
+ },
506
+ "schemaVersion": {
507
+ "enum": [
508
+ 1,
509
+ 2
510
+ ],
511
+ "type": "integer"
512
+ },
513
+ "stages": {
514
+ "items": {
515
+ "additionalProperties": false,
516
+ "properties": {
517
+ "name": {
518
+ "maxLength": 200,
519
+ "minLength": 1,
520
+ "type": "string"
521
+ },
522
+ "steps": {
523
+ "items": {
524
+ "$ref": "#/$defs/DeliveryDocumentStep"
525
+ },
526
+ "maxItems": 256,
527
+ "minItems": 1,
528
+ "type": "array"
529
+ }
530
+ },
531
+ "required": [
532
+ "name",
533
+ "steps"
534
+ ],
535
+ "type": "object"
536
+ },
537
+ "maxItems": 64,
538
+ "minItems": 1,
539
+ "type": "array"
540
+ },
541
+ "steps": {
542
+ "items": {
543
+ "$ref": "#/$defs/DeliveryDocumentStep"
544
+ },
545
+ "maxItems": 256,
546
+ "minItems": 1,
547
+ "type": "array"
548
+ }
549
+ },
550
+ "type": "object"
551
+ },
552
+ "DeliveryDocumentMetadata": {
553
+ "additionalProperties": false,
554
+ "description": "Template name is its stable key. For Workflow, name is only a file identifier; its display name is spec.definition.name. IDs, publication state, credentials and source claims cannot be set here.",
555
+ "properties": {
556
+ "description": {
557
+ "maxLength": 4096,
558
+ "type": "string"
559
+ },
560
+ "displayName": {
561
+ "maxLength": 200,
562
+ "minLength": 1,
563
+ "type": "string"
564
+ },
565
+ "name": {
566
+ "maxLength": 128,
567
+ "minLength": 1,
568
+ "pattern": "^[a-z0-9][a-z0-9._-]*$",
569
+ "type": "string"
570
+ }
571
+ },
572
+ "required": [
573
+ "name"
574
+ ],
575
+ "type": "object"
576
+ },
577
+ "DeliveryDocumentStep": {
578
+ "additionalProperties": false,
579
+ "properties": {
580
+ "artifactKinds": {
581
+ "items": {
582
+ "enum": [
583
+ "image",
584
+ "test_report",
585
+ "scan_report",
586
+ "sbom",
587
+ "screenshot",
588
+ "video",
589
+ "junit",
590
+ "log"
591
+ ],
592
+ "type": "string"
593
+ },
594
+ "maxItems": 64,
595
+ "type": "array"
596
+ },
597
+ "artifactOutputs": {
598
+ "items": {
599
+ "additionalProperties": false,
600
+ "properties": {
601
+ "kind": {
602
+ "enum": [
603
+ "image",
604
+ "test_report",
605
+ "scan_report",
606
+ "sbom",
607
+ "screenshot",
608
+ "video",
609
+ "junit",
610
+ "log"
611
+ ],
612
+ "type": "string"
613
+ },
614
+ "name": {
615
+ "maxLength": 128,
616
+ "minLength": 1,
617
+ "type": "string"
618
+ },
619
+ "path": {
620
+ "maxLength": 512,
621
+ "type": "string"
622
+ },
623
+ "ref": {
624
+ "maxLength": 2048,
625
+ "type": "string"
626
+ },
627
+ "required": {
628
+ "type": "boolean"
629
+ }
630
+ },
631
+ "required": [
632
+ "name",
633
+ "kind"
634
+ ],
635
+ "type": "object"
636
+ },
637
+ "maxItems": 64,
638
+ "type": "array"
639
+ },
640
+ "capabilityRef": {
641
+ "maxLength": 512,
642
+ "type": "string"
643
+ },
644
+ "config": {
645
+ "$ref": "#/$defs/TemplateParameterValues",
646
+ "description": "Existing executor-specific inert configuration. Keys remain owned and validated by the selected executor; importing never evaluates them."
647
+ },
648
+ "continueOnFailure": {
649
+ "type": "boolean"
650
+ },
651
+ "environmentSelector": {
652
+ "$ref": "#/$defs/TemplateParameterValues"
653
+ },
654
+ "executorKind": {
655
+ "maxLength": 128,
656
+ "type": "string"
657
+ },
658
+ "failurePolicy": {
659
+ "maxLength": 128,
660
+ "type": "string"
661
+ },
662
+ "fanOut": {
663
+ "additionalProperties": false,
664
+ "properties": {
665
+ "batchSize": {
666
+ "maximum": 1000,
667
+ "minimum": 0,
668
+ "type": "integer"
669
+ },
670
+ "failurePolicy": {
671
+ "maxLength": 128,
672
+ "type": "string"
673
+ },
674
+ "strategy": {
675
+ "maxLength": 128,
676
+ "type": "string"
677
+ }
678
+ },
679
+ "type": "object"
680
+ },
681
+ "fanOutBatchSize": {
682
+ "maximum": 1000,
683
+ "minimum": 0,
684
+ "type": "integer"
685
+ },
686
+ "fanOutFailurePolicy": {
687
+ "maxLength": 128,
688
+ "type": "string"
689
+ },
690
+ "fanOutStrategy": {
691
+ "maxLength": 128,
692
+ "type": "string"
693
+ },
694
+ "id": {
695
+ "maxLength": 128,
696
+ "minLength": 1,
697
+ "type": "string"
698
+ },
699
+ "inputMapping": {
700
+ "$ref": "#/$defs/TemplateParameterValues"
701
+ },
702
+ "inputs": {
703
+ "items": {
704
+ "maxLength": 512,
705
+ "minLength": 1,
706
+ "type": "string"
707
+ },
708
+ "maxItems": 256,
709
+ "type": "array"
710
+ },
711
+ "name": {
712
+ "maxLength": 200,
713
+ "type": "string"
714
+ },
715
+ "observability": {
716
+ "$ref": "#/$defs/TemplateParameterValues"
717
+ },
718
+ "outputs": {
719
+ "items": {
720
+ "maxLength": 512,
721
+ "minLength": 1,
722
+ "type": "string"
723
+ },
724
+ "maxItems": 256,
725
+ "type": "array"
726
+ },
727
+ "position": {
728
+ "additionalProperties": false,
729
+ "properties": {
730
+ "x": {
731
+ "type": "number"
732
+ },
733
+ "y": {
734
+ "type": "number"
735
+ }
736
+ },
737
+ "required": [
738
+ "x",
739
+ "y"
740
+ ],
741
+ "type": "object"
742
+ },
743
+ "providerRef": {
744
+ "maxLength": 512,
745
+ "type": "string"
746
+ },
747
+ "runCondition": {
748
+ "maxLength": 512,
749
+ "type": "string"
750
+ },
751
+ "serviceSelector": {
752
+ "$ref": "#/$defs/TemplateParameterValues"
753
+ },
754
+ "stage": {
755
+ "maxLength": 128,
756
+ "type": "string"
757
+ },
758
+ "targetId": {
759
+ "maxLength": 128,
760
+ "type": "string"
761
+ },
762
+ "targetKind": {
763
+ "maxLength": 128,
764
+ "type": "string"
765
+ },
766
+ "targetSelector": {
767
+ "$ref": "#/$defs/TemplateParameterValues"
768
+ },
769
+ "timeoutSeconds": {
770
+ "maximum": 86400,
771
+ "minimum": 0,
772
+ "type": "integer"
773
+ },
774
+ "type": {
775
+ "enum": [
776
+ "manual_approval",
777
+ "deploy_update_image",
778
+ "wait_rollout",
779
+ "check_http",
780
+ "check_k8s_event",
781
+ "smoke_test",
782
+ "notify",
783
+ "rollback_to_previous",
784
+ "restart_workload",
785
+ "scale_workload",
786
+ "delete_pod",
787
+ "evict_pod",
788
+ "http_callback",
789
+ "create_silence",
790
+ "build",
791
+ "release",
792
+ "verify",
793
+ "check"
794
+ ],
795
+ "type": "string"
796
+ }
797
+ },
798
+ "required": [
799
+ "type"
800
+ ],
801
+ "type": "object"
802
+ },
803
+ "DeliveryTargetInput": {
804
+ "additionalProperties": false,
805
+ "allOf": [
806
+ {
807
+ "if": {
808
+ "properties": {
809
+ "action": {
810
+ "enum": [
811
+ "build_deploy",
812
+ "deploy",
813
+ "config_update"
814
+ ]
815
+ }
816
+ }
817
+ },
818
+ "then": {
819
+ "required": [
820
+ "applicationEnvironmentId"
821
+ ]
822
+ }
823
+ },
824
+ {
825
+ "if": {
826
+ "properties": {
827
+ "action": {
828
+ "const": "deploy"
829
+ }
830
+ }
831
+ },
832
+ "then": {
833
+ "required": [
834
+ "releaseBundleId"
835
+ ]
836
+ }
837
+ }
838
+ ],
839
+ "properties": {
840
+ "action": {
841
+ "enum": [
842
+ "build_deploy",
843
+ "build",
844
+ "deploy",
845
+ "config_update"
846
+ ],
847
+ "type": "string"
848
+ },
849
+ "applicationEnvironmentId": {
850
+ "minLength": 1,
851
+ "type": "string"
852
+ },
853
+ "applicationId": {
854
+ "minLength": 1,
855
+ "type": "string"
856
+ },
857
+ "buildArgs": {
858
+ "additionalProperties": {
859
+ "type": "string"
860
+ },
861
+ "type": "object"
862
+ },
863
+ "dependsOn": {
864
+ "items": {
865
+ "type": "string"
866
+ },
867
+ "maxItems": 200,
868
+ "type": "array",
869
+ "uniqueItems": true
870
+ },
871
+ "group": {
872
+ "default": 0,
873
+ "maximum": 199,
874
+ "minimum": 0,
875
+ "type": "integer"
876
+ },
877
+ "helmRevision": {
878
+ "description": "Existing owned Helm revision to restore through a new config_update batch.",
879
+ "minimum": 1,
880
+ "type": "integer"
881
+ },
882
+ "id": {
883
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$",
884
+ "type": "string"
885
+ },
886
+ "releaseBundleId": {
887
+ "type": "string"
888
+ },
889
+ "releaseTargetId": {
890
+ "type": "string"
891
+ },
892
+ "repositoryRefs": {
893
+ "items": {
894
+ "$ref": "#/$defs/BuildRepositoryRefInput"
895
+ },
896
+ "maxItems": 32,
897
+ "type": "array"
898
+ },
899
+ "serviceId": {
900
+ "minLength": 1,
901
+ "type": "string"
902
+ }
903
+ },
904
+ "required": [
905
+ "id",
906
+ "applicationId",
907
+ "serviceId",
908
+ "action"
909
+ ],
910
+ "type": "object"
911
+ },
912
+ "DeliveryWorkflowDefinition": {
913
+ "additionalProperties": false,
914
+ "dependentRequired": {
915
+ "workflowTemplateId": [
916
+ "workflowTemplateVersion"
917
+ ],
918
+ "workflowTemplateVersion": [
919
+ "workflowTemplateId"
920
+ ]
921
+ },
922
+ "properties": {
923
+ "maxConcurrency": {
924
+ "default": 4,
925
+ "maximum": 32,
926
+ "minimum": 1,
927
+ "type": "integer"
928
+ },
929
+ "mode": {
930
+ "default": "service_serial",
931
+ "enum": [
932
+ "service_serial",
933
+ "build_all_then_deploy"
934
+ ],
935
+ "type": "string"
936
+ },
937
+ "name": {
938
+ "maxLength": 160,
939
+ "minLength": 1,
940
+ "type": "string"
941
+ },
942
+ "stopOnFailure": {
943
+ "default": true,
944
+ "type": "boolean",
945
+ "x-go-pointer": true
946
+ },
947
+ "targets": {
948
+ "items": {
949
+ "$ref": "#/$defs/DeliveryTargetInput"
950
+ },
951
+ "maxItems": 200,
952
+ "minItems": 1,
953
+ "type": "array"
954
+ },
955
+ "workflowTemplateId": {
956
+ "type": "string"
957
+ },
958
+ "workflowTemplateVersion": {
959
+ "minimum": 1,
960
+ "type": "integer"
961
+ }
962
+ },
963
+ "required": [
964
+ "name",
965
+ "targets"
966
+ ],
967
+ "type": "object"
968
+ },
969
+ "DeliveryWorkflowDocument": {
970
+ "additionalProperties": false,
971
+ "properties": {
972
+ "apiVersion": {
973
+ "const": "delivery.soha.io/v1alpha1",
974
+ "type": "string"
975
+ },
976
+ "kind": {
977
+ "const": "Workflow",
978
+ "type": "string"
979
+ },
980
+ "metadata": {
981
+ "additionalProperties": false,
982
+ "description": "File identifier only. The workflow display name is spec.definition.name.",
983
+ "properties": {
984
+ "name": {
985
+ "maxLength": 128,
986
+ "minLength": 1,
987
+ "pattern": "^[a-z0-9][a-z0-9._-]*$",
988
+ "type": "string"
989
+ }
990
+ },
991
+ "required": [
992
+ "name"
993
+ ],
994
+ "type": "object"
995
+ },
996
+ "spec": {
997
+ "$ref": "#/$defs/DeliveryWorkflowDocumentSpec"
998
+ }
999
+ },
1000
+ "required": [
1001
+ "apiVersion",
1002
+ "kind",
1003
+ "metadata",
1004
+ "spec"
1005
+ ],
1006
+ "type": "object"
1007
+ },
1008
+ "DeliveryWorkflowDocumentSpec": {
1009
+ "additionalProperties": false,
1010
+ "properties": {
1011
+ "definition": {
1012
+ "$ref": "#/$defs/DeliveryWorkflowDefinition"
1013
+ }
1014
+ },
1015
+ "required": [
1016
+ "definition"
1017
+ ],
1018
+ "type": "object"
1019
+ },
1020
+ "DeliveryWorkflowTemplateDocument": {
1021
+ "additionalProperties": false,
1022
+ "properties": {
1023
+ "apiVersion": {
1024
+ "const": "delivery.soha.io/v1alpha1",
1025
+ "type": "string"
1026
+ },
1027
+ "kind": {
1028
+ "const": "WorkflowTemplate",
1029
+ "type": "string"
1030
+ },
1031
+ "metadata": {
1032
+ "$ref": "#/$defs/DeliveryDocumentMetadata"
1033
+ },
1034
+ "spec": {
1035
+ "$ref": "#/$defs/DeliveryWorkflowTemplateSpec"
1036
+ }
1037
+ },
1038
+ "required": [
1039
+ "apiVersion",
1040
+ "kind",
1041
+ "metadata",
1042
+ "spec"
1043
+ ],
1044
+ "type": "object"
1045
+ },
1046
+ "DeliveryWorkflowTemplateSpec": {
1047
+ "additionalProperties": false,
1048
+ "properties": {
1049
+ "category": {
1050
+ "default": "release",
1051
+ "maxLength": 128,
1052
+ "minLength": 1,
1053
+ "not": {
1054
+ "pattern": "^application:"
1055
+ },
1056
+ "type": "string"
1057
+ },
1058
+ "definition": {
1059
+ "oneOf": [
1060
+ {
1061
+ "$ref": "#/$defs/DeliveryBatchTemplateDefinition"
1062
+ },
1063
+ {
1064
+ "$ref": "#/$defs/DeliveryDocumentDAG"
1065
+ }
1066
+ ]
1067
+ },
1068
+ "enabled": {
1069
+ "default": true,
1070
+ "type": "boolean"
1071
+ }
1072
+ },
1073
+ "required": [
1074
+ "definition"
1075
+ ],
1076
+ "type": "object"
1077
+ },
1078
+ "DeploymentTemplateGitSource": {
1079
+ "additionalProperties": false,
1080
+ "properties": {
1081
+ "commit": {
1082
+ "pattern": "^([a-fA-F0-9]{40}|[a-fA-F0-9]{64})$",
1083
+ "type": "string"
1084
+ },
1085
+ "path": {
1086
+ "maxLength": 512,
1087
+ "minLength": 1,
1088
+ "type": "string"
1089
+ },
1090
+ "repositoryId": {
1091
+ "minLength": 1,
1092
+ "type": "string"
1093
+ }
1094
+ },
1095
+ "required": [
1096
+ "repositoryId",
1097
+ "commit",
1098
+ "path"
1099
+ ],
1100
+ "type": "object"
1101
+ },
1102
+ "DeploymentTemplateHealth": {
1103
+ "additionalProperties": false,
1104
+ "properties": {
1105
+ "mode": {
1106
+ "enum": [
1107
+ "workload_ready",
1108
+ "job_complete",
1109
+ "configuration_only"
1110
+ ],
1111
+ "type": "string",
1112
+ "x-enum-varnames": [
1113
+ "DeploymentTemplateHealthWorkloadReady",
1114
+ "DeploymentTemplateHealthJobComplete",
1115
+ "DeploymentTemplateHealthConfigurationOnly"
1116
+ ]
1117
+ },
1118
+ "timeoutSeconds": {
1119
+ "maximum": 3600,
1120
+ "minimum": 1,
1121
+ "type": "integer"
1122
+ }
1123
+ },
1124
+ "required": [
1125
+ "mode",
1126
+ "timeoutSeconds"
1127
+ ],
1128
+ "type": "object"
1129
+ },
1130
+ "DeploymentTemplateHelmSource": {
1131
+ "additionalProperties": false,
1132
+ "properties": {
1133
+ "chart": {
1134
+ "maxLength": 255,
1135
+ "minLength": 1,
1136
+ "type": "string"
1137
+ },
1138
+ "connectionId": {
1139
+ "minLength": 1,
1140
+ "type": "string"
1141
+ },
1142
+ "digest": {
1143
+ "pattern": "^sha256:[a-f0-9]{64}$",
1144
+ "type": "string"
1145
+ },
1146
+ "repositoryUrl": {
1147
+ "maxLength": 2048,
1148
+ "minLength": 1,
1149
+ "type": "string"
1150
+ },
1151
+ "secretRefs": {
1152
+ "$ref": "#/$defs/SecretReferenceMap",
1153
+ "description": "Application-authorized CHART_USERNAME, CHART_PASSWORD and optional CHART_CA_CERT references. Credentials are resolved only for the selected source."
1154
+ },
1155
+ "values": {
1156
+ "$ref": "#/$defs/TemplateParameterValues"
1157
+ },
1158
+ "version": {
1159
+ "maxLength": 128,
1160
+ "minLength": 1,
1161
+ "type": "string"
1162
+ }
1163
+ },
1164
+ "required": [
1165
+ "repositoryUrl",
1166
+ "chart",
1167
+ "version",
1168
+ "values"
1169
+ ],
1170
+ "type": "object"
1171
+ },
1172
+ "DeploymentTemplateSource": {
1173
+ "additionalProperties": false,
1174
+ "oneOf": [
1175
+ {
1176
+ "not": {
1177
+ "anyOf": [
1178
+ {
1179
+ "required": [
1180
+ "helm"
1181
+ ]
1182
+ },
1183
+ {
1184
+ "required": [
1185
+ "kustomize"
1186
+ ]
1187
+ },
1188
+ {
1189
+ "required": [
1190
+ "git"
1191
+ ]
1192
+ }
1193
+ ]
1194
+ },
1195
+ "properties": {
1196
+ "renderer": {
1197
+ "const": "raw_yaml"
1198
+ }
1199
+ },
1200
+ "required": [
1201
+ "files"
1202
+ ]
1203
+ },
1204
+ {
1205
+ "not": {
1206
+ "required": [
1207
+ "helm"
1208
+ ]
1209
+ },
1210
+ "oneOf": [
1211
+ {
1212
+ "not": {
1213
+ "required": [
1214
+ "git"
1215
+ ]
1216
+ },
1217
+ "required": [
1218
+ "files"
1219
+ ]
1220
+ },
1221
+ {
1222
+ "not": {
1223
+ "required": [
1224
+ "files"
1225
+ ]
1226
+ },
1227
+ "required": [
1228
+ "git"
1229
+ ]
1230
+ }
1231
+ ],
1232
+ "properties": {
1233
+ "renderer": {
1234
+ "const": "kustomize"
1235
+ }
1236
+ },
1237
+ "required": [
1238
+ "kustomize"
1239
+ ]
1240
+ },
1241
+ {
1242
+ "not": {
1243
+ "anyOf": [
1244
+ {
1245
+ "required": [
1246
+ "files"
1247
+ ]
1248
+ },
1249
+ {
1250
+ "required": [
1251
+ "kustomize"
1252
+ ]
1253
+ },
1254
+ {
1255
+ "required": [
1256
+ "git"
1257
+ ]
1258
+ }
1259
+ ]
1260
+ },
1261
+ "properties": {
1262
+ "renderer": {
1263
+ "const": "helm"
1264
+ }
1265
+ },
1266
+ "required": [
1267
+ "helm"
1268
+ ]
1269
+ }
1270
+ ],
1271
+ "properties": {
1272
+ "files": {
1273
+ "items": {
1274
+ "$ref": "#/$defs/ManifestFile"
1275
+ },
1276
+ "maxItems": 100,
1277
+ "type": "array"
1278
+ },
1279
+ "git": {
1280
+ "$ref": "#/$defs/DeploymentTemplateGitSource"
1281
+ },
1282
+ "helm": {
1283
+ "$ref": "#/$defs/DeploymentTemplateHelmSource"
1284
+ },
1285
+ "kustomize": {
1286
+ "$ref": "#/$defs/ManifestKustomizeOptions"
1287
+ },
1288
+ "renderer": {
1289
+ "enum": [
1290
+ "raw_yaml",
1291
+ "kustomize",
1292
+ "helm"
1293
+ ],
1294
+ "type": "string",
1295
+ "x-enum-varnames": [
1296
+ "DeploymentTemplateRendererRawYAML",
1297
+ "DeploymentTemplateRendererKustomize",
1298
+ "DeploymentTemplateRendererHelm"
1299
+ ]
1300
+ }
1301
+ },
1302
+ "required": [
1303
+ "renderer"
1304
+ ],
1305
+ "type": "object"
1306
+ },
1307
+ "ManifestFile": {
1308
+ "additionalProperties": false,
1309
+ "properties": {
1310
+ "content": {
1311
+ "maxLength": 524288,
1312
+ "type": "string"
1313
+ },
1314
+ "path": {
1315
+ "maxLength": 512,
1316
+ "minLength": 1,
1317
+ "type": "string"
1318
+ }
1319
+ },
1320
+ "required": [
1321
+ "path",
1322
+ "content"
1323
+ ],
1324
+ "type": "object"
1325
+ },
1326
+ "ManifestKustomizeImage": {
1327
+ "additionalProperties": false,
1328
+ "properties": {
1329
+ "digest": {
1330
+ "pattern": "^sha256:[a-f0-9]{64}$",
1331
+ "type": "string"
1332
+ },
1333
+ "name": {
1334
+ "description": "Image name matched by the native Kustomize images transformer.",
1335
+ "minLength": 1,
1336
+ "type": "string"
1337
+ },
1338
+ "newName": {
1339
+ "description": "Optional replacement image repository, without a tag or digest.",
1340
+ "minLength": 1,
1341
+ "type": "string"
1342
+ }
1343
+ },
1344
+ "required": [
1345
+ "name",
1346
+ "digest"
1347
+ ],
1348
+ "type": "object"
1349
+ },
1350
+ "ManifestKustomizeOptions": {
1351
+ "additionalProperties": false,
1352
+ "properties": {
1353
+ "entryPath": {
1354
+ "description": "Directory containing a standard Kustomization file, relative to the package root. Defaults to the package root; the root retains shared bases and generator files.",
1355
+ "maxLength": 1024,
1356
+ "pattern": "^(\\.|\\.?[A-Za-z0-9_-][A-Za-z0-9_.-]*(/\\.?[A-Za-z0-9_-][A-Za-z0-9_.-]*)*)?$",
1357
+ "type": "string"
1358
+ },
1359
+ "images": {
1360
+ "items": {
1361
+ "$ref": "#/$defs/ManifestKustomizeImage"
1362
+ },
1363
+ "maxItems": 50,
1364
+ "type": "array"
1365
+ }
1366
+ },
1367
+ "type": "object"
1368
+ },
1369
+ "SecretReferenceMap": {
1370
+ "additionalProperties": {
1371
+ "pattern": "^soha://secrets/[A-Za-z0-9._-]+(?:/versions/[1-9][0-9]*)?$",
1372
+ "type": "string"
1373
+ },
1374
+ "propertyNames": {
1375
+ "pattern": "^[A-Z_][A-Z0-9_]*$"
1376
+ },
1377
+ "type": "object"
1378
+ },
1379
+ "TemplateParameterSchema": {
1380
+ "additionalProperties": false,
1381
+ "description": "Restricted JSON Schema. Objects reject undeclared keys unless mapValues specifies their schema. secret_reference accepts only a namespaced Secret name/key reference, never a plaintext credential. External references and executable expressions are unsupported.",
1382
+ "properties": {
1383
+ "description": {
1384
+ "maxLength": 1024,
1385
+ "type": "string"
1386
+ },
1387
+ "enum": {
1388
+ "items": {
1389
+ "oneOf": [
1390
+ {
1391
+ "maxLength": 16384,
1392
+ "type": "string"
1393
+ },
1394
+ {
1395
+ "type": "number"
1396
+ },
1397
+ {
1398
+ "type": "boolean"
1399
+ }
1400
+ ]
1401
+ },
1402
+ "maxItems": 64,
1403
+ "minItems": 1,
1404
+ "type": "array",
1405
+ "uniqueItems": true
1406
+ },
1407
+ "items": {
1408
+ "$ref": "#/$defs/TemplateParameterSchema"
1409
+ },
1410
+ "mapValues": {
1411
+ "$ref": "#/$defs/TemplateParameterSchema"
1412
+ },
1413
+ "maximum": {
1414
+ "type": "number"
1415
+ },
1416
+ "maxItems": {
1417
+ "maximum": 256,
1418
+ "minimum": 0,
1419
+ "type": "integer"
1420
+ },
1421
+ "maxLength": {
1422
+ "maximum": 16384,
1423
+ "minimum": 0,
1424
+ "type": "integer"
1425
+ },
1426
+ "minimum": {
1427
+ "type": "number"
1428
+ },
1429
+ "minItems": {
1430
+ "maximum": 256,
1431
+ "minimum": 0,
1432
+ "type": "integer"
1433
+ },
1434
+ "minLength": {
1435
+ "maximum": 16384,
1436
+ "minimum": 0,
1437
+ "type": "integer"
1438
+ },
1439
+ "properties": {
1440
+ "additionalProperties": {
1441
+ "$ref": "#/$defs/TemplateParameterSchema"
1442
+ },
1443
+ "maxProperties": 64,
1444
+ "type": "object"
1445
+ },
1446
+ "required": {
1447
+ "items": {
1448
+ "maxLength": 128,
1449
+ "minLength": 1,
1450
+ "type": "string"
1451
+ },
1452
+ "maxItems": 64,
1453
+ "type": "array",
1454
+ "uniqueItems": true
1455
+ },
1456
+ "type": {
1457
+ "$ref": "#/$defs/TemplateParameterType"
1458
+ }
1459
+ },
1460
+ "required": [
1461
+ "type"
1462
+ ],
1463
+ "type": "object"
1464
+ },
1465
+ "TemplateParameterType": {
1466
+ "enum": [
1467
+ "string",
1468
+ "boolean",
1469
+ "number",
1470
+ "integer",
1471
+ "object",
1472
+ "array",
1473
+ "secret_reference"
1474
+ ],
1475
+ "type": "string",
1476
+ "x-enum-varnames": [
1477
+ "TemplateParameterString",
1478
+ "TemplateParameterBoolean",
1479
+ "TemplateParameterNumber",
1480
+ "TemplateParameterInteger",
1481
+ "TemplateParameterObject",
1482
+ "TemplateParameterArray",
1483
+ "TemplateParameterSecretReference"
1484
+ ]
1485
+ },
1486
+ "TemplateParameterValue": {
1487
+ "description": "JSON parameter value. The template schema further constrains each value; depth is limited to 12 and combined inputs to 64 KiB at runtime.",
1488
+ "oneOf": [
1489
+ {
1490
+ "maxLength": 16384,
1491
+ "type": "string"
1492
+ },
1493
+ {
1494
+ "type": "number"
1495
+ },
1496
+ {
1497
+ "type": "boolean"
1498
+ },
1499
+ {
1500
+ "items": {
1501
+ "$ref": "#/$defs/TemplateParameterValue"
1502
+ },
1503
+ "maxItems": 256,
1504
+ "type": "array"
1505
+ },
1506
+ {
1507
+ "additionalProperties": {
1508
+ "$ref": "#/$defs/TemplateParameterValue"
1509
+ },
1510
+ "maxProperties": 64,
1511
+ "type": "object"
1512
+ }
1513
+ ]
1514
+ },
1515
+ "TemplateParameterValues": {
1516
+ "additionalProperties": {
1517
+ "$ref": "#/$defs/TemplateParameterValue"
1518
+ },
1519
+ "maxProperties": 64,
1520
+ "type": "object"
1521
+ }
1522
+ },
1523
+ "$id": "https://contracts.opensoha.dev/delivery/document.schema.json",
1524
+ "$ref": "#/$defs/DeliveryDocument",
1525
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1526
+ "title": "Soha Delivery Document"
1527
+ }