删除dockerfile,把数据挂载放在脚本里使用

This commit is contained in:
jiaojm
2025-11-21 14:20:24 +08:00
repo.diff.parent 50d912e652
repo.diff.commit a57ed29d28
repo.diff.stats_desc%!(EXTRA int=6, int=34, int=65)

repo.diff.view_file

@@ -12,32 +12,17 @@ jobs:
steps: steps:
- name: Check out repository code - name: Check out repository code
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: 1.0 make devstar - name: 1. Build Devstar image
run: | run: |
make devstar make devstar
- name: 1.5 Clean Up Old Data & Containers - name: 1.5 Clean Up Old Data & Containers
run: | run: |
echo "正在清理旧环境..." echo "正在清理旧环境..."
public/assets/install.sh clean public/assets/install.sh clean
- name: 2. Deploy DevStar Container - name: 2. start DevStar Container
run: | run: |
echo "===== 2. 正在启动容器... =====" echo "===== 2. 正在启动容器... ====="
public/assets/install.sh start --image=devstar-studio:latest public/assets/install.sh start --image=devstar-studio:latest
- name: 2.5. Create Report Directory
run: |
echo "===== 2.5. 正在创建报告目录... ====="
mkdir -p tests/e2e/reports/
sudo chmod -R 777 tests/e2e/reports/
- name: 2.8. Get IP & Wait for DevStar (Health Check)
run: |
echo "===== 2.8. 获取 DevStar IP 并等待就绪... ====="
CONTAINER_NAME=$(docker ps -a --filter "ancestor=devstar-studio:latest" --format "{{.Names}}" | head -n 1)
echo "Found Container Name: $CONTAINER_NAME"
DEVSTAR_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINER_NAME)
echo "Found DevStar Internal IP: $DEVSTAR_IP"
sleep 30
- name: 3. Run E2E Tests - name: 3. Run E2E Tests
run: | run: |
TARGET_URL="http://localhost:80" TARGET_URL="http://localhost:80"
@@ -45,3 +30,6 @@ jobs:
env: env:
GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true" GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true"
##TODO 如何输出一份可读的测试报告,现在成功的输出了一些截图和日志 ##TODO 如何输出一份可读的测试报告,现在成功的输出了一些截图和日志
- name: report E2E TESTS results
run: |
##TODO 这里后续完善测试报告的生成和上传到指定的pr评论中

2
.gitignore repo.diff.vendored
repo.diff.view_file

@@ -69,6 +69,8 @@ cpu.out
/tests/e2e/gitea-e2e-* /tests/e2e/gitea-e2e-*
/tests/e2e/indexers-* /tests/e2e/indexers-*
/tests/e2e/reports /tests/e2e/reports
/tests/e2e/node_modules/
/tests/e2e/package-lock.json
/tests/e2e/test-data /tests/e2e/test-data
/tests/e2e/test-artifacts /tests/e2e/test-artifacts
/tests/e2e/test-snapshots /tests/e2e/test-snapshots

repo.diff.view_file

@@ -1,11 +0,0 @@
# 1. 忽略 Node.js 依赖目录
/node_modules
# 2. 忽略本地的测试报告和结果
/reports
/test-data
/test-artifacts
/Readme.md
/utils_e2e.ts
/utils_e2e_test.go
/e2e_test.go

repo.diff.view_file

@@ -1,25 +0,0 @@
#
# 这是 "test-runner" 服务的 Dockerfile
#
# 1. 使用微软官方的 Playwright 镜像
# 它已经内置了所有浏览器 (Chromium, Firefox, WebKit) 和操作系统依赖
FROM mcr.microsoft.com/playwright:v1.53.2-jammy
# 2. 设置工作目录
WORKDIR /app
# 3. 复制 "依赖清单" 文件
COPY tests/e2e/package*.json ./
COPY playwright.config.ts ./
# 4. 安装npm 依赖 (即 @playwright/test)
RUN npm install
# 5. 复制所有的测试代码到容器中
# (包括 global-setup.ts 和 specs/ 目录)
COPY tests/e2e/global-setup.ts ./
COPY tests/e2e/specs/ ./specs/
# 6. 默认命令
CMD ["npx", "playwright", "test"]

repo.diff.view_file

@@ -15,4 +15,3 @@ make e2e-test TARGET_URL="..." E2E_USERNAME="your_name" E2E_PASSWORD="your_passw
##说明:测试的用法 ##说明:测试的用法
1.通过make devstar 本地代码构建镜像public/assets/install.sh start --image=devstar-studio:latest 通过install.sh脚本创建容器并在make e2e-test TARGET_URL="..."中输入devstar容器的url如果首次安装会执行安装脚本如果已经安装过请输入你的账号密码否则按默认账号和密码登录。 1.通过make devstar 本地代码构建镜像public/assets/install.sh start --image=devstar-studio:latest 通过install.sh脚本创建容器并在make e2e-test TARGET_URL="..."中输入devstar容器的url如果首次安装会执行安装脚本如果已经安装过请输入你的账号密码否则按默认账号和密码登录。
2.测试用例的添加方法所有的测试按照功能分组devcontainerappstorerunner等等每一个test函数对应一组或一个测试用例,按照流程增加对应的测试用例和测试脚本。 2.测试用例的添加方法所有的测试按照功能分组devcontainerappstorerunner等等每一个test函数对应一组或一个测试用例,按照流程增加对应的测试用例和测试脚本。

