diff --git a/.github/actions/desktop-build-setup/action.yml b/.github/actions/desktop-build-setup/action.yml index 4cd2c5d27b..30827aef95 100644 --- a/.github/actions/desktop-build-setup/action.yml +++ b/.github/actions/desktop-build-setup/action.yml @@ -9,16 +9,10 @@ inputs: runs: using: composite steps: - - name: Install pnpm - uses: pnpm/action-setup@v4 - with: - run_install: false - - - name: Setup Node.js - uses: actions/setup-node@v6 + - name: Setup environment + uses: ./.github/actions/setup-env with: node-version: ${{ inputs.node-version }} - package-manager-cache: false - name: Install dependencies shell: bash diff --git a/.github/actions/setup-env/action.yml b/.github/actions/setup-env/action.yml new file mode 100644 index 0000000000..b60fa17fd6 --- /dev/null +++ b/.github/actions/setup-env/action.yml @@ -0,0 +1,29 @@ +name: Setup Environment +description: Setup Node.js, pnpm (install) and Bun (script runner) for workflows + +inputs: + node-version: + description: Node.js version + required: false + default: '24.11.1' + package-manager-cache: + description: Pass-through to actions/setup-node package-manager-cache + required: false + default: 'false' + +runs: + using: composite + steps: + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + run_install: false + + - name: Install bun + uses: oven-sh/setup-bun@v2 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: ${{ inputs.node-version }} + package-manager-cache: ${{ inputs.package-manager-cache }} diff --git a/.github/workflows/auto-i18n.yml b/.github/workflows/auto-i18n.yml index 87cec45495..3e77fe71f2 100644 --- a/.github/workflows/auto-i18n.yml +++ b/.github/workflows/auto-i18n.yml @@ -3,7 +3,7 @@ name: Daily i18n Update on: schedule: - cron: '0 0 * * *' - workflow_dispatch: + workflow_dispatch: {} # Add permissions configuration permissions: @@ -25,13 +25,11 @@ jobs: with: ref: ${{ github.event.pull_request.head.ref }} - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: ${{ secrets.BUN_VERSION }} + - name: Setup environment + uses: ./.github/actions/setup-env - name: Install deps - run: bun i + run: pnpm install - name: Update i18n run: bun run i18n diff --git a/.github/workflows/auto-tag-release.yml b/.github/workflows/auto-tag-release.yml index 7c2e5ee945..a85471f8ab 100644 --- a/.github/workflows/auto-tag-release.yml +++ b/.github/workflows/auto-tag-release.yml @@ -74,22 +74,13 @@ jobs: git checkout main git pull --rebase origin main - - name: Setup Node.js + - name: Setup environment if: steps.release.outputs.should_tag == 'true' || steps.patch.outputs.should_tag == 'true' - uses: actions/setup-node@v6 - with: - node-version: 24.11.1 - package-manager-cache: false - - - name: Install bun - if: steps.release.outputs.should_tag == 'true' || steps.patch.outputs.should_tag == 'true' - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest + uses: ./.github/actions/setup-env - name: Install deps if: steps.release.outputs.should_tag == 'true' || steps.patch.outputs.should_tag == 'true' - run: bun i + run: pnpm install - name: Resolve patch version (patch bump) id: patch-version diff --git a/.github/workflows/bundle-analyzer.yml b/.github/workflows/bundle-analyzer.yml index ff8950df1c..537e75e9e9 100644 --- a/.github/workflows/bundle-analyzer.yml +++ b/.github/workflows/bundle-analyzer.yml @@ -1,7 +1,7 @@ name: Bundle Analyzer on: - workflow_dispatch: + workflow_dispatch: {} permissions: contents: read @@ -9,7 +9,6 @@ permissions: env: NODE_VERSION: 24.11.1 - BUN_VERSION: 1.2.23 jobs: bundle-analyzer: @@ -20,19 +19,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 + - name: Setup environment + uses: ./.github/actions/setup-env with: node-version: ${{ env.NODE_VERSION }} - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: ${{ env.BUN_VERSION }} - - - name: Setup pnpm - uses: pnpm/action-setup@v4 - - name: Install dependencies run: pnpm i diff --git a/.github/workflows/claude-auto-e2e-testing.yml b/.github/workflows/claude-auto-e2e-testing.yml index 31b33794c3..72a151a0cd 100644 --- a/.github/workflows/claude-auto-e2e-testing.yml +++ b/.github/workflows/claude-auto-e2e-testing.yml @@ -51,11 +51,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Bun - uses: oven-sh/setup-bun@v2 + - name: Setup environment + uses: ./.github/actions/setup-env - name: Install dependencies - run: bun install --frozen-lockfile + run: pnpm install --frozen-lockfile - name: Install Playwright browsers (with system deps) run: bunx playwright install --with-deps chromium diff --git a/.github/workflows/claude-auto-testing.yml b/.github/workflows/claude-auto-testing.yml index 66722d40c9..d560527350 100644 --- a/.github/workflows/claude-auto-testing.yml +++ b/.github/workflows/claude-auto-testing.yml @@ -29,11 +29,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Bun - uses: oven-sh/setup-bun@v2 + - name: Setup environment + uses: ./.github/actions/setup-env - name: Install dependencies - run: bun install --frozen-lockfile + run: pnpm install --frozen-lockfile - name: Configure Git run: | diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml index 3fd8ea3adc..0fbbc3d997 100644 --- a/.github/workflows/claude.yml +++ b/.github/workflows/claude.yml @@ -55,5 +55,5 @@ jobs: # Security: Allow only specific safe commands - no gh commands to prevent token exfiltration # These tools are restricted to code analysis and build operations only claude_args: | - --allowedTools "Bash(git:*),Bash(gh:*),Bash(bun run:*),Bash(pnpm run:*),Bash(npm run:*),Bash(npx:*),Bash(bunx:*),Bash(vitest:*),Bash(rg:*),Bash(find:*),Bash(sed:*),Bash(grep:*),Bash(awk:*),Bash(wc:*),Bash(xargs:*)" + --allowedTools "Bash(git:*),Bash(gh:*),Bash(bun run:*),Bash(bunx:*),Bash(pnpm:*),Bash(npm run:*),Bash(npx:*),Bash(vitest:*),Bash(rg:*),Bash(find:*),Bash(sed:*),Bash(grep:*),Bash(awk:*),Bash(wc:*),Bash(xargs:*)" --append-system-prompt "$(cat /tmp/claude-prompts/security-rules.md)" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 5ed20e2446..1e5f6fc875 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -61,13 +61,11 @@ jobs: - name: Checkout uses: actions/checkout@v6 - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest + - name: Setup environment + uses: ./.github/actions/setup-env - - name: Install dependencies (bun) - run: bun install + - name: Install dependencies + run: pnpm install - name: Install Playwright browsers (with system deps) run: bunx playwright install --with-deps chromium diff --git a/.github/workflows/issue-auto-close-duplicates.yml b/.github/workflows/issue-auto-close-duplicates.yml index 412abe52bd..61792da8fb 100644 --- a/.github/workflows/issue-auto-close-duplicates.yml +++ b/.github/workflows/issue-auto-close-duplicates.yml @@ -3,7 +3,7 @@ description: Auto-closes issues that are duplicates of existing issues on: schedule: - cron: '0 2 * * *' - workflow_dispatch: + workflow_dispatch: {} jobs: auto-close-duplicates: @@ -17,10 +17,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest + - name: Setup environment + uses: ./.github/actions/setup-env + + - name: Install dependencies + run: pnpm install - name: Auto-close duplicate issues run: bun run .github/scripts/auto-close-duplicates.ts diff --git a/.github/workflows/manual-build-desktop.yml b/.github/workflows/manual-build-desktop.yml index 7dd291b509..974f21cc01 100644 --- a/.github/workflows/manual-build-desktop.yml +++ b/.github/workflows/manual-build-desktop.yml @@ -41,7 +41,6 @@ permissions: env: NODE_VERSION: 24.11.1 - BUN_VERSION: 1.2.23 jobs: version: @@ -102,18 +101,10 @@ jobs: steps: - uses: actions/checkout@v6 - - name: Setup Node & pnpm - uses: ./.github/actions/setup-node-pnpm + - name: Setup build environment + uses: ./.github/actions/desktop-build-setup with: node-version: ${{ env.NODE_VERSION }} - package-manager-cache: 'false' - - # node-linker=hoisted 模式将可以确保 asar 压缩可用 - - name: Install dependencies - run: | - pnpm install --node-linker=hoisted & - npm run install-isolated --prefix=./apps/desktop & - wait - name: Set package version run: npm run workflow:set-desktop-version ${{ needs.version.outputs.version }} ${{ inputs.channel }} @@ -222,17 +213,10 @@ jobs: steps: - uses: actions/checkout@v6 - - name: Setup Node & pnpm - uses: ./.github/actions/setup-node-pnpm + - name: Setup build environment + uses: ./.github/actions/desktop-build-setup with: node-version: ${{ env.NODE_VERSION }} - package-manager-cache: 'false' - - - name: Install dependencies - run: | - pnpm install --node-linker=hoisted & - npm run install-isolated --prefix=./apps/desktop & - wait - name: Set package version run: npm run workflow:set-desktop-version ${{ needs.version.outputs.version }} ${{ inputs.channel }} @@ -274,12 +258,10 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node & Bun - uses: ./.github/actions/setup-node-bun + - name: Setup environment + uses: ./.github/actions/setup-env with: node-version: ${{ env.NODE_VERSION }} - bun-version: ${{ env.BUN_VERSION }} - package-manager-cache: 'false' - name: Download artifacts uses: actions/download-artifact@v7 diff --git a/.github/workflows/pr-build-desktop.yml b/.github/workflows/pr-build-desktop.yml index 8e58fdc919..bfceed9974 100644 --- a/.github/workflows/pr-build-desktop.yml +++ b/.github/workflows/pr-build-desktop.yml @@ -27,15 +27,11 @@ jobs: - name: Checkout base uses: actions/checkout@v6 - - name: Setup Node & Bun - uses: ./.github/actions/setup-node-bun - with: - node-version: 24.11.1 - bun-version: latest - package-manager-cache: 'false' + - name: Setup environment + uses: ./.github/actions/setup-env - name: Install deps - run: bun i + run: pnpm install env: NODE_OPTIONS: --max-old-space-size=8192 @@ -93,29 +89,10 @@ jobs: steps: - uses: actions/checkout@v6 - - name: Setup Node & pnpm - uses: ./.github/actions/setup-node-pnpm + - name: Setup build environment + uses: ./.github/actions/desktop-build-setup with: node-version: 24.11.1 - package-manager-cache: 'false' - - # node-linker=hoisted 模式将可以确保 asar 压缩可用 - - name: Install dependencies - run: pnpm install --node-linker=hoisted - - # 移除国内 electron 镜像配置,GitHub Actions 使用官方源更快 - - name: Remove China electron mirror from .npmrc - shell: bash - run: | - NPMRC_FILE="./apps/desktop/.npmrc" - if [ -f "$NPMRC_FILE" ]; then - sed -i.bak '/^electron_mirror=/d; /^electron_builder_binaries_mirror=/d' "$NPMRC_FILE" - rm -f "${NPMRC_FILE}.bak" - echo "✅ Removed electron mirror config from .npmrc" - fi - - - name: Install deps on Desktop - run: npm run install-isolated --prefix=./apps/desktop # 设置 package.json 的版本号 - name: Set package version @@ -228,12 +205,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node & Bun - uses: ./.github/actions/setup-node-bun - with: - node-version: 24.11.1 - bun-version: latest - package-manager-cache: 'false' + - name: Setup environment + uses: ./.github/actions/setup-env # 下载所有平台的构建产物 - name: Download artifacts @@ -251,13 +224,11 @@ jobs: - name: Install yaml only for merge step run: | cd scripts/electronWorkflow - # 在脚本目录创建最小 package.json,防止 bun 向上寻找根 package.json if [ ! -f package.json ]; then echo '{"name":"merge-mac-release","private":true}' > package.json fi bun add --no-save yaml@2.8.1 - # 合并 macOS YAML 文件 (使用 bun 运行 JavaScript) - name: Merge latest-mac.yml files run: bun run scripts/electronWorkflow/mergeMacReleaseFiles.js diff --git a/.github/workflows/release-desktop-beta.yml b/.github/workflows/release-desktop-beta.yml index 8d9f5abaaa..0d174a8287 100644 --- a/.github/workflows/release-desktop-beta.yml +++ b/.github/workflows/release-desktop-beta.yml @@ -62,19 +62,13 @@ jobs: - name: Checkout base uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 + - name: Setup environment + uses: ./.github/actions/setup-env with: node-version: ${{ env.NODE_VERSION }} - package-manager-cache: false - - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - name: Install deps - run: bun i + run: pnpm install - name: Lint run: bun run lint @@ -168,16 +162,10 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 + - name: Setup environment + uses: ./.github/actions/setup-env with: node-version: ${{ env.NODE_VERSION }} - package-manager-cache: false - - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest # 下载所有平台的构建产物 - name: Download artifacts @@ -195,13 +183,11 @@ jobs: - name: Install yaml only for merge step run: | cd scripts/electronWorkflow - # 在脚本目录创建最小 package.json,防止 bun 向上寻找根 package.json if [ ! -f package.json ]; then echo '{"name":"merge-mac-release","private":true}' > package.json fi bun add --no-save yaml@2.8.1 - # 合并 macOS YAML 文件 (使用 bun 运行 JavaScript) - name: Merge latest-mac.yml files run: bun run scripts/electronWorkflow/mergeMacReleaseFiles.js diff --git a/.github/workflows/release-desktop-canary.yml b/.github/workflows/release-desktop-canary.yml index e2f06b6135..77b9253e6e 100644 --- a/.github/workflows/release-desktop-canary.yml +++ b/.github/workflows/release-desktop-canary.yml @@ -133,19 +133,13 @@ jobs: - name: Checkout base uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 + - name: Setup environment + uses: ./.github/actions/setup-env with: node-version: ${{ env.NODE_VERSION }} - package-manager-cache: false - - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - name: Install deps - run: bun i + run: pnpm install - name: Lint run: bun run lint @@ -247,16 +241,10 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 + - name: Setup environment + uses: ./.github/actions/setup-env with: node-version: ${{ env.NODE_VERSION }} - package-manager-cache: false - - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - name: Download artifacts uses: actions/download-artifact@v7 diff --git a/.github/workflows/release-desktop-nightly.yml b/.github/workflows/release-desktop-nightly.yml index 98a34f9148..c50a8460ff 100644 --- a/.github/workflows/release-desktop-nightly.yml +++ b/.github/workflows/release-desktop-nightly.yml @@ -128,19 +128,13 @@ jobs: - name: Checkout base uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 + - name: Setup environment + uses: ./.github/actions/setup-env with: node-version: ${{ env.NODE_VERSION }} - package-manager-cache: false - - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - name: Install deps - run: bun i + run: pnpm install - name: Lint run: bun run lint @@ -242,16 +236,10 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 + - name: Setup environment + uses: ./.github/actions/setup-env with: node-version: ${{ env.NODE_VERSION }} - package-manager-cache: false - - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - name: Download artifacts uses: actions/download-artifact@v7 diff --git a/.github/workflows/release-desktop-stable.yml b/.github/workflows/release-desktop-stable.yml index 684fd34e26..17fd5d40e1 100644 --- a/.github/workflows/release-desktop-stable.yml +++ b/.github/workflows/release-desktop-stable.yml @@ -266,16 +266,10 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 + - name: Setup environment + uses: ./.github/actions/setup-env with: node-version: ${{ env.NODE_VERSION }} - package-manager-cache: false - - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - name: Download artifacts uses: actions/download-artifact@v7 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2c4af5fde0..a75784d2f2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -37,19 +37,11 @@ jobs: with: token: ${{ secrets.GH_TOKEN }} - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 24.11.1 - package-manager-cache: false - - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest + - name: Setup environment + uses: ./.github/actions/setup-env - name: Install deps - run: bun i + run: pnpm install - name: Lint run: bun run lint diff --git a/.github/workflows/sync-database-schema.yml b/.github/workflows/sync-database-schema.yml index a438c4b9dc..e9f7a6997e 100644 --- a/.github/workflows/sync-database-schema.yml +++ b/.github/workflows/sync-database-schema.yml @@ -15,15 +15,13 @@ jobs: steps: - uses: actions/checkout@v6 - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: ${{ secrets.BUN_VERSION }} + - name: Setup environment + uses: ./.github/actions/setup-env - name: Install deps - run: bun i + run: pnpm install - name: sync database schema to dbdocs env: DBDOCS_TOKEN: ${{ secrets.DBDOCS_TOKEN }} - run: npm run db:visualize + run: bun run db:visualize diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 68debfaf4c..e1a5b92c41 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -37,19 +37,11 @@ jobs: steps: - uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 24.11.1 - package-manager-cache: false - - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: ${{ secrets.BUN_VERSION }} + - name: Setup environment + uses: ./.github/actions/setup-env - name: Install deps - run: bun i + run: pnpm install - name: Test packages with coverage run: | @@ -111,19 +103,11 @@ jobs: steps: - uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 24.11.1 - package-manager-cache: false - - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest + - name: Setup environment + uses: ./.github/actions/setup-env - name: Install deps - run: bun i + run: pnpm install - name: Run tests run: bunx vitest --coverage --silent='passed-only' --reporter=default --reporter=blob --shard=${{ matrix.shard }}/2 @@ -146,13 +130,11 @@ jobs: steps: - uses: actions/checkout@v6 - - name: Install bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest + - name: Setup environment + uses: ./.github/actions/setup-env - name: Install deps - run: bun i + run: pnpm install - name: Download blob reports uses: actions/download-artifact@v7 @@ -181,16 +163,8 @@ jobs: steps: - uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 24.11.1 - package-manager-cache: false - - - name: Setup pnpm - uses: pnpm/action-setup@v2 - with: - version: 10 + - name: Setup environment + uses: ./.github/actions/setup-env - name: Install deps run: pnpm install @@ -235,20 +209,14 @@ jobs: steps: - uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 24.11.1 - package-manager-cache: false - - - name: Install pnpm - uses: pnpm/action-setup@v4 + - name: Setup environment + uses: ./.github/actions/setup-env - name: Install deps run: pnpm i - name: Lint - run: npm run lint + run: bun run lint - name: Test Coverage run: pnpm --filter @lobechat/database test:coverage diff --git a/package.json b/package.json index 6e4cf5a267..6c7c16d9c7 100644 --- a/package.json +++ b/package.json @@ -341,7 +341,7 @@ "klavis": "^2.15.0", "langfuse": "^3.38.6", "langfuse-core": "^3.38.6", - "lexical": "^0.42.0", + "lexical": "0.42.0", "lucide-react": "^0.562.0", "mammoth": "^1.11.0", "marked": "^17.0.1", @@ -525,7 +525,7 @@ "vite-tsconfig-paths": "^6.1.1", "vitest": "^3.2.4" }, - "packageManager": "pnpm@10.20.0", + "packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/vitest.config.mts b/vitest.config.mts index bcf1e70be4..bdf3fbc7f1 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -118,6 +118,8 @@ export default defineConfig({ '@pierre/diffs', '@pierre/diffs/react', 'lru_map', + 'lexical', + /@lexical\//, ], }, },