From 9e682ceafc304c2bf6deb157d702476cdd52cad9 Mon Sep 17 00:00:00 2001 From: BiggerRain <15911122312@163.COM> Date: Thu, 16 Oct 2025 08:58:04 +0800 Subject: [PATCH] ci: add ci detection for web component packaging (#927) * build: add web build ci * chore: remove test code * Update .github/workflows/frontend-ci.yml Co-authored-by: SteveLauC --------- Co-authored-by: SteveLauC --- .github/workflows/frontend-ci.yml | 31 +++++++++++++++++++++++++++++ tsup.config.ts | 33 ++++++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml index 33454347..5432c191 100644 --- a/.github/workflows/frontend-ci.yml +++ b/.github/workflows/frontend-ci.yml @@ -5,6 +5,8 @@ on: # Only run it when Frontend code changes paths: - 'src/**' + - 'tsup.config.ts' + - 'package.json' jobs: check: @@ -30,5 +32,34 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile + - name: Switch platformAdapter to Web adapter + shell: bash + run: > + node -e "const fs=require('fs');const f='src/utils/platformAdapter.ts'; + let s=fs.readFileSync(f,'utf8'); + s=s.replace(/import\\s*\\{\\s*createTauriAdapter\\s*\\}\\s*from\\s*\\\"\\.\\/tauriAdapter\\\";/,'import { createWebAdapter } from \\\"./webAdapter\\\";'); + s=s.replace(/let\\s+platformAdapter\\s*=\\s*createTauriAdapter\\(\\);/,'let platformAdapter = createWebAdapter();'); + fs.writeFileSync(f,s);" + + - name: Build web (Tauri dependency check) + run: pnpm build:web + + - name: Verify no Tauri refs in web output + run: | + if grep -R -n -E '@tauri-apps|tauri-plugin' out/search-chat; then + echo 'Tauri references found in web build output'; + exit 1; + else + echo 'No Tauri references found'; + fi + + - name: Restore platformAdapter to Tauri adapter + run: > + node -e "const fs=require('fs');const f='src/utils/platformAdapter.ts'; + let s=fs.readFileSync(f,'utf8'); + s=s.replace(/import\\s*\\{\\s*createWebAdapter\\s*\\}\\s*from\\s*\\\"\\.\\/webAdapter\\\";/,'import { createTauriAdapter } from \\\"./tauriAdapter\\\";'); + s=s.replace(/let\\s+platformAdapter\\s*=\\s*createWebAdapter\\(\\);/,'let platformAdapter = createTauriAdapter();'); + fs.writeFileSync(f,s);" + - name: Build frontend run: pnpm build diff --git a/tsup.config.ts b/tsup.config.ts index dbb647e8..4774fa12 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -1,11 +1,30 @@ import { defineConfig } from 'tsup'; -import { writeFileSync, readFileSync } from 'fs'; +import { writeFileSync, readFileSync, readdirSync, statSync } from 'fs'; import { join, resolve } from 'path'; const projectPackageJson = JSON.parse( readFileSync(join(__dirname, 'package.json'), 'utf-8') ); +function walk(dir: string): string[] { + const entries = readdirSync(dir); + const files: string[] = []; + for (const name of entries) { + const full = join(dir, name); + const stat = statSync(full); + if (stat.isDirectory()) { + files.push(...walk(full)); + } else { + files.push(full); + } + } + return files; +} + +function hasTauriRefs(content: string): boolean { + return /@tauri-apps|tauri-plugin/i.test(content); +} + export default defineConfig({ entry: ['src/pages/web/index.tsx'], format: ['esm'], @@ -66,6 +85,18 @@ export default defineConfig({ outDir: 'out/search-chat', async onSuccess() { + const outDir = join(__dirname, 'out/search-chat'); + const files = walk(outDir).filter(f => /\.(m?js|cjs)$/i.test(f)); + const tauriFiles = files.filter(f => { + const content = readFileSync(f, 'utf-8'); + return hasTauriRefs(content); + }); + + if (tauriFiles.length) { + throw new Error( + `Build output contains Tauri references:\n${tauriFiles.map(f => ` - ${f}`).join('\n')}` + ); + } const projectPackageJson = JSON.parse( readFileSync(join(__dirname, 'package.json'), 'utf-8') );