Skip to main content

Composition examples

The repository ships one packaged example-platform Stack using the split-kind authoring model. It covers the quick start, GitHub Actions-compatible execution, and multi-root repository discovery.

Packaged examples

PackageExportsPurpose
examples/compositionsterraform, helm-values, helm-chart, cloudflare-worker-turbo, cloudflare-worker, cloudflare-pages, cloudflare-pages-turbo, cloudflare-pages-terraform, cloudflare-pages-turbo-terraform, turbo-package, workspaceEmbedded example-platform Stack used by examples/intent.yaml

Each composition type lives at examples/compositions/compositions/<type>/ using split-kind authoring:

examples/compositions/compositions/terraform/
├── composition.yaml # Composition facade with refs
├── schema.yaml # ComponentSchema for input validation
├── jobs/
│ └── terraform-validate.yaml # JobTemplate with capability-tagged steps
└── profiles/
├── terraform-pull-request.yaml # ExecutionProfile for PR
├── terraform-verify.yaml # ExecutionProfile for verification
└── terraform-release.yaml # ExecutionProfile with policies

The stack.yaml at the package root uses auto-discovery — no explicit path listing is needed.

Split-kind authoring pattern

Every composition in the example stack demonstrates the split-kind pattern where each concern has its own file:

  • Composition references schema, jobs, and profiles by name
  • ComponentSchema validates component inputs independently
  • JobTemplate defines steps with capability tags for semantic selection
  • ExecutionProfile selects behavior via includeCapabilities and stepOverrides

GitHub Actions-compatible composition

The Terraform example shows how a JobTemplate uses a GitHub Actions use: step with capability tagging:

# jobs/terraform-validate.yaml
apiVersion: sourceplane.io/v1alpha1
kind: JobTemplate
metadata:
name: terraform-validate
spec:
capabilities:
- terraform.setup
- terraform.validate
steps:
- id: setup
name: setup
capability: terraform.setup
use: hashicorp/setup-terraform@v4
with:
terraform_version: "{{.parameters.terraformVersion}}"
terraform_wrapper: "false"
- id: validate
name: validate
capability: terraform.validate
run: terraform -chdir={{.parameters.terraformDir}} validate -no-color
onFailure: stop

The corresponding profile selects which capabilities to include and can override step behavior:

# profiles/terraform-pull-request.yaml
apiVersion: sourceplane.io/v1alpha1
kind: ExecutionProfile
metadata:
name: terraform-pull-request
spec:
description: Fast PR validation with speculative planning
jobs:
validate:
includeCapabilities:
- terraform.setup
- terraform.fmt
- terraform.init
- terraform.validate
- terraform.plan
stepOverrides:
init:
run: terraform -chdir={{.parameters.terraformDir}} init -backend=false -input=false
plan:
run: terraform -chdir={{.parameters.terraformDir}} plan -no-color -lock=false

Profile policies

The release profile demonstrates enforcement policies:

# profiles/terraform-release.yaml
spec:
policies:
requireCleanGitTree: true
requirePinnedTerraformVersion: true
requireApproval: true

Composition types included

TypeJobProfilesScope
terraformvalidatepull-request, verify, releaseinfra
helm-chartrenderlint-only, verifydelivery
helm-valuesrenderlint-only, verifydelivery
cloudflare-pagesverify-deploypull-request, verify, deploydelivery
cloudflare-pages-turboverify-deploypull-request, verify, deploydelivery
cloudflare-pages-terraformverify-reconcilepull-request, verify, releaseinfra
cloudflare-pages-turbo-terraformverify-reconcilepull-request, verify, releaseinfra
cloudflare-workerverify-deploypull-request, verify, deploydelivery
cloudflare-worker-turboverify-deploypull-request, verify, deploydelivery
turbo-packageverifyquick-check, verifyverify
workspaceverifyquick-check, fullsmoke