79 lines
2.5 KiB
Bash
Executable File
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/"
|