diff --git a/scripts/release-manifest.mjs b/scripts/release-manifest.mjs index 6dc8286..d2f654c 100755 --- a/scripts/release-manifest.mjs +++ b/scripts/release-manifest.mjs @@ -218,8 +218,8 @@ if (command === 'get') { } let value = manifest for (const segment of field.split('.')) value = value?.[segment] - if (typeof value === 'object') console.log(JSON.stringify(value)) - else if (value === null || value === undefined) console.log('') + if (value === null || value === undefined) console.log('') + else if (typeof value === 'object') console.log(JSON.stringify(value)) else console.log(String(value)) process.exit(0) } diff --git a/tests/release/manual-release-test.sh b/tests/release/manual-release-test.sh index 57df7b6..cde0448 100755 --- a/tests/release/manual-release-test.sh +++ b/tests/release/manual-release-test.sh @@ -124,6 +124,20 @@ RELEASE_SMOKE_COMPLETED_AT=2026-07-22T00:00:00Z \ node "$root/scripts/release-manifest.mjs" create "$manifest" >/dev/null node "$root/scripts/release-manifest.mjs" validate "$manifest" >/dev/null [[ $(node "$root/scripts/release-manifest.mjs" get "$manifest" images.api) == "$api_image" ]] +bootstrap_manifest=$tmp/bootstrap.json +RELEASE_SOURCE_SHA=$source_sha \ +RELEASE_BASE_SHA= \ +RELEASE_COMPONENTS=api \ +RELEASE_MIGRATIONS_CHANGED=true \ +RELEASE_API_IMAGE=$api_image \ +RELEASE_WEB_IMAGE=$web_image \ +RELEASE_BUILD_COMPLETED_AT=2026-07-22T00:00:00Z \ +RELEASE_SMOKE_COMPLETED_AT=2026-07-22T00:00:00Z \ + node "$root/scripts/release-manifest.mjs" create "$bootstrap_manifest" >/dev/null +[[ -z $(node "$root/scripts/release-manifest.mjs" get "$bootstrap_manifest" baseReleaseSha) ]] || { + echo 'bootstrap manifest returned a non-empty production base' >&2 + exit 1 +} RELEASE_DEPLOYED_AT=2026-07-22T00:01:00Z \ RELEASE_DEPLOY_DURATION_SECONDS=17 \ RELEASE_DEPLOY_ACTION=deploy \