diff --git a/scripts/templates/ql3-local-alpha-upgrade-cutover-rehearsal.sh b/scripts/templates/ql3-local-alpha-upgrade-cutover-rehearsal.sh index eb3ff062..aa377832 100644 --- a/scripts/templates/ql3-local-alpha-upgrade-cutover-rehearsal.sh +++ b/scripts/templates/ql3-local-alpha-upgrade-cutover-rehearsal.sh @@ -16,6 +16,10 @@ fail() { exit 1 } +phase() { + printf '%s\n' "QingLong Local Alpha cutover phase: $1" >&2 +} + usage() { printf '%s\n' \ 'usage: sh upgrade-cutover-rehearsal.sh edge|standalone /absolute/legacy-data-root /absolute/new/rehearsal-root [legacy-container-name] [target-container-name]' >&2 @@ -158,6 +162,7 @@ cat >"$rehearsal_root/commands/owner-credential-install.json" <"$rehearsal_root/commands/data-directory-transform.json" <"$rehearsal_root/commands/legacy-stop.json" <"$rehearsal_root/commands/data-directory-apply.json" <"$rehearsal_root/commands/adopted-prepare.json" <"$rehearsal_root/commands/target-start.json" <"$rehearsal_root/commands/target-stop.json" chmod 0600 "$rehearsal_root/commands/target-stop.json" +phase 'stop target and prove rollback candidate' run_deploy cutover-target-stop target-stop.json target-stop.result.json grep -q '"reconciliation":"rollback_candidate"' "$rehearsal_root/results/target-stop.result.json" || fail 'target stop did not produce a clean rollback candidate' [ "$(sha256sum "$legacy_root/db/database.sqlite" | sed 's/ .*//')" = "$legacy_sha256" ] || fail 'legacy database changed during rehearsal' diff --git a/test/back/ql3LocalAlphaTrialKitBundle.test.cjs b/test/back/ql3LocalAlphaTrialKitBundle.test.cjs index 4bb7a9ce..c9cd8d6b 100644 --- a/test/back/ql3LocalAlphaTrialKitBundle.test.cjs +++ b/test/back/ql3LocalAlphaTrialKitBundle.test.cjs @@ -228,6 +228,42 @@ test('materializes and offline-audits one closed two-image trial kit', (t) => { cutoverRehearsalContents, /"dockerSocketPath":"\/var\/run\/docker\.sock"|dst=\/var\/run\/docker\.sock/, ); + const legacyStopTemplate = cutoverRehearsalContents.match( + /cat >"\$rehearsal_root\/commands\/legacy-stop\.json" <