verify(P2): user-facing ACDL→Nova sweep — 4-layer verify PASS + ship
VERIFY: structural — all user-facing strings Nova; behavioral — 79 tests + CI PASS; security — no creds; quality — new onboarding Nova-header test. REQ-166 complete. Internal ship_phase.sh helper added. ---ci--- project: acdl phase: 2 milestone: v1.16 status: complete phase_role: execution requirements: covered: [REQ-166] partial: [] ---/ci---
This commit is contained in:
@@ -36,14 +36,14 @@ import json, sys
|
||||
stage = '''$STAGE'''
|
||||
status = '''$STATUS'''
|
||||
details = json.loads('''$DETAILS''')
|
||||
lines = [f'### ACDL Stage: {stage} — {status}', '']
|
||||
lines = [f'### Nova Stage: {stage} — {status}', '']
|
||||
if details:
|
||||
lines.append('| Metric | Value |')
|
||||
lines.append('|--------|-------|')
|
||||
for k, v in details.items():
|
||||
lines.append(f'| {k} | {v} |')
|
||||
lines.append('')
|
||||
lines.append('> _Auto-posted by the ACDL deploy pipeline (D-055)._')
|
||||
lines.append('> _Auto-posted by the Nova deploy pipeline (D-055)._')
|
||||
print('\n'.join(lines))
|
||||
")
|
||||
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ banner() {
|
||||
|
||||
fail() { echo "FAIL: $*" >&2; exit 1; }
|
||||
|
||||
echo "=== ACDL CI Pipeline (local reproduction) ==="
|
||||
echo "=== Nova CI Pipeline (local reproduction) ==="
|
||||
echo "contract: pipelines/ci.yml (3 stages)"
|
||||
echo ""
|
||||
|
||||
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bash
|
||||
# scripts/ship_phase.sh — internal CIAgent per-phase ship helper (v1.16)
|
||||
# Usage: bash scripts/ship_phase.sh <phase_num> <req_id> <phase_slug> <release_body>
|
||||
set -euo pipefail
|
||||
PHASE="$1"; REQ="$2"; SLUG="$3"; BODY="$4"
|
||||
MS="milestone/v1.16-nova-simplification"
|
||||
BR="phase/$(printf '%02d' "$PHASE")-${SLUG}"
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
git checkout "$MS" 2>/dev/null
|
||||
git merge --squash "$BR" 2>&1 | tail -2
|
||||
MSG="verify(P${PHASE}): ${SLUG} — 4-layer verify PASS + ship
|
||||
|
||||
${BODY}
|
||||
|
||||
---ci---
|
||||
project: acdl
|
||||
phase: ${PHASE}
|
||||
milestone: v1.16
|
||||
status: complete
|
||||
phase_role: execution
|
||||
requirements:
|
||||
covered: [${REQ}]
|
||||
partial: []
|
||||
---/ci---"
|
||||
git commit -q -m "$MSG"
|
||||
PREV=$(git tag -l "v1.15.*" --sort=-version:refname | head -1)
|
||||
PATCH=$(($(echo "$PREV" | sed 's/v1.15.//')))
|
||||
NEWPATCH=$((PATCH + 1))
|
||||
TAG="v1.15.${NEWPATCH}"
|
||||
git tag -a "$TAG" -m "${TAG}: v1.16 P${PHASE} — ${SLUG}"
|
||||
git push origin "$MS" --tags 2>&1 | grep -E "new tag|new branch" | head -2
|
||||
python3 - "$TAG" "$PREV" <<'PYEOF'
|
||||
import json, subprocess, sys, urllib.request, urllib.error
|
||||
tag, prev = sys.argv[1], sys.argv[2]
|
||||
tok = [l.split("=",1)[1].strip() for l in open(".env.secrets") if l.startswith("NOVA_GITEA_TOKEN=")][0]
|
||||
body = subprocess.check_output(["git","log",f"{prev}..{tag}","--oneline"]).decode()
|
||||
payload = {"tag_name":tag,"name":f"Nova {tag} — v1.16 P{tag.split('.')[-1]}","body":body}
|
||||
req = urllib.request.Request("https://git.cloudinit.dev/api/v1/repos/continuous-intelligence/acdl/releases", data=json.dumps(payload).encode(), headers={"Authorization":f"token {tok}","Content-Type":"application/json"}, method="POST")
|
||||
try:
|
||||
r = urllib.request.urlopen(req, timeout=30); d = json.loads(r.read()); print(f"release_id: {d.get('id')} tag: {tag}")
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == 409: print(f"release exists for {tag}")
|
||||
else: print(f"HTTP {e.code}: {e.read().decode()[:120]}")
|
||||
except Exception as e: print(f"ERROR: {e}")
|
||||
PYEOF
|
||||
echo "SHIPPED ${TAG}"
|
||||
Reference in New Issue
Block a user