Files
acdl/tests/test_consumer_guide_per_env_section.py
T
Jon Chery cd637808f5 feat(P41): per-environment CI jobs + environment workflow input
---ci---
project: acdl
phase: 41
milestone: v1.9
status: execute
---/ci---

Phase 41 — per-environment-ci-jobs (REQ-105, REQ-106, D-082):

Per-env contracts (REQ-105):
- contracts/static-assets.{dev,qa,prod,dr}.yaml + microservice.{dev,qa,prod,dr}.yaml
  (8 files, each sets environment: to its own name, uses interpolation).
- Default contracts/static-assets.yaml + microservice.yaml preserved (backwards compat).

Deploy workflow environment input (REQ-106):
- .github/workflows/deploy.yml + .gitea/workflows/deploy.yml (byte-identical):
  new 'environment' workflow_call input (default empty, override).
- scripts/run_platform.sh: --environment <name> flag; exports
  ACDL_ENVIRONMENT_OVERRIDE; re-runs env check against the override.
- core/contract_resolver.py: resolve(environment_override=...) (D-088);
  CLI honors --environment flag + ACDL_ENVIRONMENT_OVERRIDE env var.

Consumer guide (REQ-106):
- docs/consumer-guide.md: 'Per-environment deployment' section with 4
  caller-workflow examples (dev/qa/prod/dr), HITL gate structure
  (approve_qa/approve_prod/approve_dr, D-042), interpolation reference table.
- Documents promotion-without-editing + hybrid model (per-env contracts
  OR single contract + env input).

Tests: +40 (test_per_env_contracts.py, test_deploy_workflow_env_input.py,
test_consumer_guide_per_env_section.py). 446 passed; run_ci.sh green;
deploy workflows byte-identical.
2026-07-23 04:34:10 +00:00

45 lines
1.5 KiB
Python

"""REQ-106: consumer guide documents per-env caller workflows."""
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
GUIDE = ROOT / "docs" / "consumer-guide.md"
def test_consumer_guide_has_per_env_section():
text = GUIDE.read_text()
assert "Per-environment deployment" in text
assert "promotion-without-editing" in text.lower() or "promotion = running the matching job" in text.lower()
def test_consumer_guide_has_four_caller_examples():
text = GUIDE.read_text()
assert "deploy-dev" in text
assert "deploy-qa" in text
assert "deploy-prod" in text
assert "deploy-dr" in text
def test_consumer_guide_documents_environment_input():
text = GUIDE.read_text()
assert "environment" in text
assert "workflow input" in text.lower() or "workflow_call" in text.lower() or "environment:" in text
def test_consumer_guide_documents_hitl_gates():
text = GUIDE.read_text()
assert "approve_qa" in text
assert "approve_prod" in text
assert "approve_dr" in text
assert "separation-of-duties" in text.lower() or "separation of duties" in text.lower()
def test_consumer_guide_has_interpolation_reference():
text = GUIDE.read_text()
assert "${env.environment}" in text
assert "${env.account_id}" in text
assert "${contract.module}" in text
def test_consumer_guide_states_no_field_editing():
text = GUIDE.read_text()
assert "no" in text.lower() and "environment" in text.lower() and "editing" in text.lower()