From 7c8e825eba9adbfdf3be4f25777b5993bd17cdf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 13 Nov 2025 15:39:20 +0800 Subject: [PATCH] Refactor build and release workflows, update dependencies Switch build scripts and workflows from npm to pnpm, update build and artifact paths, and simplify release workflow by removing version detection and changelog steps. Add new dependencies (silk-wasm, express, ws, node-pty-prebuilt-multiarch), update exports in package.json files, and add vite config for napcat-framework. Also, rename manifest.json for framework package and fix static asset copying in shell build config. --- .github/workflows/build.yml | 23 ++- .github/workflows/release.yml | 187 ++++++------------ package.json | 9 +- .../manifest.json | 0 packages/napcat-framework/package.json | 5 +- packages/napcat-framework/vite.config.ts | 68 +++++++ packages/napcat-pty/package.json | 1 + packages/napcat-shell/package.json | 8 + packages/napcat-shell/vite.config.ts | 2 +- 9 files changed, 161 insertions(+), 142 deletions(-) rename packages/{napcat-liteloader => napcat-framework}/manifest.json (100%) create mode 100644 packages/napcat-framework/vite.config.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 261945bc..0fc0eb03 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,9 @@ name: "Build Action" on: workflow_dispatch: + push: + branches: + - main permissions: write-all @@ -16,14 +19,16 @@ jobs: node-version: 20.x - name: Build NapCat.Framework run: | - npm i && cd napcat.webui && npm i && cd .. || exit 1 - npm run build:framework && npm run depend || exit 1 - rm package-lock.json + pnpm i + pnpm --filter napcat-webui-frontend run build || exit 1 + pnpm run build:framework + cd packages/napcat-framework/dist + pnpm install --production - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: NapCat.Framework - path: dist + path: packages/napcat-framework/dist Build-Shell: runs-on: ubuntu-latest steps: @@ -35,11 +40,13 @@ jobs: node-version: 20.x - name: Build NapCat.Shell run: | - npm i && cd napcat.webui && npm i && cd .. || exit 1 - npm run build:shell && npm run depend || exit 1 - rm package-lock.json + pnpm i + pnpm --filter napcat-webui-frontend run build || exit 1 + pnpm run build:shell + cd packages/napcat-shell/dist + pnpm install --production - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: NapCat.Shell - path: dist + path: packages/napcat-shell/dist diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8256c73d..f720edf6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,153 +1,82 @@ name: "Build Release" on: - push: - tags: - - "v*" + workflow_dispatch: permissions: write-all jobs: - check-version: + Build-LiteLoader: runs-on: ubuntu-latest steps: - - name: Clone Repository + - name: Clone Main Repository uses: actions/checkout@v4 - with: - ref: main - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract version from tag - run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV - - name: Use Node.js 20.X uses: actions/setup-node@v4 with: node-version: 20.x + - name: Build NapCat.Framework + run: | + pnpm i + pnpm --filter napcat-webui-frontend run build || exit 1 + pnpm run build:framework + cd packages/napcat-framework/dist + pnpm install --production + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: NapCat.Framework + path: packages/napcat-framework/dist - - name: Check Version - run: | - ls - node ./script/checkVersion.cjs - sh ./checkVersion.sh - Build-LiteLoader: - needs: [check-version] - runs-on: ubuntu-latest - steps: - - name: Clone Main Repository - uses: actions/checkout@v4 - with: - repository: 'NapNeko/NapCatQQ' - submodules: true - ref: main - token: ${{ secrets.NAPCAT_BUILD }} - - name: Use Node.js 20.X - uses: actions/setup-node@v4 - with: - node-version: 20.x - - - name: Build NuCat Framework - run: | - npm i - cd napcat.webui - npm i - cd .. - npm run build:framework - cd dist - npm i --omit=dev - cd .. - - name: Upload Artifact - uses: actions/upload-artifact@v4 - with: - name: NapCat.Framework - path: dist Build-Shell: runs-on: ubuntu-latest - needs: [check-version] steps: - - name: Clone Main Repository - uses: actions/checkout@v4 - with: - repository: 'NapNeko/NapCatQQ' - submodules: true - ref: main - token: ${{ secrets.NAPCAT_BUILD }} - - - name: Use Node.js 20.X - uses: actions/setup-node@v4 - with: - node-version: 20.x - - - name: Build NuCat Shell - run: | - npm i - cd napcat.webui - npm i - cd .. - npm run build:shell - cd dist - npm i --omit=dev - cd .. - - - name: Upload Artifact - uses: actions/upload-artifact@v4 - with: - name: NapCat.Shell - path: dist + - name: Clone Main Repository + uses: actions/checkout@v4 + - name: Use Node.js 20.X + uses: actions/setup-node@v4 + with: + node-version: 20.x + - name: Build NapCat.Shell + run: | + pnpm i + pnpm --filter napcat-webui-frontend run build || exit 1 + pnpm run build:shell + cd packages/napcat-shell/dist + pnpm install --production + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: NapCat.Shell + path: packages/napcat-shell/dist release-napcat: - needs: [Build-LiteLoader,Build-Shell] + needs: [Build-LiteLoader, Build-Shell] runs-on: ubuntu-latest steps: + - name: Download All Artifact + uses: actions/download-artifact@v4 - - name: Clone Main Repository - uses: actions/checkout@v4 - with: - repository: 'NapNeko/NapCatQQ' - submodules: true - ref: main - token: ${{ secrets.NAPCAT_BUILD }} - - - name: Download All Artifact - uses: actions/download-artifact@v4 - - - name: Compress subdirectories - run: | - cd ./NapCat.Shell/ - zip -q -r NapCat.Shell.zip * - cd .. - cd ./NapCat.Framework/ - zip -q -r NapCat.Framework.zip * - cd .. - rm ./NapCat.Shell.zip -rf - rm ./NapCat.Framework.zip -rf - mv ./NapCat.Shell/NapCat.Shell.zip ./ - mv ./NapCat.Framework/NapCat.Framework.zip ./ - - name: Extract version from tag - run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV - - - name: Clone Changes Log - run: curl -o CHANGELOG.md https://fastly.jsdelivr.net/gh/NapNeko/NapCatQQ@main/docs/changelogs/CHANGELOG.v${{ env.VERSION }}.md - - - name: Create Release Draft and Upload Artifacts - uses: softprops/action-gh-release@v1 - with: - name: NapCat V${{ env.VERSION }} - token: ${{ secrets.GITHUB_TOKEN }} - body_path: CHANGELOG.md - files: | - NapCat.Framework.zip - NapCat.Shell.zip - draft: true - - build-docker: - needs: release-napcat - runs-on: ubuntu-latest - steps: - - name: Dispatch Docker Build + - name: Compress subdirectories run: | - curl -X POST \ - -H "Authorization: Bearer ${{ secrets.NAPCAT_BUILD }}" \ - -H "Accept: application/vnd.github.v3+json" \ - https://api.github.com/repos/NapNeko/NapCat-Docker/actions/workflows/docker-publish.yml/dispatches \ - -d '{"ref": "main"}' + cd ./NapCat.Shell/ + zip -q -r NapCat.Shell.zip * + cd .. + cd ./NapCat.Framework/ + zip -q -r NapCat.Framework.zip * + cd .. + rm ./NapCat.Shell.zip -rf + rm ./NapCat.Framework.zip -rf + mv ./NapCat.Shell/NapCat.Shell.zip ./ + mv ./NapCat.Framework/NapCat.Framework.zip ./ + + - name: Create Release Draft and Upload Artifacts + uses: softprops/action-gh-release@v1 + with: + name: NapCat + token: ${{ secrets.GITHUB_TOKEN }} + body: Automated release artifact (no version detection) + files: | + NapCat.Framework.zip + NapCat.Shell.zip + draft: true \ No newline at end of file diff --git a/package.json b/package.json index 6dda3ea6..4d446398 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "version": "4.9.42", "scripts": { "build:shell": "pnpm --filter napcat-shell run build || exit 1", - "build:webui": "pnpm --filter napcat-webui-frontend run build" + "build:framework": "pnpm --filter napcat-framework run build || exit 1", + "build:webui": "pnpm --filter napcat-webui-frontend run build || exit 1" }, "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.3", @@ -13,6 +14,8 @@ "vite-plugin-cp": "^6.0.3" }, "dependencies": { - "@protobuf-ts/runtime": "^2.11.1" + "silk-wasm": "^3.6.1", + "express": "^5.0.0", + "ws": "^8.18.3" } -} +} \ No newline at end of file diff --git a/packages/napcat-liteloader/manifest.json b/packages/napcat-framework/manifest.json similarity index 100% rename from packages/napcat-liteloader/manifest.json rename to packages/napcat-framework/manifest.json diff --git a/packages/napcat-framework/package.json b/packages/napcat-framework/package.json index e5e328c4..6e0789e0 100644 --- a/packages/napcat-framework/package.json +++ b/packages/napcat-framework/package.json @@ -4,11 +4,14 @@ "private": true, "type": "module", "main": "index.ts", + "scripts": { + "build": "vite build" + }, "exports": { ".": { "import": "./index.ts" }, - "./src/*": { + "./*": { "import": "./*" } }, diff --git a/packages/napcat-framework/vite.config.ts b/packages/napcat-framework/vite.config.ts new file mode 100644 index 00000000..5bc42b58 --- /dev/null +++ b/packages/napcat-framework/vite.config.ts @@ -0,0 +1,68 @@ +import cp from 'vite-plugin-cp'; +import { defineConfig, PluginOption, UserConfig } from 'vite'; +import path, { resolve } from 'path'; +import nodeResolve from '@rollup/plugin-node-resolve'; +import { builtinModules } from 'module'; +//依赖排除 +const external = [ + 'silk-wasm', + 'ws', + 'express' +]; +const nodeModules = [...builtinModules, builtinModules.map((m) => `node:${m}`)].flat(); +const FrameworkBaseConfigPlugin: PluginOption[] = [ + cp({ + targets: [ + { src: '../napcat-napi-loader/', dest: 'dist', flatten: true }, + { src: '../napcat-native/', dest: 'dist/native', flatten: false }, + { src: './manifest.json', dest: 'dist' }, + { src: '../napcat-core/external/napcat.json', dest: 'dist/config/' }, + { src: '../napcat-webui-frontend/dist/', dest: 'dist/static/', flatten: false }, + { src: './liteloader.cjs', dest: 'dist' }, + { src: './napcat.cjs', dest: 'dist' }, + { src: './nativeLoader.cjs', dest: 'dist' }, + { src: './preload.cjs', dest: 'dist' }, + { src: './renderer.js', dest: 'dist' }, + { src: '../../package.json', dest: 'dist' }, + { src: '../../logo.png', dest: 'dist' }, + ], + }), + nodeResolve(), +]; +const FrameworkBaseConfig = () => + defineConfig({ + resolve: { + conditions: ['node', 'default'], + alias: { + '@/napcat-core': resolve(__dirname, '../napcat-core'), + '@/napcat-common': resolve(__dirname, '../napcat-common/src'), + '@/napcat-onebot': resolve(__dirname, '../napcat-onebot'), + '@/napcat-pty': resolve(__dirname, '../napcat-pty'), + '@/napcat-webui-backend': resolve(__dirname, '../napcat-webui-backend/src'), + '@/image-size': resolve(__dirname, '../image-size'), + }, + }, + build: { + sourcemap: false, + target: 'esnext', + minify: false, + lib: { + entry: { + napcat: path.resolve(__dirname, 'napcat.ts'), + 'audio-worker': path.resolve(__dirname, '../napcat-common/src/audio-worker.ts'), + 'worker/conoutSocketWorker': path.resolve(__dirname, '../napcat-pty/worker/conoutSocketWorker.ts'), + }, + formats: ['es'], + fileName: (_, entryName) => `${entryName}.mjs`, + }, + rollupOptions: { + external: [...nodeModules, ...external], + }, + }, + }); +export default defineConfig((): UserConfig => { + return { + ...FrameworkBaseConfig(), + plugins: [...FrameworkBaseConfigPlugin], + }; +}); diff --git a/packages/napcat-pty/package.json b/packages/napcat-pty/package.json index fcc92799..591b5ff0 100644 --- a/packages/napcat-pty/package.json +++ b/packages/napcat-pty/package.json @@ -13,6 +13,7 @@ } }, "dependencies": { + "@homebridge/node-pty-prebuilt-multiarch":"^0.12.0", "napcat-core": "workspace:*", "napcat-common": "workspace:*", "napcat-onebot": "workspace:*", diff --git a/packages/napcat-shell/package.json b/packages/napcat-shell/package.json index 51701761..7df2fd00 100644 --- a/packages/napcat-shell/package.json +++ b/packages/napcat-shell/package.json @@ -7,6 +7,14 @@ "scripts": { "build": "vite build" }, + "exports": { + ".": { + "import": "./index.ts" + }, + "./*": { + "import": "./*" + } + }, "dependencies": { "napcat-core": "workspace:*", "napcat-common": "workspace:*", diff --git a/packages/napcat-shell/vite.config.ts b/packages/napcat-shell/vite.config.ts index 7aebf115..0cb96550 100644 --- a/packages/napcat-shell/vite.config.ts +++ b/packages/napcat-shell/vite.config.ts @@ -16,7 +16,7 @@ const ShellBaseConfigPlugin: PluginOption[] = [ { src: '../napcat-native/', dest: 'dist/native', flatten: false }, { src: '../napcat-webui-frontend/dist/', dest: 'dist/static/', flatten: false }, { src: '../napcat-core/external/napcat.json', dest: 'dist/config/' }, - { src: './package.json', dest: 'dist' }, + { src: '../../package.json', dest: 'dist' }, { src: '../napcat-shell-loader', dest: 'dist' } ], }),