#!/usr/bin/env bash set -euo pipefail release_dir="${1:?usage: activate-release.sh }" runtime_root="${MAIBOT_RUNTIME_ROOT:-/root/maibot-offline}" base_image="${MAIBOT_BASE_IMAGE:-maibot-offline:latest}" case "$runtime_root" in /root/maibot-offline|/root/maibot-offline/*) ;; *) echo "runtime root must stay under /root/maibot-offline" >&2 exit 1 ;; esac if [ ! -d "$release_dir" ]; then echo "release dir not found: $release_dir" >&2 exit 1 fi if ! docker image inspect "$base_image" >/dev/null 2>&1; then echo "base image not found locally: $base_image" >&2 echo "bootstrap it once with deploy/server-maibot/Dockerfile.offline before using the release pipeline" >&2 exit 1 fi for dep_file in pyproject.toml uv.lock; do if [ -f "$runtime_root/$dep_file" ] && ! cmp -s "$release_dir/$dep_file" "$runtime_root/$dep_file"; then echo "dependency metadata changed: $dep_file" >&2 echo "refresh the local base image with deploy/server-maibot/Dockerfile.offline before using the release pipeline" >&2 exit 1 fi done release_id="$(basename "$release_dir")" release_image="maibot-offline:${release_id}" mkdir -p \ "$runtime_root" \ "$runtime_root/data/MaiMBot" \ "$runtime_root/data/MaiMBot/emoji" \ "$runtime_root/data/MaiMBot/plugins" \ "$runtime_root/data/MaiMBot/logs" \ "$runtime_root/data/qq" \ "$runtime_root/depends-data" \ "$runtime_root/docker-config/mmc" \ "$runtime_root/docker-config/napcat" python3 - "$release_dir/deploy/server-maibot" "$runtime_root/deploy/server-maibot" <<'PY' from pathlib import Path import shutil import sys src = Path(sys.argv[1]).resolve() dst = Path(sys.argv[2]).resolve() if dst.exists(): shutil.rmtree(dst) shutil.copytree( src, dst, ignore=shutil.ignore_patterns("__pycache__", "*.pyc", "*.pyo"), ) PY docker build \ --build-arg "MAIBOT_BASE_IMAGE=${base_image}" \ -f "$release_dir/deploy/server-maibot/Dockerfile.release" \ -t "$release_image" \ "$release_dir" docker tag "$release_image" maibot-offline:latest cd "$runtime_root" MAIBOT_CORE_IMAGE="$release_image" docker compose \ --project-name maibot-offline \ -f deploy/server-maibot/docker-compose.server.yml \ up -d