fix: harden upgrade publication and refresh
This commit is contained in:
@@ -19,12 +19,12 @@ STARTED_PID=
|
||||
cleanup() {
|
||||
local identity root relative
|
||||
for identity in "${TEST_IDENTITIES[@]}"; do test_safe_stop "$identity"; done
|
||||
for root in absent stale nonnumeric wrong-command false-anvil false-vite exact-anvil raw-capture reused atomic matching group term-refusal anchor-race mutated partial local-reset base-canonical base-active sentinel; do
|
||||
for root in absent stale nonnumeric wrong-command false-anvil false-vite exact-anvil raw-capture reused atomic matching group term-refusal anchor-race mutated partial local-reset local-noop base-canonical base-active base-upgrade uncertain-upgrade sentinel; do
|
||||
for relative in \
|
||||
.demo/anvil.pid .demo/anvil.start .demo/anvil.pgid .demo/anvil.log \
|
||||
.demo/vite.pid .demo/vite.start .demo/vite.pgid .demo/vite.log \
|
||||
.demo/sentinel .demo/adjacent.keep tools/process-lib.sh tools/reset-local.sh \
|
||||
deployments/pending.json deployments/anvil.json deployments/active.json deployments/base-sepolia.json \
|
||||
deployments/pending.json deployments/upgrade-pending.json deployments/anvil.json deployments/active.json deployments/base-sepolia.json \
|
||||
web/public/deployment.json web/src/generated/contracts.ts web/node_modules/.bin/vite; do
|
||||
rm -f -- "$TEST_ROOT/$root/$relative"
|
||||
done
|
||||
@@ -171,7 +171,7 @@ assert_anvil_args_rejected() {
|
||||
demo_stop_raw_launch "$root" anvil "$pid" "$start" "$pgid"
|
||||
}
|
||||
|
||||
printf '1..26\n'
|
||||
printf '1..29\n'
|
||||
|
||||
# Catches cleanup treating a missing record as an error or signaling an inferred PID.
|
||||
root=$(make_root absent)
|
||||
@@ -573,14 +573,22 @@ printf 'sentinel\n' >"$root/.demo/sentinel"
|
||||
for path in deployments/pending.json deployments/anvil.json deployments/active.json web/public/deployment.json; do
|
||||
printf '{"network":"anvil","chainId":31337}\n' >"$root/$path"
|
||||
done
|
||||
printf '%s\n' '{"mode":"upgrade","network":"anvil","chainId":31337,"token":"0x1111111111111111111111111111111111111111","proxy":"0x2222222222222222222222222222222222222222","previousImplementation":"0x3333333333333333333333333333333333333333","implementation":"0x4444444444444444444444444444444444444444","owner":"0x5555555555555555555555555555555555555555","deploymentBlock":1,"snapshot":{"proxy":"0x2222222222222222222222222222222222222222","implementation":"0x3333333333333333333333333333333333333333","owner":"0x5555555555555555555555555555555555555555","asset":"0x1111111111111111111111111111111111111111","paused":false,"balances":[{"address":"0x5555555555555555555555555555555555555555","balance":0}],"liabilities":0,"reserves":0,"surplus":0,"deploymentBlock":1,"version":1}}' >"$root/deployments/upgrade-pending.json"
|
||||
printf 'generated ABI\n' >"$root/web/src/generated/contracts.ts"
|
||||
(cd "$root" && bash tools/reset-local.sh >/dev/null)
|
||||
for path in .demo/anvil.pid .demo/anvil.start .demo/anvil.pgid .demo/anvil.log .demo/vite.pid .demo/vite.start .demo/vite.pgid .demo/vite.log deployments/pending.json deployments/anvil.json deployments/active.json web/public/deployment.json web/src/generated/contracts.ts; do
|
||||
for path in .demo/anvil.pid .demo/anvil.start .demo/anvil.pgid .demo/anvil.log .demo/vite.pid .demo/vite.start .demo/vite.pgid .demo/vite.log deployments/pending.json deployments/upgrade-pending.json deployments/anvil.json deployments/active.json web/public/deployment.json web/src/generated/contracts.ts; do
|
||||
assert_absent "$root/$path"
|
||||
done
|
||||
assert_exists "$root/.demo/sentinel"
|
||||
pass 'reset removes only explicitly known local runtime and generated files'
|
||||
|
||||
# Catches reset leaving a strictly validated local no-op upgrade marker behind.
|
||||
root=$(make_root local-noop)
|
||||
printf '%s\n' '{"mode":"noop","chainId":31337,"observedBlock":9,"ownerNonce":3,"proxy":"0x2222222222222222222222222222222222222222","implementation":"0x4444444444444444444444444444444444444444"}' >"$root/deployments/upgrade-pending.json"
|
||||
(cd "$root" && bash tools/reset-local.sh >/dev/null)
|
||||
assert_absent "$root/deployments/upgrade-pending.json"
|
||||
pass 'reset removes a strictly validated local no-op upgrade marker'
|
||||
|
||||
# Catches a local reset corrupting a canonical Base Sepolia deployment.
|
||||
root=$(make_root base-canonical)
|
||||
printf '{"network":"baseSepolia","chainId":84532,"marker":"canonical"}\n' >"$root/deployments/base-sepolia.json"
|
||||
@@ -602,6 +610,22 @@ browser_before=$(sha256sum "$root/web/public/deployment.json")
|
||||
[[ "$browser_before" == "$(sha256sum "$root/web/public/deployment.json")" ]] || fail 'Base browser manifest changed'
|
||||
pass 'Base active and browser manifests survive reset byte-for-byte'
|
||||
|
||||
# Catches reset deleting a valid Base-shaped upgrade marker that may require public recovery.
|
||||
root=$(make_root base-upgrade)
|
||||
printf '%s\n' '{"mode":"upgrade","network":"baseSepolia","chainId":84532,"token":"0x1111111111111111111111111111111111111111","proxy":"0x2222222222222222222222222222222222222222","previousImplementation":"0x3333333333333333333333333333333333333333","implementation":"0x4444444444444444444444444444444444444444","owner":"0x5555555555555555555555555555555555555555","deploymentBlock":1,"snapshot":{"proxy":"0x2222222222222222222222222222222222222222","implementation":"0x3333333333333333333333333333333333333333","owner":"0x5555555555555555555555555555555555555555","asset":"0x1111111111111111111111111111111111111111","paused":false,"balances":[{"address":"0x5555555555555555555555555555555555555555","balance":0}],"liabilities":0,"reserves":0,"surplus":0,"deploymentBlock":1,"version":1}}' >"$root/deployments/upgrade-pending.json"
|
||||
base_upgrade_before=$(sha256sum "$root/deployments/upgrade-pending.json")
|
||||
(cd "$root" && bash tools/reset-local.sh >/dev/null)
|
||||
[[ "$base_upgrade_before" == "$(sha256sum "$root/deployments/upgrade-pending.json")" ]] || fail 'Base upgrade marker changed'
|
||||
pass 'a Base-shaped upgrade marker survives reset byte-for-byte'
|
||||
|
||||
# Catches reset guessing that malformed or incomplete upgrade staging is safe to delete.
|
||||
root=$(make_root uncertain-upgrade)
|
||||
printf '%s\n' '{"mode":"upgrade","chainId":31337}' >"$root/deployments/upgrade-pending.json"
|
||||
uncertain_before=$(sha256sum "$root/deployments/upgrade-pending.json")
|
||||
(cd "$root" && bash tools/reset-local.sh >/dev/null)
|
||||
[[ "$uncertain_before" == "$(sha256sum "$root/deployments/upgrade-pending.json")" ]] || fail 'uncertain upgrade marker changed'
|
||||
pass 'a malformed or uncertain upgrade marker survives reset byte-for-byte'
|
||||
|
||||
# Catches cleanup broadening from exact files to recursive .demo deletion.
|
||||
root=$(make_root sentinel)
|
||||
printf 'keep me\n' >"$root/.demo/adjacent.keep"
|
||||
|
||||
Reference in New Issue
Block a user