#!/usr/bin/env bash set -euo pipefail release=/home/ps/gateway-502-20260918 cd "$release" test ! -f deployed.json test "$(docker inspect --format '{{.Image}}' im-admin-gateway-1)" = sha256:888c99e738cd3ffed483571136731e804ddaf6b78d6cbbf339ace06292336e18 test "$(sha256sum /opt/im-admin/wechat_rpa/model_gateway.py | cut -d' ' -f1)" = ca0c1779d502380c290a9e540b839eaa3d0a415dbf32e47313b6257409427530 sha256sum -c checksums.txt docker inspect --format '{{.Image}}' im-admin-gateway-1 > image-before.txt docker tag "$(cat image-before.txt)" zyt/wecom-admin:before-gateway-502-20260918 cp -p /opt/im-admin/wechat_rpa/model_gateway.py model_gateway.before.py docker build --network=none --pull=false -f Dockerfile.overlay -t zyt/wecom-admin:gateway-502-20260918 . > build.log 2>&1 docker run --rm --network=none --read-only --tmpfs /tmp:size=512m,mode=1777 --tmpfs /data:size=64m,mode=1777 -v "$release/tests:/gateway-tests:ro" -e PYTHONPATH=/gateway-tests:/app/wechat_rpa zyt/wecom-admin:gateway-502-20260918 python -X utf8 -B -m unittest test_model_gateway test_gateway_failure_audit test_gateway_guard_audit test_gateway_media_audit test_model_usage_collection -q > candidate-tests.log 2>&1 rollback_on_error() { rc=$?; trap - ERR; bash "$release/rollback.sh"; exit "$rc"; } trap rollback_on_error ERR cp -p payload/model_gateway.py /opt/im-admin/wechat_rpa/model_gateway.py docker tag zyt/wecom-admin:gateway-502-20260918 zyt/wecom-admin:current cd /opt/im-admin/deploy/im-admin docker compose stop -t 65 gateway docker compose up -d --no-build --no-deps --wait --wait-timeout 120 gateway curl -fsS -o /dev/null http://127.0.0.1:18770/health curl -fsS -o /dev/null http://127.0.0.1:18766/api/v2/health docker exec -i im-admin-gateway-1 python - <<'PY' > "$release/deployed.json" import hashlib,json,model_gateway from pathlib import Path print(json.dumps({'file_sha256':hashlib.sha256(Path(model_gateway.__file__).read_bytes()).hexdigest(),'detail_code':model_gateway._http_failure(400,{'error':{'message':'max_tokens above maximum'}})[0],'health':'ok'})) PY trap - ERR cat "$release/deployed.json"