repo.diff.view_file

@@ -13,7 +13,7 @@ export CURRENT_UID=$(id -u)
export CURRENT_GID=$(id -g) export CURRENT_GID=$(id -g)
# 切换到项目根目录 # 切换到项目根目录
cd "$PROJECT_ROOT" cd "$PROJECT_ROOT"
echo "===== [1/4] 清理旧的测试环境... =====" echo "===== [1/3] 清理旧的测试环境... ====="
#删除旧的e2e-runner #删除旧的e2e-runner
if [ "$(docker ps -aq -f name=e2e-test-runner-container)" ]; then if [ "$(docker ps -aq -f name=e2e-test-runner-container)" ]; then
docker rm -f e2e-test-runner-container docker rm -f e2e-test-runner-container
@@ -25,10 +25,20 @@ rm -rf ./tests/e2e/reports ./tests/e2e/test-data
mkdir -p ./tests/e2e/reports/html ./tests/e2e/test-data/devstar_data mkdir -p ./tests/e2e/reports/html ./tests/e2e/test-data/devstar_data
#赋予目录权限,防止挂载后容器无权写入 #赋予目录权限,防止挂载后容器无权写入
chmod -R 777 ./tests/e2e/reports chmod -R 777 ./tests/e2e/reports
#这里添加的代码是因为需要执行npm install,我们以当前用户启动测试容器避免root权限冲突所以先预构建文件夹也作为缓存缓存npm install.
echo "处理 node_modules 权限..."
mkdir -p ./tests/e2e/node_modules
chmod 777 ./tests/e2e/node_modules
LOCK_FILE="./tests/e2e/package-lock.json"
if [ ! -f "$LOCK_FILE" ]; then
echo "{}" > "$LOCK_FILE"
fi
# 给它满权限,让 npm 能改
chmod 666 "$LOCK_FILE"
echo "清理完成。" echo "清理完成。"
echo "" echo ""
echo "===== [2/4] 准备环境变量... =====" echo "===== [2/3] 准备环境变量... ====="
# 检查从 Makefile 传来的 TARGET_URL 变量是否为空 # 检查从 Makefile 传来的 TARGET_URL 变量是否为空
echo " 检查devstar位置:TARGET_URL" echo " 检查devstar位置:TARGET_URL"
export DEVSTAR_URL=$TARGET_URL export DEVSTAR_URL=$TARGET_URL
@@ -53,12 +63,7 @@ else
fi fi
echo "" echo ""
echo "===== [3/4] 构建测试镜像... =====" echo "===== [3/3] 启动容器并运行测试... ====="
docker build -t e2e-test-runner -f tests/e2e/Dockerfile .
echo ""
echo "===== [4/4] 启动容器并运行测试... ====="
set +e set +e
docker run --rm --init --ipc=host \ docker run --rm --init --ipc=host \
@@ -81,12 +86,23 @@ docker run --rm --init --ipc=host \
`# 挂载 Volume ` \ `# 挂载 Volume ` \
-v /var/run/docker.sock:/var/run/docker.sock \ -v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd)/tests/e2e/reports":/app/playwright-report \ -v "$(pwd)/tests/e2e/reports":/app/playwright-report \
-v "$(pwd)/tests/e2e/package.json":/app/package.json \
-v "$(pwd)/playwright.config.ts":/app/playwright.config.ts \
-v "$(pwd)/tests/e2e/global-setup.ts":/app/global-setup.ts \
-v "$(pwd)/tests/e2e/specs":/app/specs \
-v "$(pwd)/tests/e2e/node_modules":/app/node_modules \
-v "$(pwd)/tests/e2e/package-lock.json":/app/package-lock.json \
\
-w /app \
\
`# 临时 npm 缓存目录,防止权限问题` \
-e npm_config_cache=/tmp/npm-cache \
-e HOME=/tmp \
\ \
`# 镜像名` \ `# 镜像名` \
e2e-test-runner \ mcr.microsoft.com/playwright:v1.53.2-jammy \
\
`# 运行命令` \ `# 运行命令` \
npx playwright test bash -c "echo '正在安装依赖...' && npm install --no-package-lock&& echo '依赖安装完成,开始测试...' && npx playwright test"
# 捕获 test-runner 的退出码 # 捕获 test-runner 的退出码
EXIT_CODE=$? EXIT_CODE=$?