This commit is contained in:
jiaojm
2025-11-14 16:30:29 +08:00
repo.diff.parent 5e2987d135
repo.diff.commit 7d06daf606
repo.diff.stats_desc%!(EXTRA int=5, int=63, int=79)

repo.diff.view_file

@@ -14,7 +14,7 @@ E2E_USERNAME="your_name" E2E_PASSWORD="your_password" E2E_ADMIN_ID="your_id" mak
##注意url不可以是localhost这样容器无法访问也无法正常安装webterminal
##说明:目前有两种测试的用法,
主要的流程是通过make devstar 本地代码构建镜像public/assets/install.sh start --image=devstar-studio:latest 通过install.sh脚本创建容器并在make e2e-test TAGRET_URL="..."中输入devstar容器的url如果首次安装会执行安装脚本如果已经安装过请输入你的账号密码id否则按默认账号和密码登录。
单机部署CI使用make e2e-test由脚本执行容器的创建安装和测试需要docker环境和项目代码。
1.主要的流程是通过make devstar 本地代码构建镜像public/assets/install.sh start --image=devstar-studio:latest 通过install.sh脚本创建容器并在make e2e-test TAGRET_URL="..."中输入devstar容器的url如果首次安装会执行安装脚本如果已经安装过请输入你的账号密码id否则按默认账号和密码登录。
2.单机CI使用make e2e-test由脚本执行容器的创建安装和测试需要docker环境和项目代码。

repo.diff.view_file

