Files
filecodebox/deploy/1panel/test-env/deploy-test.sh
T
2026-06-05 08:49:20 +08:00

79 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
REPO_DIR="${REPO_DIR:-/opt/src/filecodebox}"
TEST_DIR="${TEST_DIR:-/opt/1panel/apps/filecodebox/filecodebox-test}"
PROD_DIR="${PROD_DIR:-/opt/1panel/apps/filecodebox/filecodebox}"
BRANCH="${BRANCH:-test/custom-admin-ui}"
IMAGE="${IMAGE:-local/filecodebox:test-custom-admin-ui}"
PORT="${PORT:-40158}"
COPY_PROD_DATA="${COPY_PROD_DATA:-0}"
log() { printf '\033[1;34m[deploy-test]\033[0m %s\n' "$*"; }
err() { printf '\033[1;31m[deploy-test]\033[0m %s\n' "$*" >&2; }
require_cmd() {
command -v "$1" >/dev/null 2>&1 || { err "missing command: $1"; exit 1; }
}
require_cmd git
require_cmd docker
require_cmd curl
log "repo: $REPO_DIR"
cd "$REPO_DIR"
current_branch="$(git rev-parse --abbrev-ref HEAD)"
if [[ "$current_branch" != "$BRANCH" ]]; then
err "当前分支是 $current_branch,不是 $BRANCH。请先切到测试分支:git checkout $BRANCH"
exit 2
fi
if ! git diff --quiet || ! git diff --cached --quiet; then
log "检测到未提交改动:会用当前工作区内容构建测试镜像"
fi
log "sync test deployment directory"
mkdir -p "$TEST_DIR/custom" "$TEST_DIR/data"
cp -a deploy/1panel/current-app/custom/fcb_extra_patch.py "$TEST_DIR/custom/fcb_extra_patch.py"
cp -a deploy/1panel/test-env/Dockerfile "$TEST_DIR/custom/Dockerfile"
cp -a deploy/1panel/test-env/docker-compose.yml "$TEST_DIR/docker-compose.yml"
if [[ "$COPY_PROD_DATA" == "1" ]]; then
log "refresh test data from production copy"
mkdir -p "$TEST_DIR/backups"
if [[ -f "$TEST_DIR/data/filecodebox.db" ]]; then
cp -a "$TEST_DIR/data/filecodebox.db" "$TEST_DIR/backups/filecodebox.db.before-refresh.$(date +%Y%m%d%H%M%S)"
fi
rsync -a --delete "$PROD_DIR/data/" "$TEST_DIR/data/"
fi
log "build $IMAGE"
cd "$TEST_DIR"
docker compose build filecodebox-test
log "start/recreate test container"
docker compose up -d --no-build filecodebox-test
log "wait for http://127.0.0.1:$PORT/"
for i in $(seq 1 30); do
if curl -fsS "http://127.0.0.1:$PORT/" >/tmp/filecodebox-test-index.html; then
break
fi
sleep 1
if [[ "$i" == "30" ]]; then
err "test environment did not become ready"
docker logs --tail 80 filecodebox-test || true
exit 3
fi
done
log "verify custom asset"
if ! grep -q 'fcb-analytics.js' /tmp/filecodebox-test-index.html; then
err "测试环境没有加载 fcb-analytics.js,部署异常"
exit 4
fi
docker ps --filter name=filecodebox-test --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'
log "OK: test environment is ready at http://127.0.0.1:$PORT/"