添加了ci脚本,修改了测试脚本的默认语言为中文

This commit is contained in:
jiaojm
2025-11-20 17:43:35 +08:00
repo.diff.parent 96005ac630
repo.diff.commit ed573cc83b
repo.diff.stats_desc%!(EXTRA int=3, int=37, int=42)

repo.diff.view_file

@@ -1,15 +1,20 @@
name: DevStar E2E Debug Workflow
name: DevStar E2E Workflow
on:
workflow_dispatch:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
e2e-test-standalone:
e2e-test:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: make devstar
run: |
make devstar
- name: 1.5 Clean Up Old Data & Containers
run: |
echo "正在清理旧环境..."
@@ -20,7 +25,7 @@ jobs:
run: |
echo "===== 2. 正在启动容器... ====="
# 说明install.sh 默认使用宿主机路径 (~/devstar_data) 挂载。
# 在 CI 环境中,会导致严重的权限问题 。
# 在 CI 环境中,可能会导致严重的权限问题 ,比如之前写入文件失败导致容器一直重启
# 解决方案:动态修改脚本副本,强制将其替换为 Docker 命名卷 。
# 这种修改仅在本次 CI 运行中生效,不会影响源码仓库。
@@ -47,40 +52,12 @@ jobs:
- name: 3. Run E2E Tests
run: |
COMPOSE_FILE="tests/e2e/docker-compose.test.yml"
echo "锁定目标文件: $COMPOSE_FILE"
echo " Modifying network_mode to host..."
# 写法 A: 变量形式
sed -i 's|network_mode: "${E2E_NETWORK_MODE:-bridge}"|network_mode: host|g' "$COMPOSE_FILE"
grep "network_mode" "$COMPOSE_FILE" || echo "警告:文件中未找到 network_mode 字段!"
# 4. 运行测试
TARGET_URL="http://localhost:80"
make e2e-test TARGET_URL="$TARGET_URL" || true
env:
GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true"
E2E_NETWORK_MODE: "host"
- 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' 容器日志。"
##TODO 如何输出一份可读的测试报告,现在成功的输出了一些截图和日志

repo.diff.view_file

@@ -16,5 +16,6 @@ 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如果首次安装会执行安装脚本如果已经安装过请输入你的账号密码否则按默认账号和密码登录。
2.单机CI使用make e2e-test由脚本执行容器的创建安装和测试需要docker环境和项目代码。
3.测试用例的添加方法所有的测试按照功能分组devcontainerappstorerunner等等每一个test函数对应一组或一个测试用例。

repo.diff.view_file

@@ -2,6 +2,7 @@ import { test, expect } from '@playwright/test';
import { link } from 'node:fs';
import { env } from 'node:process';
import { Login } from './utils.e2e';
import { time } from 'node:console';
const DEFAULT_E2E_USER = 'testuser';
@@ -60,9 +61,24 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
console.log("创建开发容器");
await page.getByRole('button', { name: '创建开发容器' }).click();
console.log("正在创建");
await expect(page.getByRole('button', { name: '停止开发容器' }))
.toBeVisible({ timeout: 180000 });
console.log("正在创建");
const stopButton = page.getByRole('button', { name: '停止开发容器' });
try {
console.log('正在等待容器创建');
//第一阶段刷新页面
await expect(stopButton).toBeVisible({ timeout: 60000 });
} catch (error) {
//刷新第一次
await page.reload({ waitUntil: 'domcontentloaded' });
console.log('60s正在刷新页面...');
//加载service可能比较慢
await page.waitForTimeout(180000);
console.log('刷新页面完成,继续等待 (阶段2: 60s)...');
//第二次刷新,容器应该正常启动了
await page.reload({ waitUntil: 'domcontentloaded' });
await expect(stopButton).toBeVisible({ timeout: 30000 });
}
console.log("Dev container 创建成功!");
await page.getByRole('button',{ name: '停止开发容器'}).click();
console.log("正在停止");
@@ -84,7 +100,8 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
await page.locator('#delete-repo-devcontainer-of-user-modal')
.getByRole('button', { name: '确认操作' })
.click();
console.log('正在删除!');
console.log('正在删除!,可能较慢请等待');
await page.waitForTimeout(3000);
await expect(page.getByRole('button', { name: '创建开发容器' })).toBeVisible();
console.log('成功删除!');
console.log("test1 检查通过!");
@@ -135,7 +152,7 @@ test('权限修改相关', async ({ page }) => {
await page.locator('#repo_name_to_delete').fill(repoName);
console.log("正在点击最终的删除确认按钮...");
await page.getByRole('button', { name: '删除本仓库' }).click();
await page.locator('#delete-repo-modal').getByRole('button', { name: '删除本仓库' }).click();
});
})