feat(cicd): expose public edge container identity

This commit is contained in:
pikastech
2026-07-20 17:20:44 +02:00
parent 9a8c55e445
commit b2f633c787
+8 -4
View File
@@ -1232,7 +1232,8 @@ trap 'rm -rf "$tmp"' EXIT
dns_failures_dir="$tmp/dns-failures"
site_failures_dir="$tmp/site-failures"
mkdir -p "$dns_failures_dir" "$site_failures_dir"
container_rc=0; docker inspect -f '{{.State.Running}}' ${shQuote(target.runtime.containerName)} 2>/dev/null | grep -qx true || container_rc=1
container_identity="$(docker inspect -f '{{.State.Running}}|{{.Id}}|{{.State.StartedAt}}' ${shQuote(target.runtime.containerName)} 2>/dev/null || true)"
container_rc=0; printf '%s' "$container_identity" | grep -q '^true|' || container_rc=1
legacy_rc=0; docker inspect -f '{{.State.Running}}' ${shQuote(target.runtime.legacy.containerName)} 2>/dev/null | grep -qx true || legacy_rc=1
listeners_rc=0; ss -ltn | grep -Eq '[:.]${target.listener.httpPort}[[:space:]]' || listeners_rc=1; ss -ltn | grep -Eq '[:.]${target.listener.httpsPort}[[:space:]]' || listeners_rc=1
udp_rc=0
@@ -1256,10 +1257,13 @@ PY
fi
current_compose_sha=""
if [ -f ${shQuote(target.runtime.composePath)} ]; then current_compose_sha="sha256:$(sha256sum ${shQuote(target.runtime.composePath)} | awk '{print $1}')"; fi
python3 - "$container_rc" "$legacy_rc" "$listeners_rc" "$udp_rc" "$validate_rc" "$dns_rc" "$sites_rc" "$current_sha" ${shQuote(desiredFingerprint)} "$current_compose_sha" ${shQuote(desiredComposeFingerprint)} ${shQuote(desiredSourceCommit ?? "")} ${shQuote(authorityId)} ${shQuote(target.runtime.statePath)} "$dns_failures_dir" "$site_failures_dir" <<'PY'
python3 - "$container_rc" "$legacy_rc" "$listeners_rc" "$udp_rc" "$validate_rc" "$dns_rc" "$sites_rc" "$container_identity" "$current_sha" ${shQuote(desiredFingerprint)} "$current_compose_sha" ${shQuote(desiredComposeFingerprint)} ${shQuote(desiredSourceCommit ?? "")} ${shQuote(authorityId)} ${shQuote(target.runtime.statePath)} "$dns_failures_dir" "$site_failures_dir" <<'PY'
import json, pathlib, sys
container, legacy, listeners, udp, validate, dns, sites = [int(value) for value in sys.argv[1:8]]
current, desired, current_compose, desired_compose, desired_commit, desired_authority, state_path, dns_failures_path, site_failures_path = sys.argv[8:17]
container_identity, current, desired, current_compose, desired_compose, desired_commit, desired_authority, state_path, dns_failures_path, site_failures_path = sys.argv[8:18]
container_parts = container_identity.split("|", 2)
container_id = container_parts[1] if len(container_parts) == 3 and container_parts[1] else None
container_started_at = container_parts[2] if len(container_parts) == 3 and container_parts[2] else None
def read_failures(directory):
return [json.loads(path.read_text(encoding="utf-8")) for path in sorted(pathlib.Path(directory).glob("*.json"))]
dns_failures = read_failures(dns_failures_path)
@@ -1281,7 +1285,7 @@ state_matches_runtime = (
)
config_matches_desired = bool(desired) and current == desired and bool(desired_compose) and current_compose == desired_compose
ok = all(value == 0 for value in [container, listeners, udp, validate, sites]) and legacy != 0 and state_matches_runtime and config_matches_desired
print(json.dumps({"ok": ok, "container": {"exitCode": container}, "legacyContainer": {"exitCode": legacy, "retired": legacy != 0}, "tcpListeners": {"exitCode": listeners}, "preservedUdpListeners": {"exitCode": udp}, "validate": {"exitCode": validate}, "dns": {"exitCode": dns, "blocking": False, "failures": dns_failures}, "siteProbes": {"exitCode": sites, "failures": site_failures}, "provenance": {"installed": state, "desiredSourceCommit": desired_commit or None, "matchesRuntime": state_matches_runtime}, "config": {"currentManagedFingerprint": current or None, "desiredManagedFingerprint": desired or None, "currentComposeFingerprint": current_compose or None, "desiredComposeFingerprint": desired_compose or None, "matchesDesired": config_matches_desired}, "valuesPrinted": False}))
print(json.dumps({"ok": ok, "container": {"exitCode": container, "id": container_id, "startedAt": container_started_at}, "legacyContainer": {"exitCode": legacy, "retired": legacy != 0}, "tcpListeners": {"exitCode": listeners}, "preservedUdpListeners": {"exitCode": udp}, "validate": {"exitCode": validate}, "dns": {"exitCode": dns, "blocking": False, "failures": dns_failures}, "siteProbes": {"exitCode": sites, "failures": site_failures}, "provenance": {"installed": state, "desiredSourceCommit": desired_commit or None, "matchesRuntime": state_matches_runtime}, "config": {"currentManagedFingerprint": current or None, "desiredManagedFingerprint": desired or None, "currentComposeFingerprint": current_compose or None, "desiredComposeFingerprint": desired_compose or None, "matchesDesired": config_matches_desired}, "valuesPrinted": False}))
raise SystemExit(0 if ok else 1)
PY
`;