scripts/butler-runtime-smoke.sh
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env bash
# Runtime ops smoke — 灵文1号(默认)或 普通试点项目(轻量 jobs)
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"
PROJECT="${1:-灵文1号}"
if [[ -f .env ]]; then
set -a
set +u
# shellcheck disable=SC1091
source .env
set -u
set +a
fi
export PYTHONPATH="${PYTHONPATH:-.}:."
# 冒烟默认不推微信(避免 iLink 限流);真机推送验证用 butler-wechat-push-verify.sh
# 或 BUTLER_RUNTIME_SMOKE_PUSH=1
if [[ "${BUTLER_RUNTIME_SMOKE_PUSH:-0}" != "1" ]]; then
export BUTLER_RUNTIME_PUSH=0
fi
export BUTLER_RUNTIME_PUSH_COOLDOWN_SECONDS="${BUTLER_RUNTIME_PUSH_COOLDOWN_SECONDS:-30}"
export WECHAT_SEND_CHUNK_RETRIES="${WECHAT_SEND_CHUNK_RETRIES:-6}"
export WECHAT_SEND_CHUNK_RETRY_DELAY_SECONDS="${WECHAT_SEND_CHUNK_RETRY_DELAY_SECONDS:-2}"
echo "== runtime unit tests (incl. mutating approval gate) =="
python3 -m pytest tests/test_runtime.py -q --tb=line
echo ""
echo "== list jobs ($PROJECT) =="
python3 -m butler.main runtime list --project "$PROJECT"
_run() {
local id="$1"
shift
echo ""
echo "== run $id =="
python3 -m butler.main runtime run "$id" --project "$PROJECT" "$@"
}
if [[ "$PROJECT" == "普通试点项目" ]]; then
_run pilot-heartbeat --no-notify
_run test-unit-smoke --no-notify --force
else
_run factory-status-daily --no-notify
if [[ "${BUTLER_RUNTIME_PUSH:-0}" == "1" ]]; then
echo ""
echo "== cooldown before next runtime push =="
sleep "${BUTLER_RUNTIME_PUSH_COOLDOWN_SECONDS}"
else
echo ""
echo "== skip push cooldown (BUTLER_RUNTIME_PUSH=0) =="
fi
_run publish-preflight --no-notify
echo ""
echo "== agent runtime bridge (list_runtime_jobs / run_runtime_job) =="
export BUTLER_RUNTIME_ENABLED=1
python3 -m pytest tests/test_dev_ops_p2.py::TestRuntimeBridgeTools -q --tb=line
if [[ "${BUTLER_RUNTIME_RUN_CONSISTENCY:-0}" == "1" ]]; then
_run consistency-weekly --no-notify
else
echo ""
echo "Skip consistency-weekly (set BUTLER_RUNTIME_RUN_CONSISTENCY=1 to run; may take several minutes)"
fi
fi
echo ""
echo "== timer status =="
systemctl --user --no-pager list-timers 'butler-runtime*' 2>/dev/null || echo "(no user timer)"
echo ""
echo "Runtime smoke done."