From c03be5291413e80fa545c2069014409c64efaa34 Mon Sep 17 00:00:00 2001 From: jiaojm <13763605353@163.com> Date: Wed, 19 Nov 2025 17:05:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E8=A1=8Cci=E8=84=9A=E6=9C=AC=E7=9A=84?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/devstar-studio-e2e.yaml | 64 ++++++++++++++++++++++++ tests/e2e/Dockerfile | 5 +- tests/e2e/docker-compose.test.yml | 3 +- tests/e2e/run-e2e-tests.sh | 20 +++++--- 4 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 .gitea/workflows/devstar-studio-e2e.yaml diff --git a/.gitea/workflows/devstar-studio-e2e.yaml b/.gitea/workflows/devstar-studio-e2e.yaml new file mode 100644 index 0000000000..11428e488d --- /dev/null +++ b/.gitea/workflows/devstar-studio-e2e.yaml @@ -0,0 +1,64 @@ +name: DevStar E2E Debug Workflow + +on: + workflow_dispatch: + +jobs: + e2e-test-standalone: + runs-on: ubuntu-latest + + steps: + - name: Check out repository code + uses: actions/checkout@v4 + - name: Make Devstar + run : | + make devstar + + - name: 2. Deploy DevStar Container + run: | + echo "===== 2. 正在启动容器... =====" + 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. Wait for DevStar to be Ready + run: | + echo "===== 2.8. 正在等待 DevStar (Gitea) 启动... =====" + echo "强制等待 60 秒..." + sleep 40 + echo "等待完成,假设 DevStar 已就绪。" + + - name: 3. Run E2E Tests (and allow failure) + run: | + make e2e-test TARGET_URL="http://host.docker.internal:80" || true + env: + GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true" + + - name: 3.5. Rescue Screenshot from Container + if: always() + run: | + CONTAINER_ID=$(docker ps -a --filter "name=test-runner" --format "{{.ID}}" | head -n 1) + + if [ -z "$CONTAINER_ID" ]; then + echo "::warning:: 未找到 'test-runner' 容器。无法抢救截图。" + else + echo "正在从容器 $CONTAINER_ID 中复制..." + docker cp $CONTAINER_ID:/tmp/DEBUG-install-page.png ./tests/e2e/reports/DEBUG-install-page.png || echo "Docker CP 失败或截图文件不存在。" + echo "复制完成。" + fi + - name: 4. Upload E2E Test Report + if: always() + uses: actions/upload-artifact@v3 + with: + name: e2e-test-report + path: tests/e2e/reports/ + - name: 5. Display DevStar Container Logs + if: always() + run: | + echo "===== 5. 正在抓取 DevStar (Gitea) 容器日志... =====" + # 'devstar-studio' 是 install.sh 启动的容器的默认名称 + docker logs Devstar-Studio || echo "::warning:: 未能获取 'devstar-studio' 容器日志。" diff --git a/tests/e2e/Dockerfile b/tests/e2e/Dockerfile index 681f919230..5d36aada47 100644 --- a/tests/e2e/Dockerfile +++ b/tests/e2e/Dockerfile @@ -10,14 +10,15 @@ FROM mcr.microsoft.com/playwright:v1.53.2-jammy WORKDIR /app # 3. 复制 "依赖清单" 文件 -COPY package*.json ./ +COPY tests/e2e/package*.json ./ # 4. 安装npm 依赖 (即 @playwright/test) RUN npm install # 5. 复制所有的测试代码到容器中 # (包括 playwright.config.ts, global-setup.ts 和 specs/ 目录) -COPY . . +COPY tests/e2e/global-setup.ts ./tests/e2e/ +COPY tests/e2e/specs/ ./tests/e2e/specs/ # 6. 默认命令 CMD ["npx", "playwright", "test"] diff --git a/tests/e2e/docker-compose.test.yml b/tests/e2e/docker-compose.test.yml index 1b5e851483..bb964fc39a 100644 --- a/tests/e2e/docker-compose.test.yml +++ b/tests/e2e/docker-compose.test.yml @@ -23,7 +23,8 @@ services: test-runner: # 从 'tests/' 目录下的 Dockerfile 构建 build: - context: . + context: ../../ + dockerfile: tests/e2e/Dockerfile # 等待 devstar 的 "healthcheck" 通过后,才启动 user: "${CURRENT_UID}:${CURRENT_GID}" environment: diff --git a/tests/e2e/run-e2e-tests.sh b/tests/e2e/run-e2e-tests.sh index c170eb2980..8018d0fdfc 100755 --- a/tests/e2e/run-e2e-tests.sh +++ b/tests/e2e/run-e2e-tests.sh @@ -64,21 +64,25 @@ if [ -n "$TARGET_URL" ]; then echo " 模式: [URL模式]. 目标: $TARGET_URL" export DEVSTAR_URL=$TARGET_URL export E2E_MODE="url" - echo " 正在检查安装状态..." - PATH_TO_CHECK="/user/login" - EXPECTED_CODE_IF_INSTALLED="200" - PROBE_URL="${TARGET_URL}${PATH_TO_CHECK}" - HTTP_CODE=$(curl -L -s -o /dev/null -w "%{http_code}" "$PROBE_URL") - - if [ "$HTTP_CODE" -eq "$EXPECTED_CODE_IF_INSTALLED" ]; then + 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}" + 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" export E2E_USERNAME export E2E_PASSWORD export E2E_ADMIN_ID - else + else echo "没有安装,下面执行安装脚本! " export E2E_SKIP_INSTALL="false" + fi fi command docker compose \ -f tests/e2e/docker-compose.test.yml \