@@ -19,7 +19,6 @@ async function globalSetup(config: FullConfig) {
const url1=env.DEVSTAR_URL;
await page.goto(url1, { timeout: 15000 });
console.log('[GlobalSetup] 检测到安装界面!正在开始自动化安装...');
// (你提供的所有 "testuser" 安装步骤...)
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();
@@ -46,7 +45,6 @@ async function globalSetup(config: FullConfig) {
console.log('[GlobalSetup] 检测到安装界面!正在开始自动化安装...');
await page.getByRole('textbox', { name: 'Server Domain *' }).fill(serverDomain);
await page.getByRole('textbox', { name: 'Gitea Base URL *' }).fill(giteaBaseURL);
// (你提供的所有 "testuser" 安装步骤...)
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();

repo.diff.view_file

@@ -21,7 +21,7 @@ echo "清理完成。"
echo ""
echo "===== [2/5] 设置权限... ====="
# 容器内的用户(通常 UID 1000)需要写入数据目录
# 容器内的用户需要写入数据目录
chmod -R 777 ./tests/e2e/test-data/devstar_data
# 【关键】允许容器访问宿主机的 Docker Socket
@@ -85,12 +85,12 @@ else
# --- [B] 构建模式 ---
echo "==> 模式: [构建模式]. 正在本地启动 devstar..."
# 1. 导出内部 URL (这会成为 compose 里的默认值)
# 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. [关键] 运行你原来的命令, 启动所有服务
# 2. 启动所有服务
command docker compose \
-f tests/e2e/docker-compose.test.yml \
-f tests/e2e/docker-compose.override.yml \
@@ -110,5 +110,4 @@ ls -l ./tests/e2e/reports/html
echo ""
# 以 test-runner 的退出码退出
# 这将告诉 CI (或你自己) 测试是成功还是失败
exit $EXIT_CODE

repo.diff.view_file

@@ -20,12 +20,6 @@ test.beforeEach(async ({ page }) => {
await Login(page);
});
test('DevContainer 功能和配置', async ({ page,context }) => {
//console.log("正在登陆");
//await page.goto(GITEA_URL + '/user/login');
//await page.fill('#user_name',TEST_USER);
//await page.fill('#password', TEST_PASS);
//await page.getByRole('button', { name: 'Sign In' }).click();
//await expect(page).toHaveURL(GITEA_URL + '/');
console.log(`正在创建新仓库: ${repoName}`);
await page.goto(GITEA_URL + '/repo/create');
@@ -45,66 +39,66 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
console.log("模板已创建. 正在点击 'Edit' 按钮...");
await expect(page.getByText('devcontainer.json')).toBeVisible();
//await page.getByRole('link', { name: 'Edit' }).click();
await page.getByRole('link', { name: 'Edit' }).click();
await page.waitForTimeout(5000);
//console.log("已跳转到编辑器. 正在修改内容");
//const newJsonAsObject = {
//"name": "Gitea DevContainer",
//"image": "mcr.microsoft.com/devcontainers/go:1.24-bookworm",
//"features": {
//"ghcr.io/devcontainers/features/node:1": {
//"version": "lts"
//},
// "ghcr.io/devcontainers/features/git-lfs:1.2.2": {},
// "ghcr.io/devcontainers-extra/features/poetry:2": {},
// "ghcr.io/devcontainers/features/python:1": {
// "version": "3.12"
// },
//"ghcr.io/warrenbuckley/codespace-features/sqlite:1": {}
//},
//"customizations": {
// "vscode": {
// "settings": {},
// "extensions": [
// "editorconfig.editorconfig",
// "dbaeumer.vscode-eslint",
// "golang.go",
// "stylelint.vscode-stylelint",
/// "DavidAnson.vscode-markdownlint",
// "Vue.volar",
// "ms-azuretools.vscode-docker",
//// "vitest.explorer",
// "cweijan.vscode-database-client2",
// "GitHub.vscode-pull-request-github",
// "Azurite.azurite"
//]
// }
//},
//"portsAttributes": {
//"3000": {
// "label": "Gitea Web",
// "onAutoForward": "notify"
// }
// },
//"postCreateCommand": "make deps"
// };
console.log("已跳转到编辑器. 正在修改内容");
const newJsonAsObject = {
"name": "Gitea DevContainer",
"image": "mcr.microsoft.com/devcontainers/go:1.24-bookworm",
"features": {
"ghcr.io/devcontainers/features/node:1": {
"version": "lts"
},
"ghcr.io/devcontainers/features/git-lfs:1.2.2": {},
"ghcr.io/devcontainers-extra/features/poetry:2": {},
"ghcr.io/devcontainers/features/python:1": {
"version": "3.12"
},
"ghcr.io/warrenbuckley/codespace-features/sqlite:1": {}
},
"customizations": {
"vscode": {
"settings": {},
"extensions": [
"editorconfig.editorconfig",
"dbaeumer.vscode-eslint",
"golang.go",
"stylelint.vscode-stylelint",
"DavidAnson.vscode-markdownlint",
"Vue.volar",
"ms-azuretools.vscode-docker",
"vitest.explorer",
"cweijan.vscode-database-client2",
"GitHub.vscode-pull-request-github",
"Azurite.azurite"
]
}
},
"portsAttributes": {
"3000": {
"label": "Gitea Web",
"onAutoForward": "notify"
}
},
"postCreateCommand": "make deps"
};
// 转换为JSON 字符串
//const newJsonString = JSON.stringify(newJsonAsObject);
//转换为JSON 字符串
const newJsonString = JSON.stringify(newJsonAsObject);
// 设置焦点
// await page.locator('.view-lines > div:nth-child(20)').click();
// console.log("正在手动删除模板内容 ");
//for (let i = 0; i < 500; i++) {
// await page.keyboard.press('Backspace');
// }
/// 粘贴字符串
//console.log("正在粘贴JSON 内容...");
// await page.keyboard.insertText(newJsonString);
//await page.getByRole('button', { name: 'Commit Changes' }).click();
//console.log("devcontainer.json 修改并提交成功.");
//console.log("正在导航回 Dev Container 标签页进行验证...");
//await page.getByRole('link', { name: 'Dev Container' }).click();
await page.locator('.view-lines > div:nth-child(20)').click();
console.log("正在手动删除模板内容 ");
for (let i = 0; i < 500; i++) {
await page.keyboard.press('Backspace');
}
//粘贴字符串
console.log("正在粘贴JSON 内容...");
await page.keyboard.insertText(newJsonString);
await page.getByRole('button', { name: 'Commit Changes' }).click();
console.log("devcontainer.json 修改并提交成功.");
console.log("正在导航回 Dev Container 标签页进行验证...");
await page.getByRole('link', { name: 'Dev Container' }).click();
console.log("创建开发容器");
await page.getByRole('button', { name: 'Create Dev Container' }).click();
@@ -150,13 +144,6 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
//console.log("test3检查通过");
});
test('权限修改相关', async ({ page }) => {
//console.log("正在登陆");
//await page.goto(GITEA_URL + '/user/login');
//await page.fill('#user_name', TEST_USER);
//await page.fill('#password', TEST_PASS);
//await page.getByRole('button', { name: 'Sign In' }).click();
//await expect(page).toHaveURL(GITEA_URL + '/');
//console.log("登录成功! ");
console.log('权限配置');
await page.goto(GITEA_URL+ '/-/admin/users/' + TEST_ADMIN_USER_ID + '/edit');

repo.diff.view_file

@@ -15,7 +15,7 @@ let wasUsingDefault = false;
if(mode === 'url'){
const url1=env.DEVSTAR_URL;
if (isInstalled) {
// "已安装" 模式
// "已安装" 模式
username = env.E2E_USERNAME || DEFAULT_E2E_USER;
password = env.E2E_PASSWORD || DEFAULT_E2E_PASS;
@@ -24,7 +24,7 @@ if(mode === 'url'){
}
console.log(`"已安装"模式, 尝试用 ${username} 登录...`);
} else {
// "未安装" 模式
// "未安装" 模式
username = DEFAULT_E2E_USER;
password = DEFAULT_E2E_PASS;
wasUsingDefault=true;