From 166113b07de3245a4e76ae449cf19c125c52a5c3 Mon Sep 17 00:00:00 2001 From: jiaojm <13763605353@163.com> Date: Thu, 20 Nov 2025 18:25:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81=EF=BC=8C?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/devstar-studio-e2e.yaml | 15 ++---- Makefile | 7 --- tests/e2e/Dockerfile | 2 +- tests/e2e/docker-compose.override.yml | 5 -- tests/e2e/docker-compose.test.yml | 24 ++-------- tests/e2e/global-setup.ts | 30 +----------- tests/e2e/run-e2e-tests.sh | 59 +----------------------- tests/e2e/specs/utils.e2e.ts | 7 --- 8 files changed, 11 insertions(+), 138 deletions(-) delete mode 100644 tests/e2e/docker-compose.override.yml diff --git a/.gitea/workflows/devstar-studio-e2e.yaml b/.gitea/workflows/devstar-studio-e2e.yaml index e51c02fe61..52f4ff535f 100644 --- a/.gitea/workflows/devstar-studio-e2e.yaml +++ b/.gitea/workflows/devstar-studio-e2e.yaml @@ -12,29 +12,21 @@ jobs: steps: - name: Check out repository code uses: actions/checkout@v4 - - name: make devstar + - name: 1.0 make devstar run: | make devstar - name: 1.5 Clean Up Old Data & Containers run: | echo "正在清理旧环境..." public/assets/install.sh clean - docker volume rm devstar_data_vol || true - - name: 2. Deploy DevStar Container run: | echo "===== 2. 正在启动容器... =====" - # 说明:install.sh 默认使用宿主机路径 (~/devstar_data) 挂载。 - # 在 CI 环境中,可能会导致严重的权限问题 ,比如之前写入文件失败导致容器一直重启。 - # 解决方案:动态修改脚本副本,强制将其替换为 Docker 命名卷 。 - # 这种修改仅在本次 CI 运行中生效,不会影响源码仓库。 - - sed -i 's|~/devstar_data|devstar_data_vol|g' public/assets/install.sh - 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/ @@ -47,7 +39,6 @@ jobs: 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 run: | diff --git a/Makefile b/Makefile index eca2d151f2..fd042a1887 100644 --- a/Makefile +++ b/Makefile @@ -944,13 +944,6 @@ docker: docker build --disable-content-trust=false -t $(DOCKER_REF) . # support also build args docker build --build-arg GITEA_VERSION=v1.2.3 --build-arg TAGS="bindata sqlite sqlite_unlock_notify" - -ifeq ($(TARGET_URL),) - E2E_DEPS = devstar -else - E2E_DEPS = -endif - .PHONY: e2e-test e2e-test: $(E2E_DEPS) @echo "正在启动E2E-TEST..." diff --git a/tests/e2e/Dockerfile b/tests/e2e/Dockerfile index be31e6415f..9fdf68f2d5 100644 --- a/tests/e2e/Dockerfile +++ b/tests/e2e/Dockerfile @@ -17,7 +17,7 @@ COPY playwright.config.ts ./ RUN npm install # 5. 复制所有的测试代码到容器中 -# (包括 playwright.config.ts, global-setup.ts 和 specs/ 目录) +# (包括 global-setup.ts 和 specs/ 目录) COPY tests/e2e/global-setup.ts ./ COPY tests/e2e/specs/ ./specs/ diff --git a/tests/e2e/docker-compose.override.yml b/tests/e2e/docker-compose.override.yml deleted file mode 100644 index 14e18b8289..0000000000 --- a/tests/e2e/docker-compose.override.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - test-runner: - depends_on: - devstar: - condition: service_healthy diff --git a/tests/e2e/docker-compose.test.yml b/tests/e2e/docker-compose.test.yml index b57dfd335e..98e64d792a 100644 --- a/tests/e2e/docker-compose.test.yml +++ b/tests/e2e/docker-compose.test.yml @@ -1,25 +1,7 @@ version: '3.8' -services: - # 服务一: DevStar - devstar: - #现在make devstar负责构建镜像 - image: devstar-studio:latest - pull_policy: never - ports: - - "80:3000" - - "2222:2222" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - ./test-data/devstar_data:/var/lib/gitea - - ./test-data/devstar_data:/etc/gitea - # 健康检查。test-runner 会等待这个检查通过 - healthcheck: - test: ["CMD-SHELL", "curl -f http://localhost:3000/ || exit 1"] - interval: 10s - timeout: 5s - retries: 30 - # 服务二: Playwright +services: + # 服务: Playwright test-runner: # 从 'tests/' 目录下的 Dockerfile 构建 build: @@ -27,7 +9,7 @@ services: dockerfile: tests/e2e/Dockerfile # 等待 devstar 的 "healthcheck" 通过后,才启动 user: "${CURRENT_UID}:${CURRENT_GID}" - network_mode: "${E2E_NETWORK_MODE:-bridge}" + network_mode: "host" environment: - DEVSTAR_URL=${DEVSTAR_URL} - E2E_SKIP_INSTALL=${E2E_SKIP_INSTALL} diff --git a/tests/e2e/global-setup.ts b/tests/e2e/global-setup.ts index 1dd7bc0bc0..2fa05979f7 100644 --- a/tests/e2e/global-setup.ts +++ b/tests/e2e/global-setup.ts @@ -39,34 +39,8 @@ async function globalSetup(config: FullConfig) { await page.screenshot({ path: 'playwright-report/global-setup-login-failure.png' }); throw error; } - } else if (mode === 'compose') { - console.log('[GlobalSetup] 模式: 构建(Compose). 正在执行构建模式的安装脚本...'); - try { - const hostGateway = env.DOCKER_HOST_GATEWAY || '172.17.0.1'; - const giteaBaseURL = `http://${hostGateway}:80`; - const serverDomain = hostGateway; - const browser = await chromium.launch(); - await page.goto(baseURL, { timeout: 15000 }); - console.log('[GlobalSetup] 检测到安装界面!正在开始自动化安装...'); - await page.getByRole('textbox', { name: 'Server Domain *' }).fill(serverDomain); - await page.getByRole('textbox', { name: 'Gitea Base URL *' }).fill(giteaBaseURL); - await page.getByText('Server and Third-Party Service Settings').click(); - await page.getByRole('checkbox', { name: 'Enable user sign-in via Wechat QR Code.' }).uncheck(); - await page.getByRole('checkbox', { name: 'Require a CAPTCHA for user' }).uncheck(); - await page.getByText('Administrator Account Settings').click(); - await page.getByRole('textbox', { name: 'Administrator Username' }).fill('testuser'); - await page.getByRole('textbox', { name: 'Email Address' }).fill('ilovcatlyn750314@gmail.com'); - await page.getByRole('textbox', { name: 'Password', exact: true }).fill('12345678'); - await page.getByRole('textbox', { name: 'Confirm Password' }).fill('12345678'); - await page.getByRole('button', { name: 'Install Gitea'}).click(); - console.log("安装中,请耐心等待"); - await page.waitForTimeout(90000); - } catch (error) { - console.error('[GlobalSetup] "构建模式" 安装失败:', error); - await page.screenshot({ path: 'playwright-report/global-setup-failure.png' }); - throw error; - } - } else { + } + else { throw new Error(`[GlobalSetup] 未知的 E2E_MODE: "${mode}"`); } await browser.close(); diff --git a/tests/e2e/run-e2e-tests.sh b/tests/e2e/run-e2e-tests.sh index 8018d0fdfc..6c6a8d4af7 100755 --- a/tests/e2e/run-e2e-tests.sh +++ b/tests/e2e/run-e2e-tests.sh @@ -21,46 +21,8 @@ mkdir -p ./tests/e2e/reports/html ./tests/e2e/test-data/devstar_data echo "清理完成。" echo "" -echo "===== [2/5] 设置权限... =====" -# 容器内的用户需要写入数据目录 -chmod -R 777 ./tests/e2e/test-data/devstar_data - -# 【关键】允许容器访问宿主机的 Docker Socket -if [ -z "$TARGET_URL" ]; then - sudo chmod 666 /var/run/docker.sock - echo "权限设置完成。" - echo "" -else - echo "跳过docker.sock权限修改 =====" -fi - -if [ -z "$TARGET_URL" ]; then - - echo "===== [3/5] 构建模式: 构建/拉取依赖镜像... =====" - #现在make devstar 处理镜像的构建 - docker pull mengning997/webterminal:latest - docker tag mengning997/webterminal:latest devstar.cn/devstar/webterminal:latest - - echo "===== 现在检测Docker宿主机网关=====" - DOCKER_HOST_GATEWAY="172.17.0.1" - if [ "$OS_TYPE" = "Darwin" ]; then - DOCKER_HOST_GATEWAY="host.docker.internal" - elif [ "$OS_TYPE" = "Linux" ]; then - LINUX_IP=$(ip addr show docker0 | grep -Po 'inet \K[\d\.]+') - if [ -n "$LINUX_IP" ]; then - DOCKER_HOST_GATEWAY=$LINUX_IP - else - echo "警告: 无法动态检测 'docker0' IP, 回退到 172.17.0.1" - fi - fi - export DOCKER_HOST_GATEWAY -else - echo "===== [3/5] URL 模式: 跳过依赖镜像和网关检测。 =====" -fi -echo "===== [4/5] 启动并运行测试... =====" +echo "===== [2/3] 启动并运行测试... =====" # 检查从 Makefile 传来的 TARGET_URL 变量是否为空 -if [ -n "$TARGET_URL" ]; then - # --- [A] URL 模式 --- echo " 模式: [URL模式]. 目标: $TARGET_URL" export DEVSTAR_URL=$TARGET_URL export E2E_MODE="url" @@ -90,30 +52,13 @@ if [ -n "$TARGET_URL" ]; then --build \ --exit-code-from test-runner \ test-runner -else - # --- [B] 构建模式 --- - echo "==> 模式: [构建模式]. 正在本地启动 devstar..." - # 1. 导出内部 URL - export DEVSTAR_URL="http://devstar:3000" - export E2E_MODE="compose" - export E2E_SKIP_INSTALL="false" - echo "即将执行: docker compose -f tests/e2e/docker-compose.test.yml up --build --wait --exit-code-from test-runner" - # 2. 启动所有服务 - command docker compose \ - -f tests/e2e/docker-compose.test.yml \ - -f tests/e2e/docker-compose.override.yml \ - up \ - --build \ - --abort-on-container-exit \ - --exit-code-from test-runner -fi # 捕获 test-runner 的退出码 EXIT_CODE=$? echo "" echo "" -echo "===== [5/5] 测试运行完成 =====" +echo "===== [3/3] 测试运行完成 =====" echo "HTML 报告已生成在: ./reports/html" ls -l ./tests/e2e/reports/html echo "" diff --git a/tests/e2e/specs/utils.e2e.ts b/tests/e2e/specs/utils.e2e.ts index 8ac4a348b7..e663992a82 100644 --- a/tests/e2e/specs/utils.e2e.ts +++ b/tests/e2e/specs/utils.e2e.ts @@ -65,11 +65,4 @@ if(mode === 'url'){ ); } } -else if(mode=='compose'){ - await page.fill('#user_name',username); - await page.fill('#password', password); - await page.getByRole('button', { name: '登录' }).click(); - await expect(page).toHaveURL(env.DEVSTAR_URL+ '/'); - console.log(`[LoginHelper] 登录成功!`); -} }