79 lines
3.3 KiB
YAML
79 lines
3.3 KiB
YAML
name: 'platform-check'
|
|
description: 'Validates catalog-info.yaml conformance and platform branch initialization'
|
|
|
|
runs:
|
|
using: composite
|
|
steps:
|
|
- name: Ensure PyYAML
|
|
shell: bash
|
|
run: python3 -c "import yaml" 2>/dev/null || pip3 install pyyaml -q
|
|
|
|
- name: Platform conformance check
|
|
shell: bash
|
|
run: |
|
|
FAIL=0
|
|
echo "══════════════════════════════════════════════════"
|
|
echo " Platform Conformance Check"
|
|
echo "══════════════════════════════════════════════════"
|
|
|
|
# ── Required platform files ───────────────────────────
|
|
for f in catalog-info.yaml Dockerfile docs; do
|
|
if [[ -e "$f" ]]; then
|
|
echo " ✓ $f"
|
|
else
|
|
echo " ✗ $f MISSING"
|
|
FAIL=1
|
|
fi
|
|
done
|
|
|
|
# ── Platform branch model initialization ─────────────────────────────────
|
|
if [[ -f ".platform/initialized.md" ]]; then
|
|
echo " ✓ .platform/initialized.md (GitOps branch model active)"
|
|
else
|
|
echo " ✗ .platform/initialized.md MISSING"
|
|
echo " This file is committed to the dev branch by gitea:setup-branches."
|
|
echo " Its presence proves this PR originated from the platform-managed dev branch."
|
|
FAIL=1
|
|
fi
|
|
|
|
# ── catalog-info.yaml field validation ───────────────
|
|
if python3 - <<'PYEOF'
|
|
import yaml, sys
|
|
try:
|
|
# catalog-info.yaml may be multi-document (Component + API); load the Component doc
|
|
docs = list(yaml.safe_load_all(open('catalog-info.yaml')))
|
|
doc = next((d for d in docs if isinstance(d, dict) and d.get('kind') == 'Component'), docs[0] if docs else {})
|
|
except Exception as e:
|
|
print(f" ✗ catalog-info.yaml: parse error: {e}")
|
|
sys.exit(1)
|
|
fields = [
|
|
('apiVersion', lambda d: d.get('apiVersion')),
|
|
('kind', lambda d: d.get('kind')),
|
|
('metadata.name', lambda d: (d.get('metadata') or {}).get('name')),
|
|
('spec.type', lambda d: (d.get('spec') or {}).get('type')),
|
|
('spec.owner', lambda d: (d.get('spec') or {}).get('owner')),
|
|
]
|
|
fail = False
|
|
for field, getter in fields:
|
|
val = getter(doc)
|
|
if val:
|
|
print(f" ✓ catalog-info.yaml/{field}: {val}")
|
|
else:
|
|
print(f" ✗ catalog-info.yaml/{field}: missing or empty")
|
|
fail = True
|
|
sys.exit(1 if fail else 0)
|
|
PYEOF
|
|
then
|
|
echo " ✓ catalog-info.yaml is conformant"
|
|
else
|
|
FAIL=1
|
|
fi
|
|
|
|
echo "──────────────────────────────────────────────────"
|
|
if [[ $FAIL -eq 0 ]]; then
|
|
echo " ✓ Platform conformance: PASSED"
|
|
else
|
|
echo " ✗ Platform conformance: FAILED"
|
|
exit 1
|
|
fi
|