From 52403c6f9581ec29f934c45a73dda4a8a50a99e1 Mon Sep 17 00:00:00 2001 From: Qiufeng Date: Mon, 17 Aug 2026 20:46:20 +0800 Subject: [PATCH] fix: prevent production TDesign chunk cycles --- .gitea/workflows/release.yml | 1 + .gitignore | 2 ++ README.md | 20 +++++++++---------- frontend/e2e/dist-smoke.e2e.ts | 29 ++++++++++++++++++++++++++++ frontend/package.json | 1 + frontend/playwright.config.ts | 1 + frontend/playwright.dist.config.ts | 31 ++++++++++++++++++++++++++++++ frontend/vite.config.ts | 1 - 8 files changed, 75 insertions(+), 11 deletions(-) create mode 100644 frontend/e2e/dist-smoke.e2e.ts create mode 100644 frontend/playwright.dist.config.ts diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 4d01a0a..560cbd8 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -57,6 +57,7 @@ jobs: npm run build npx playwright install --with-deps chromium npm run test:e2e + npm run test:dist - name: Verify release contracts and scripts run: | diff --git a/.gitignore b/.gitignore index 5c75742..b195b33 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ frontend/dist/ frontend/node_modules/ frontend/playwright-report/ frontend/test-results/ +frontend/playwright-report-dist/ +frontend/test-results-dist/ .idea/ .vscode/ *.iml diff --git a/README.md b/README.md index e340d22..cc82a32 100644 --- a/README.md +++ b/README.md @@ -59,14 +59,14 @@ PostgreSQL 18。PostgreSQL 兼容开发已冻结,不属于本次 Preview.12 ### 直接 curl 安装 ```bash -curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.16/install.sh | sudo bash +curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.17/install.sh | sudo bash ``` 这条命令会提示填写 Java 应用端口,直接回车使用 `18080`;随后安装最新签名 Release,并默认进入 `/setup` 安装向导。Java 默认只监听 `127.0.0.1:所选端口`,前端页面、API 和健康检查均由同一端口提供。无人值守安装可直接指定: ```bash -curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.16/install.sh \ +curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.17/install.sh \ | sudo env KAIDI_APP_PORT=19090 bash ``` @@ -74,7 +74,7 @@ curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-previe 时才设置 `KAIDI_SERVER_ADDRESS=0.0.0.0`,通常应保持默认回环绑定并由本机反向代理访问。需要在执行前独立校验安装脚本时使用: ```bash -curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.16/install.sh -o /tmp/kaidi-install.sh +curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.17/install.sh -o /tmp/kaidi-install.sh printf '%s %s\n' bc9001197af843dc323907a98023064ccc4f184e000543d2086b8a6f8161dbc7 /tmp/kaidi-install.sh | sha256sum -c - sudo bash /tmp/kaidi-install.sh rm -f /tmp/kaidi-install.sh @@ -86,7 +86,7 @@ rm -f /tmp/kaidi-install.sh 包装器会在 `sudo` 前校验 `deploy/install.sh` 的固定 SHA-256,再按同一公钥信任链安装最新签名 Release。 ```bash -git clone --branch v1.0.0-preview.16 --depth 1 https://git.awaioi.com/ERP-Team/kaidi.git kaidi-preview +git clone --branch v1.0.0-preview.17 --depth 1 https://git.awaioi.com/ERP-Team/kaidi.git kaidi-preview cd kaidi-preview ./deploy/install-from-git.sh ``` @@ -141,7 +141,7 @@ sudo cat /root/kaidi-first-login.txt 32 位服务端镜像,因此 32 位主机需要预先连接一台 MySQL 8.4 数据库,之后仍然只执行一个安装命令: ```bash -curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.16/install.sh | sudo bash +curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.17/install.sh | sudo bash ``` 无论主机架构如何,安装器都不会安装 MySQL、数据库客户端或创建数据库容器。在打开向导前,需要预先创建 `kaidi_finance`,并授予安装账号该库的 @@ -161,7 +161,7 @@ GRANT ALL PRIVILEGES ON kaidi_finance.* TO 'kaidi'@'KAIDI_SERVER_IP'; 管理员数据和运维人员新增的环境变量: ```bash -curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.16/install.sh \ +curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.17/install.sh \ | sudo env KAIDI_REINSTALL=true KAIDI_SETUP_WIZARD=false bash ``` @@ -171,7 +171,7 @@ curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-previe 如果安装器已完成但向导尚未提交,可执行下面的命令重新生成一次性安装码;该恢复路径只接受仍处于向导模式且未锁定的安装,正式模式不会被覆盖。 ```bash -curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.16/install.sh \ +curl -fsSL https://git.awaioi.com/ERP-Team/kaidi/releases/download/v1.0.0-preview.17/install.sh \ | sudo env KAIDI_REINSTALL=true bash ``` @@ -207,8 +207,8 @@ act_runner 提供 `ubuntu-24.04` 标签,并在 tag 发布时执行后端、前 Preview 属性由 SemVer 版本名表达。之后推送 tag 即会构建、测试、签名并发布: ```bash -git tag v1.0.0-preview.16 -git push origin v1.0.0-preview.16 +git tag v1.0.0-preview.17 +git push origin v1.0.0-preview.17 ``` 在线更新使用独立的 TDesign 页面:隔离的系统管理员进入“系统治理 → 系统更新”。权限与配置页只管理用户、角色、数据范围、表单模板和参数版本,不配置系统名称或域名。 @@ -260,7 +260,7 @@ cat /var/lib/kaidi-update/status.json ```bash KAIDI_RELEASE_SIGNING_KEY=/secure/release-signing-private.pem \ KAIDI_TRUSTED_RELEASE_PUBLIC_KEY_SHA256=807c6aec1dc3f7ce494db16aa9d763c66f292033c38f328afd0390d2715a8cd9 \ - ./scripts/package-release.sh 1.0.0-preview.16 + ./scripts/package-release.sh 1.0.0-preview.17 KAIDI_TRUSTED_RELEASE_PUBLIC_KEY_SHA256=807c6aec1dc3f7ce494db16aa9d763c66f292033c38f328afd0390d2715a8cd9 \ ./scripts/verify-release.sh dist/release ``` diff --git a/frontend/e2e/dist-smoke.e2e.ts b/frontend/e2e/dist-smoke.e2e.ts new file mode 100644 index 0000000..60b325f --- /dev/null +++ b/frontend/e2e/dist-smoke.e2e.ts @@ -0,0 +1,29 @@ +import { expect, test } from '@playwright/test'; + +test('release build boots the setup wizard without runtime errors', async ({ page }) => { + const pageErrors: string[] = []; + const consoleErrors: string[] = []; + + page.on('pageerror', (error) => pageErrors.push(error.message)); + page.on('console', (message) => { + if (message.type() === 'error') consoleErrors.push(message.text()); + }); + await page.route('**/api/v1/setup/status', async (route) => { + await route.fulfill({ + json: { + data: { + required: true, + locked: false, + supportedDatabaseTypes: ['MYSQL'], + message: '请完成安装', + }, + }, + }); + }); + + const response = await page.goto('/setup'); + expect(response?.ok()).toBe(true); + await expect(page.getByRole('heading', { name: '安装向导', exact: true })).toBeVisible(); + expect(pageErrors).toEqual([]); + expect(consoleErrors).toEqual([]); +}); diff --git a/frontend/package.json b/frontend/package.json index eab56e4..d02ba40 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -18,6 +18,7 @@ "site:preview": "npm run build && cp -r dist _site", "test": "vitest run", "test:e2e": "playwright test", + "test:dist": "playwright test --config playwright.dist.config.ts", "test:a11y": "playwright test e2e/accessibility.e2e.ts", "audit:dependencies": "npm audit --audit-level=high --registry=https://registry.npmjs.org", "check:production": "node scripts/check-production-hygiene.mjs", diff --git a/frontend/playwright.config.ts b/frontend/playwright.config.ts index 9959b81..699582f 100644 --- a/frontend/playwright.config.ts +++ b/frontend/playwright.config.ts @@ -6,6 +6,7 @@ const baseURL = `http://127.0.0.1:${port}`; export default defineConfig({ testDir: './e2e', testMatch: '**/*.e2e.ts', + testIgnore: 'dist-smoke.e2e.ts', outputDir: 'test-results', timeout: 30_000, expect: { timeout: 8_000 }, diff --git a/frontend/playwright.dist.config.ts b/frontend/playwright.dist.config.ts new file mode 100644 index 0000000..394ebda --- /dev/null +++ b/frontend/playwright.dist.config.ts @@ -0,0 +1,31 @@ +import { defineConfig } from '@playwright/test'; + +const port = Number(process.env.PLAYWRIGHT_DIST_PORT || 3012); +const baseURL = `http://127.0.0.1:${port}`; + +export default defineConfig({ + testDir: './e2e', + testMatch: 'dist-smoke.e2e.ts', + outputDir: 'test-results-dist', + timeout: 30_000, + expect: { timeout: 8_000 }, + fullyParallel: false, + workers: 1, + forbidOnly: Boolean(process.env.CI), + retries: process.env.CI ? 1 : 0, + reporter: process.env.CI ? [['list'], ['html', { open: 'never', outputFolder: 'playwright-report-dist' }]] : 'list', + use: { + baseURL, + locale: 'zh-CN', + timezoneId: 'Asia/Shanghai', + screenshot: 'only-on-failure', + trace: 'retain-on-failure', + }, + webServer: { + command: `npm run preview -- --host 127.0.0.1 --port ${port}`, + url: baseURL, + reuseExistingServer: false, + timeout: 120_000, + }, + projects: [{ name: 'chromium-dist', use: { browserName: 'chromium', viewport: { width: 1366, height: 768 } } }], +}); diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 48041e3..b6c060f 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -55,7 +55,6 @@ export default ({ mode }: ConfigEnv): UserConfig => { name: 'tdesign-vendor', test: /node_modules[\\/]tdesign-(?:vue-next|icons-vue-next)[\\/]/, priority: 30, - maxSize: 480 * 1024, }, { name: 'vue-vendor',