80 lines
2.2 KiB
Bash
80 lines
2.2 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
release_dir="${1:?usage: activate-release.sh <release-dir>}"
|
|
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
|