80 lines
1.8 KiB
Bash
80 lines
1.8 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}"
|
|
|
|
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
|
|
|
|
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" "$runtime_root" <<'PY'
|
|
from pathlib import Path
|
|
import shutil
|
|
import sys
|
|
|
|
src = Path(sys.argv[1]).resolve()
|
|
dst = Path(sys.argv[2]).resolve()
|
|
|
|
skip_names = {
|
|
".git",
|
|
".gitea",
|
|
".github",
|
|
".venv",
|
|
"data",
|
|
"docker-config",
|
|
"depends-data",
|
|
"logs",
|
|
"plugins",
|
|
"acme",
|
|
"backups",
|
|
"bin",
|
|
"_staging",
|
|
}
|
|
skip_suffixes = {".pem", ".key", ".tar", ".tgz", ".zip"}
|
|
|
|
for item in src.iterdir():
|
|
if item.name in skip_names or item.suffix in skip_suffixes:
|
|
continue
|
|
|
|
target = dst / item.name
|
|
if target.exists():
|
|
if target.is_dir() and not target.is_symlink():
|
|
shutil.rmtree(target)
|
|
else:
|
|
target.unlink()
|
|
|
|
if item.is_dir():
|
|
shutil.copytree(
|
|
item,
|
|
target,
|
|
ignore=shutil.ignore_patterns("__pycache__", "*.pyc", "*.pyo"),
|
|
)
|
|
else:
|
|
shutil.copy2(item, target)
|
|
PY
|
|
|
|
cd "$runtime_root"
|
|
docker build -f deploy/server-maibot/Dockerfile.offline -t maibot-offline:latest .
|
|
docker compose -f deploy/server-maibot/docker-compose.server.yml up -d
|