test(deploy): retain failed smoke image evidence
This commit is contained in:
@@ -79,10 +79,12 @@ task13_write_image_evidence() {
|
||||
output_dir="$(dirname "$TASK13_IMAGE_EVIDENCE_OUTPUT")"
|
||||
mkdir -p "$output_dir"
|
||||
temporary="$(mktemp "$output_dir/.unified-docker-images.XXXXXX")"
|
||||
if ! node - "$TASK13_IMAGE_EVIDENCE_RECORDS" "$TASK13_SOURCE_COMMIT" "$TASK13_RUN_ID" >"$temporary" <<'NODE'
|
||||
if ! node - "$TASK13_IMAGE_EVIDENCE_RECORDS" "$TASK13_SOURCE_COMMIT" "$TASK13_RUN_ID" \
|
||||
"$TASK13_IMAGE_EVIDENCE_STATUS" >"$temporary" <<'NODE'
|
||||
const fs = require("node:fs");
|
||||
const [recordsFile, sourceCommit, runId] = process.argv.slice(2);
|
||||
if (!/^[0-9a-f]{40}$/.test(sourceCommit) || !/^[0-9A-Za-z-]+$/.test(runId)) process.exit(1);
|
||||
const [recordsFile, sourceCommit, runId, status] = process.argv.slice(2);
|
||||
if (!/^[0-9a-f]{40}$/.test(sourceCommit) || !/^[0-9A-Za-z-]+$/.test(runId)
|
||||
|| !/^(?:pass|fail)$/.test(status)) process.exit(1);
|
||||
const images = new Map();
|
||||
for (const line of fs.readFileSync(recordsFile, "utf8").split("\n").filter(Boolean)) {
|
||||
const fields = line.split("\t");
|
||||
@@ -102,6 +104,7 @@ for (const line of fs.readFileSync(recordsFile, "utf8").split("\n").filter(Boole
|
||||
if (images.size === 0) process.exit(1);
|
||||
const document = {
|
||||
gate: "unified-deployment-smoke",
|
||||
status,
|
||||
source_commit: sourceCommit,
|
||||
run_id: runId,
|
||||
images: [...images.values()].sort((left, right) => left.id.localeCompare(right.id)).map((image) => ({
|
||||
@@ -121,6 +124,12 @@ NODE
|
||||
mv "$temporary" "$TASK13_IMAGE_EVIDENCE_OUTPUT"
|
||||
}
|
||||
|
||||
task13_capture_failed_image_evidence() {
|
||||
TASK13_IMAGE_EVIDENCE_STATUS=fail
|
||||
task13_record_project_image_evidence
|
||||
task13_write_image_evidence
|
||||
}
|
||||
|
||||
task13_registry_filesystem_fingerprint() {
|
||||
python3 - "$1" <<'PY'
|
||||
import hashlib
|
||||
@@ -1717,6 +1726,12 @@ task13_assert_built_image_ownership() {
|
||||
task13_cleanup() {
|
||||
local original_rc="$1" cleanup_rc=0 transaction="" leftovers="" image_id=""
|
||||
set +e
|
||||
if [[ "$original_rc" -ne 0 && -n "${TASK13_PROJECT:-}" \
|
||||
&& -s "${TASK13_IMAGE_EVIDENCE_RECORDS:-}" && -n "${TASK13_IMAGE_EVIDENCE_OUTPUT:-}" ]]; then
|
||||
if ! task13_capture_failed_image_evidence >>"${TASK13_LOG:-/dev/null}" 2>&1; then
|
||||
rm -f "$TASK13_IMAGE_EVIDENCE_OUTPUT"
|
||||
fi
|
||||
fi
|
||||
if [[ "$original_rc" -ne 0 && "${TASK13_FAILURE_LOGGED:-0}" -eq 0 ]] \
|
||||
&& [[ -n "${TASK13_LOG:-}" && -f "$TASK13_LOG" ]]; then
|
||||
printf '%s\n' '--- sanitized Task 13 diagnostic log ---' >&2
|
||||
@@ -2036,6 +2051,7 @@ task13_self_test_image_evidence() (
|
||||
: >"$records"
|
||||
TASK13_RUN_ID="task15-image-run"
|
||||
TASK13_SOURCE_COMMIT="0123456789abcdef0123456789abcdef01234567"
|
||||
TASK13_IMAGE_EVIDENCE_STATUS="fail"
|
||||
TASK13_IMAGE_EVIDENCE_RECORDS="$records"
|
||||
TASK13_IMAGE_EVIDENCE_OUTPUT="$output"
|
||||
TASK13_PROJECT="task15-image-project"
|
||||
@@ -2070,17 +2086,17 @@ task13_self_test_image_evidence() (
|
||||
esac
|
||||
}
|
||||
|
||||
task13_record_project_image_evidence
|
||||
task13_record_image_evidence \
|
||||
'fixture-candidate@sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' \
|
||||
'rollback-candidate'
|
||||
task13_write_image_evidence
|
||||
task13_capture_failed_image_evidence
|
||||
unset -f docker
|
||||
|
||||
node - "$output" <<'NODE'
|
||||
const manifest = JSON.parse(require("node:fs").readFileSync(process.argv[2], "utf8"));
|
||||
if (manifest.source_commit !== "0123456789abcdef0123456789abcdef01234567"
|
||||
|| manifest.run_id !== "task15-image-run" || manifest.images.length !== 3) process.exit(1);
|
||||
|| manifest.run_id !== "task15-image-run" || manifest.status !== "fail"
|
||||
|| manifest.images.length !== 3) process.exit(1);
|
||||
const ids = manifest.images.map((image) => image.id);
|
||||
if (new Set(ids).size !== 3 || ids.some((id) => !/^sha256:[0-9a-f]{64}$/.test(id))) process.exit(1);
|
||||
if (!manifest.images.some((image) => image.roles.includes("rollback-candidate")
|
||||
@@ -2434,6 +2450,7 @@ task13_initialize() {
|
||||
TASK13_IMAGE_EVIDENCE_RECORDS="$TASK13_TMP/image-evidence.tsv"
|
||||
: >"$TASK13_IMAGE_EVIDENCE_RECORDS"
|
||||
TASK13_IMAGE_EVIDENCE_OUTPUT="$TASK13_ROOT/.artifacts/task-15/unified-docker-images.json"
|
||||
rm -f "$TASK13_IMAGE_EVIDENCE_OUTPUT"
|
||||
TASK13_PROFILE="local"
|
||||
TASK13_INSTALLATION="$TASK13_TMP/thothii-installation.yaml"
|
||||
TASK13_PROJECT="thothii-$(task13_sha256_text "$TASK13_INSTALLATION" | cut -c1-12)"
|
||||
@@ -2516,6 +2533,7 @@ task13_smoke_main() {
|
||||
fi
|
||||
task13_update_rollback
|
||||
task13_record_project_image_evidence
|
||||
TASK13_IMAGE_EVIDENCE_STATUS=pass
|
||||
task13_write_image_evidence
|
||||
printf 'Task 13 %s deployment smoke passed.\n' "$mode"
|
||||
}
|
||||
@@ -2536,6 +2554,7 @@ task13_server_smoke_main() {
|
||||
task13_assert_server_runtime
|
||||
task13_assert_server_oidc_restore_verification
|
||||
task13_record_project_image_evidence
|
||||
TASK13_IMAGE_EVIDENCE_STATUS=pass
|
||||
task13_write_image_evidence
|
||||
printf 'Task 13 Linux server deployment smoke passed.\n'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user