#!/usr/bin/env bash
# Run only in an ephemeral --network none Docker container, never on production.
set -euo pipefail
[[ -f /.dockerenv && -f /fixture/old.php ]]
root=/workspace/wwwroot/zhct_jsr/project
mkdir -p "$root/application/p/logic" /tmp/mockbin
cp /fixture/old.php "$root/application/p/logic/MealOrder.php"
printf "<?php\ndefine('BUSINESS', 'zhct_jsr');\n" > "$root/env.php"
printf 'KEEP_FRONTEND' > "$root/unrelated-asset.txt"
chmod 755 "$root/application/p/logic/MealOrder.php"
cat > /tmp/mockbin/curl <<'MOCK'
#!/bin/sh
if test -f /tmp/fail-http; then printf 500; else case "$*" in */dist/*|*/p/mealOrder/detail*) printf 200 ;; *) printf 301 ;; esac; fi
MOCK
chmod +x /tmp/mockbin/curl
printf '#!/bin/sh\ncat /etc/hostname\n' > /tmp/mockbin/hostname
chmod +x /tmp/mockbin/hostname
export PATH=/tmp/mockbin:$PATH
old=d4805ec00a7cea47131a06d6e2a1d3258bd6b28f15938e65ebb8952fd16899e1
new=089df04e521f98aca802ade3bc51e9c9ab13857894a9c7558a9b73723a5a11fd
hash() { sha256sum "$root/application/p/logic/MealOrder.php" | cut -d' ' -f1; }
bash /delivery/deploy.sh
[[ "$(hash)" == "$new" && "$(stat -c %a "$root/application/p/logic/MealOrder.php")" == 755 ]]
printf 'PASS apply and permissions\n'
bash /delivery/deploy.sh
[[ "$(hash)" == "$new" ]]
printf 'PASS idempotent retry\n'
bash /delivery/rollback.sh
[[ "$(hash)" == "$old" ]]
printf 'PASS explicit rollback\n'
touch /tmp/fail-http
if bash /delivery/deploy.sh; then exit 40; fi
[[ "$(hash)" == "$old" ]]
printf 'PASS postcheck failure restores old file\n'
rm /tmp/fail-http
printf '\n// unrelated live edit\n' >> "$root/application/p/logic/MealOrder.php"
unexpected=$(hash)
if bash /delivery/deploy.sh; then exit 41; fi
[[ "$(hash)" == "$unexpected" ]]
if bash /delivery/rollback.sh; then exit 42; fi
[[ "$(hash)" == "$unexpected" ]]
printf 'PASS wrong baseline refuses deploy and rollback\n'
[[ "$(cat "$root/unrelated-asset.txt")" == KEEP_FRONTEND ]]
printf 'PASS unrelated assets preserved\n'
