润色脚本格式,添加了install.sh脚本判断网络类型的功能

This commit is contained in:
jiaojm
2025-11-30 16:28:16 +08:00
repo.diff.parent 0ea42c04f5
repo.diff.commit 49009eb9a2
repo.diff.stats_desc%!(EXTRA int=3, int=51, int=11)

repo.diff.view_file

@@ -14,13 +14,17 @@ jobs:
- name: build Devstar Image
run: |
make devstar
- name: Install Network Tools
run: |
echo "正在安装 ip 命令..."
sudo apt-get update && sudo apt-get install -y iproute2
- name: start DevStar Container
run: |
# 启动容器
# 启动容器,这里的话需要预先的创建宿主机的对应文件夹
LOGS=$(public/assets/install.sh start \
--port=8082 \
--ssh-port=2224 \
--data-dir=/tmp/devstar_ci \
--data-dir=/tmp/devstar_ci \
--image=devstar-studio:latest 2>&1)
echo "$LOGS"
TARGET_URL=$(echo "$LOGS" | grep -o 'http://[^ ]*' | tail -1 | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g")
@@ -30,7 +34,7 @@ jobs:
make e2e-test TARGET_URL="$TARGET_URL"
env:
GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true"
- name: 4. Upload E2E Test Report
- name: Upload E2E Test Report
if: always()
uses: actions/upload-artifact@v3
with:

repo.diff.view_file

@@ -110,7 +110,20 @@ function start {
mkdir -p $DATA_DIR
sudo chown 1000:1000 $DATA_DIR
sudo chmod 666 /var/run/docker.sock
DOMAIN_NAME=$(hostname -I | awk '{print $1}')
DOMAIN_NAME=$(ip route get 1 2>/dev/null | awk '{print $7; exit}')
if [[ -f "/.dockerenv" ]]; then
if [[ -S "/var/run/docker.sock" ]] && command -v docker >/dev/null 2>&1; then
if docker info 2>/dev/null | grep -q "Storage Driver: vfs"; then
# DinD 环境 - 保持原来的容器IP
: # 什么也不做,使用初始值
else
# DooD 环境 - 获取宿主机IP
DOMAIN_NAME=$(ip route | grep default | awk '{print $3}' 2>/dev/null)
fi
fi
# 普通容器环境保持原来的容器IP
fi
if [ ! -f "${DATA_DIR}/app.ini" ]; then
echo "DOMAIN_NAME=$DOMAIN_NAME"
else

repo.diff.view_file

@@ -3,40 +3,59 @@
# 它会处理所有清理、权限、拉取和执行工作
# 任何命令失败立即退出
set -e
#基础配置与路径定义
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
PROJECT_ROOT=$( cd -- "$SCRIPT_DIR/../.." &> /dev/null && pwd )
export CURRENT_UID=$(id -u)
export CURRENT_GID=$(id -g)
cd "$PROJECT_ROOT"
echo "===== [1/3] 清理旧的测试环境... ====="
# 如果容器已存在,强制删除
if [ "$(docker ps -aq -f name=e2e-test-runner-container)" ]; then
docker rm -f e2e-test-runner-container
fi
# 清理悬空镜像
docker image prune -f
# 清理旧报告和数据,重建目录结构
rm -rf ./tests/e2e/reports ./tests/e2e/test-data
mkdir -p ./tests/e2e/reports/html ./tests/e2e/test-data/devstar_data
chmod -R 777 ./tests/e2e/reports
#这里添加的代码是因为需要执行npm install,我们以当前用户启动测试容器避免root权限冲突所以先预构建文件夹也作为缓存缓存npm install.
mkdir -p ./tests/e2e/node_modules
chmod 777 ./tests/e2e/node_modules
LOCK_FILE="./tests/e2e/package-lock.json"
# 确保 lock 文件存在且可写
if [ ! -f "$LOCK_FILE" ]; then
echo "{}" > "$LOCK_FILE"
fi
chmod 666 "$LOCK_FILE"
echo "===== [2/3] 准备环境变量... ====="
export DEVSTAR_URL=$TARGET_URL
export E2E_MODE="url"
if [ -n "$CI" ] || [ "$CI" = "true" ]; then
echo " [CI环境] 检测到 CI 环境,跳过 curl 安装状态检查..."
export E2E_SKIP_INSTALL="false"
else
echo " 正在检查安装状态..."
PATH_TO_CHECK="/user/login"
EXPECTED_CODE_IF_INSTALLED="200"
PROBE_URL="${TARGET_URL}${PATH_TO_CHECK}"
# 使用 curl 获取 HTTP 状态码
HTTP_CODE=$(curl -L -s -o /dev/null -w "%{http_code}" "$PROBE_URL")
if [ "$HTTP_CODE" -eq "$EXPECTED_CODE_IF_INSTALLED" ]; then
echo " 探测结果: 目标已安装 (在 ${PROBE_URL} 收到 HTTP ${HTTP_CODE})."
export E2E_SKIP_INSTALL="true"
@@ -66,10 +85,14 @@ docker run -d --rm --init --ipc=host \
mcr.microsoft.com/playwright:v1.53.2-jammy \
tail -f /dev/null
echo "容器已启动,正在使用 docker cp 注入代码..."
# 注入代码文件
docker cp "$(pwd)/tests/e2e/package.json" e2e-test-runner-container:/app/package.json
docker cp "$(pwd)/playwright.config.ts" e2e-test-runner-container:/app/playwright.config.ts
docker cp "$(pwd)/tests/e2e/global-setup.ts" e2e-test-runner-container:/app/global-setup.ts
docker cp "$(pwd)/tests/e2e/specs" e2e-test-runner-container:/app/specs
# 在容器内执行安装与测试
docker exec e2e-test-runner-container bash -c "
# 确保 node_modules 目录存在
mkdir -p /app/node_modules
@@ -82,7 +105,11 @@ docker exec e2e-test-runner-container bash -c "
"
EXIT_CODE=$?
set -e
# 导出测试报告
docker cp e2e-test-runner-container:/app/playwright-report/. tests/e2e/reports/html-report/
# 清理测试容器
docker rm -f e2e-test-runner-container
echo "========================================"
if [ $EXIT_CODE -eq 0 ]; then
@@ -91,13 +118,9 @@ else
echo "测试执行失败!"
fi
echo "========================================"
REPORT_DIR="./tests/e2e/reports/"
if [ -f "$REPORT_DIR" ]; then
echo "HTML 报告已生成: $REPORT_DIR"
else
echo "未检测到HTML报告 "
echo "可能是测试运行中途崩溃,或者未生成报告。"
echo "请检查日志或目录: $REPORT_DIR"
fi
echo "HTML 报告已生成: $REPORT_DIR"
echo ""
exit $EXIT_CODE