Files
acdl/pipelines/contract.yml
T
Jon Chery 031887ec56 refactor(P57): contract surface redesign + rename + .yml repo-wide
Contract surface redesign:
- New top-level fields: id (3-6 char acronym → stack.name), name (full → stack.title),
  infrastructure (map keyed by module name, replaces module:)
- Drop uses: field (dead reference; version pin lives in CI workflow uses: line)
- Drop top-level module/inputs (now nested under infrastructure map)
- Per-module optional version (defaults to latest published from registry)
- Multi-module contracts: one file deploys N modules in one pipeline run,
  resource IDs namespaced with module name to avoid collisions
- stack.schema.json: add optional title field for display name

Rename:
- pipelines/deploy.yaml → pipelines/contract.yml (declarative spec, not a pipeline)
- pipelines/ci.yaml → pipelines/ci.yml
- All 44 .yaml files → .yml repo-wide (contracts, module examples, kyverno policies)
- .acdl/contract.yaml → .acdl/contract.yml

Resolver (core/contract_resolver.py):
- Rewrite resolve() to loop infrastructure map, default version to latest,
  merge module fragments into one stack with namespaced resource IDs
- _latest_version() picks highest non-deprecated from registry
- _namespace_resources() prefixes IDs + rewrites ref: expressions for multi-module
- Single-module path: unprefixed IDs (backward compatible)

Verification:
- 494 tests pass (0 contract-shape failures)
- Local E2E passes (contract → resolver → adapter → local ECS HTTP 200 → outbox)

---ci---
project: acdl
phase: 57
milestone: v1.10.2
status: execute
---/ci---
2026-07-27 21:37:40 +00:00

72 lines
2.8 KiB
YAML

# ACDL Central Deployment Pipeline Contract (v1.8)
#
# This is the single source of truth for the deployment pipeline. It
# declares the stages that run when a consumer submits a contract:
# validate-contract -> resolve-stack -> terraform-plan -> checkov ->
# confidence -> apply (dev only) -> publish-outputs -> deploy-uptime ->
# comment-outputs
#
# Decommission mode (mode: decommission) runs a different set of stages:
# validate-change-request -> disable-deletion-protection (HITL SRE) ->
# zero-counts (HITL SRE) -> confirm-decommission
#
# This file is the declarative pipeline spec (a contract, not an executable
# workflow). The executable workflow is .github/workflows/deploy.yml
# (GitHub Actions) / .gitea/workflows/deploy.yml (Gitea Actions), which
# implements these stages by invoking scripts/run_platform.sh.
#
# Validated against schemas/deploy-pipeline.schema.json.
name: acdl-deploy
environment: dev
triggers:
push: [main]
pull_request: [main]
runner: ubuntu-latest
python_version: "3.12"
stages:
- name: validate-contract
description: Validate the consumer contract against the contract schema
command: python3 -c "import jsonschema, yaml; jsonschema.validate(yaml.safe_load(open('contracts/static-assets.yaml')), json.load(open('schemas/contract.schema.json')))"
required: true
- name: resolve-stack
description: Resolve the contract to a Target Stack instance via the contract resolver
command: python3 core/contract_resolver.py contracts/static-assets.yaml /tmp/acdl-stack.json
required: true
- name: terraform-plan
description: Compile the stack to Terraform and run terraform plan
command: bash scripts/run_platform.sh --plan-only contracts/static-assets.yaml
required: true
- name: checkov
description: Run Checkov policy checks on the emitted Terraform
command: bash scripts/run_platform.sh --check-only
required: false
- name: confidence
description: Compute the confidence signal from policy + validation inputs
command: python3 core/confidence_signal.py /tmp/acdl-deploy-inputs.json dev
required: true
- name: apply
description: Apply the Terraform plan (dev environment only, autonomous per §10)
command: bash scripts/run_platform.sh --plan-only
required: false
- name: publish-outputs
description: Publish deploy outputs to SSM Parameter Store (SecureString) + GitHub PR comment
command: bash scripts/run_platform.sh
required: false
- name: deploy-uptime
description: Deploy uptime-kuma monitoring stack (separate terraform state) with endpoints from L2 outputs
command: bash scripts/run_platform.sh --deploy-uptime
required: false
- name: comment-outputs
description: Post a structured GitHub PR comment with human-readable deploy outputs
command: bash scripts/post_stage_comment.sh publish-outputs pass
required: false