Deployment Manifest Schema
Complete schema reference for deployment manifests in JSON format.
Root Structure
{
"apiVersion": "strata.huybrechts.xyz/v1",
"kind": "deployment-manifest",
"meta": { ... },
"spec": { ... }
}
apiVersion
Type: string
Valid values: strata.huybrechts.xyz/v1
Description: API version for manifest schema compatibility.
kind
Type: string
Valid values: deployment-manifest
Description: Resource kind identifier.
Metadata Section
"meta": {
"name": "prod_deployment",
"annotations": {
"description": "Production deployment manifest"
},
"labels": {
"version": "2.3.0",
"environment": "production"
}
}
meta.name
Type: string
Pattern: ^[a-z0-9]([a-z0-9-_]{0,61}[a-z0-9])?$
Description: Name of the deployment. Lowercase alphanumeric, hyphens, and underscores.
meta.annotations
Type: object (optional)
Properties:
description(string, optional) — Human-readable description of the manifest
meta.labels
Type: object (optional)
Properties:
version(string, optional) — Semantic version of deployed artifactsenvironment(string, optional) — Environment name (e.g., “production”, “staging”)Custom labels — Any additional key-value pairs for filtering/tagging
Specification Section
"spec": {
"deployment_name": "prod_deployment",
"workspace_name": "prod_workspace",
"action": "deploy",
"status": "success",
"timestamp": "2024-06-17T10:45:33Z",
"user": "ops@acme.com",
"platform_version": "1.2.0",
"build_duration_seconds": 87,
"deploy_duration_seconds": 215,
"artifacts": { ... },
"stages": [ ... ],
"policy_results": { ... }
}
Core Fields
spec.deployment_name
Type: string
Description: Name of the deployment resource being manifested.
spec.workspace_name
Type: string
Description: Name of the workspace where build/deploy occurred.
spec.action
Type: string
Valid values: "build" | "deploy" | "destroy"
Description: Type of action:
"build"— Build manifest fromstrata build run"deploy"— Deploy manifest fromstrata deploy run"destroy"— Destruction record fromstrata deploy destroy
spec.status
Type: string
Valid values: "success" | "failure" | "partial"
Description: Outcome of action:
"success"— Action completed successfully"failure"— Action failed"partial"— Some stages succeeded, some failed
spec.timestamp
Type: string (ISO 8601)
Format: YYYY-MM-DDTHH:mm:ssZ
Example: "2024-06-17T10:45:33Z"
Description: When the action occurred (UTC).
spec.user
Type: string
Description: Email or username of person who initiated the action.
spec.platform_version
Type: string
Description: Version of strata CLI that generated the manifest.
spec.build_duration_seconds
Type: integer (build manifests only)
Description: Total duration of build process in seconds.
spec.deploy_duration_seconds
Type: integer (deploy manifests only)
Description: Total duration of deployment process in seconds.
Artifacts Section
"artifacts": {
"platform": { ... },
"repositories": { ... },
"images": [ ... ],
"providers": [ ... ],
"sbom": { ... }
}
artifacts.platform
Type: object
"platform": {
"hash": "sha256:abc123def456...",
"path": ".strata/build/prod_deployment/platform.json",
"content": { ...full platform.json... }
}
Properties:
Field |
Type |
Description |
|---|---|---|
|
string |
SHA-256 hash of platform.json file |
|
string |
Relative path to platform.json artifact |
|
object |
Full platform.json content (included for offline access) |
artifacts.repositories
Type: object (map of repository name → commit info)
"repositories": {
"xyz-infrastructure": {
"url": "git@github.com:acme/xyz-infra.git",
"ref": "v2.3.0",
"commit": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
},
"xyz-config": {
"url": "git@github.com:acme/xyz-config.git",
"ref": "main",
"commit": "f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6"
}
}
Properties per repository:
Field |
Type |
Description |
|---|---|---|
|
string |
Git remote URL |
|
string |
Git ref (branch, tag, or commit SHA) |
|
string |
Full commit SHA-1 hash |
artifacts.images
Type: array of objects (optional)
"images": [
{
"name": "traefik",
"image": "docker.io/traefik:v3.0.1",
"digest": "sha256:xyz789abc123..."
},
{
"name": "app",
"image": "ghcr.io/acme/app:v2.3.0",
"digest": "sha256:123abc789xyz..."
}
]
Properties per image:
Field |
Type |
Description |
|---|---|---|
|
string |
Human-readable image name |
|
string |
Full image reference with registry and tag |
|
string |
Image content digest (SHA-256) |
artifacts.providers
Type: array of objects (deploy manifests only)
"providers": [
{
"name": "tf_hetzner",
"type": "terraform",
"backend": {
"type": "local",
"configuration": {
"path": ".strata/build/prod_deployment/terraform"
}
}
},
{
"name": "configure",
"type": "ansible",
"backend": {
"type": "default",
"configuration": {
"playbook": "site.yml",
"inventory": "inventory/hosts.yml"
}
}
}
]
Properties per provider:
Field |
Type |
Description |
|---|---|---|
|
string |
Provisioner name from deployment spec |
|
string |
Provisioner type: |
|
object |
Backend configuration used |
|
string |
Backend type (e.g., |
|
object |
Backend-specific settings |
artifacts.sbom
Type: object
"sbom": {
"path": ".strata/build/prod_deployment/sbom.json",
"format": "cyclonedx-1.6",
"sha256": "sha256:def456abc123...",
"component_count": 47
}
Properties:
Field |
Type |
Description |
|---|---|---|
|
string |
Path to SBOM JSON file |
|
string |
SBOM format: |
|
string |
SHA-256 hash of SBOM file |
|
integer |
Number of components in SBOM |
Stages Section
Type: array of objects (deploy manifests only)
"stages": [
{
"name": "infrastructure",
"status": "success",
"duration_seconds": 125,
"error": null,
"outputs": {
"server_ip": "192.0.2.10",
"load_balancer_fqdn": "lb.example.com"
}
},
{
"name": "configure",
"status": "success",
"duration_seconds": 45,
"error": null,
"outputs": {}
}
]
Properties per stage:
Field |
Type |
Description |
|---|---|---|
|
string |
Stage name from deployment spec |
|
string |
Outcome: |
|
integer |
How long stage took |
|
string | null |
Error message if failed, null if succeeded |
|
object |
Provisioner outputs (Terraform outputs, Ansible facts, etc.) |
Policy Results Section
Type: object (build manifests only)
"policy_results": {
"status": "passed",
"policies_checked": 12,
"policies_passed": 12,
"violations": []
}
Properties:
Field |
Type |
Description |
|---|---|---|
|
string |
Overall result: |
|
integer |
Total policies evaluated |
|
integer |
Policies that passed |
|
array |
List of policy violations (if any) |
Violation structure:
{
"policy_name": "no-public-access",
"severity": "critical",
"message": "Firewall rule allows public ingress on port 3306"
}
Optional Sections
Signatures (Future Support)
Type: object (optional, not yet implemented)
"signatures": {
"gpg": {
"method": "gpg",
"key_id": "0x1234567890ABCDEF",
"signature": "-----BEGIN PGP SIGNATURE-----\n...\n-----END PGP SIGNATURE-----",
"signed_at": "2024-06-17T10:45:33Z"
}
}
Purpose: GPG-signed manifests for cryptographic verification (enables future compliance features).
Complete Example: Build Manifest
{
"apiVersion": "strata.huybrechts.xyz/v1",
"kind": "deployment-manifest",
"meta": {
"name": "prod_deployment",
"labels": {
"version": "2.3.0",
"environment": "production"
}
},
"spec": {
"deployment_name": "prod_deployment",
"workspace_name": "prod_workspace",
"action": "build",
"status": "success",
"timestamp": "2024-06-17T10:35:20Z",
"user": "devops@acme.com",
"platform_version": "1.2.0",
"build_duration_seconds": 87,
"artifacts": {
"platform": {
"hash": "sha256:abc123def456...",
"path": ".strata/build/prod_deployment/platform.json",
"content": {
"apiVersion": "strata.huybrechts.xyz/v1",
"kind": "deployment",
"meta": {
"name": "prod_deployment"
},
"spec": {
"namespace": "default",
"configurations": [ ... ]
}
}
},
"repositories": {
"xyz-infrastructure": {
"url": "git@github.com:acme/xyz-infra.git",
"ref": "v2.3.0",
"commit": "a1b2c3d4e5f6g7h8..."
}
},
"sbom": {
"path": ".strata/build/prod_deployment/sbom.json",
"format": "cyclonedx-1.6",
"sha256": "sha256:def456...",
"component_count": 47
}
},
"policy_results": {
"status": "passed",
"policies_checked": 12,
"policies_passed": 12,
"violations": []
}
}
}
Complete Example: Deploy Manifest
{
"apiVersion": "strata.huybrechts.xyz/v1",
"kind": "deployment-manifest",
"meta": {
"name": "prod_deployment",
"labels": {
"version": "2.3.0",
"environment": "production"
}
},
"spec": {
"deployment_name": "prod_deployment",
"workspace_name": "prod_workspace",
"action": "deploy",
"status": "success",
"timestamp": "2024-06-17T10:45:33Z",
"user": "ops@acme.com",
"platform_version": "1.2.0",
"deploy_duration_seconds": 215,
"artifacts": {
"platform": {
"hash": "sha256:abc123def456...",
"path": ".strata/build/prod_deployment/platform.json",
"content": { ... }
},
"repositories": {
"xyz-infrastructure": {
"url": "git@github.com:acme/xyz-infra.git",
"ref": "v2.3.0",
"commit": "a1b2c3d4e5f6g7h8..."
}
},
"images": [
{
"name": "traefik",
"image": "docker.io/traefik:v3.0.1",
"digest": "sha256:xyz789..."
}
],
"providers": [
{
"name": "tf_hetzner",
"type": "terraform",
"backend": {
"type": "local",
"configuration": {
"path": ".strata/build/prod_deployment/terraform"
}
}
}
],
"sbom": {
"path": ".strata/build/prod_deployment/sbom.json",
"format": "cyclonedx-1.6",
"sha256": "sha256:def456...",
"component_count": 47
}
},
"stages": [
{
"name": "infrastructure",
"status": "success",
"duration_seconds": 125,
"error": null,
"outputs": {
"server_ip": "192.0.2.10",
"load_balancer_fqdn": "lb.example.com"
}
},
{
"name": "configure",
"status": "success",
"duration_seconds": 45,
"error": null,
"outputs": {}
}
]
}
}
Validation Rules
Rule |
Description |
|---|---|
|
Version compatibility |
|
Resource type validation |
|
Kubernetes naming convention |
|
Valid action types |
|
Valid status values |
|
Audit trail precision |
|
Build artifact evidence |
|
Deploy execution record |
Type Definitions
GitCommit
interface GitCommit {
url: string // Git remote URL
ref: string // Branch, tag, or commit SHA
commit: string // Full commit SHA-1 (40 chars)
}
ContainerImage
interface ContainerImage {
name: string // Image name (no registry)
image: string // Full reference: registry/image:tag
digest: string // SHA-256 digest: sha256:...
}
ProvisionerInfo
interface ProvisionerInfo {
name: string
type: "terraform" | "ansible" | "helm" | "compose"
backend: {
type: string
configuration: Record<string, unknown>
}
}
SbomReference
interface SbomReference {
path: string // File path to SBOM
format: "cyclonedx-1.6" // SBOM format
sha256: string // File hash
component_count: number
}
PlatformArtifact
interface PlatformArtifact {
hash: string // SHA-256 of platform.json
path: string // File path to platform.json
content: Record<string, unknown> // Full platform.json snapshot
}
DeploymentStage
interface DeploymentStage {
name: string
status: "success" | "failure" | "skipped"
duration_seconds: number
error: string | null
outputs: Record<string, unknown>
}
PolicyResult
interface PolicyResult {
status: "passed" | "failed" | "warnings"
policies_checked: number
policies_passed: number
violations: {
policy_name: string
severity: "critical" | "high" | "medium" | "low"
message: string
}[]
}
See Also
Deployment Manifests Guide — How to generate and use manifests
Manifest CLI Reference — CLI commands for manifest operations
ADR 0021: Manifests as First-Class Artifacts — Design rationale