From d09a82b1b8abde94fb78be29e4d5373e9a83b517 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 19:48:15 +0800 Subject: [PATCH] Add Windows packaging workflow and NapCat entry files Introduces a new GitHub Actions job to automate packaging NapCat for Windows, including downloading dependencies and assembling artifacts. Adds napcat.bat and index.js entry files for Windows distribution in packages/napcat-develop. --- .github/workflows/auto-release.yml | 92 ++++++++++++++++++++++++++++++ packages/napcat-develop/index.js | 14 +++++ packages/napcat-develop/napcat.bat | 1 + 3 files changed, 107 insertions(+) create mode 100644 packages/napcat-develop/index.js create mode 100644 packages/napcat-develop/napcat.bat diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml index f6ce1dff..c2ccae64 100644 --- a/.github/workflows/auto-release.yml +++ b/.github/workflows/auto-release.yml @@ -63,6 +63,98 @@ jobs: with: name: NapCat.Shell path: shell-dist + Download-QNX64: + needs: Build-Shell + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Download Artifacts + uses: actions/download-artifact@v4 + with: + path: ./artifacts + + - name: Setup tools + run: | + sudo apt update + sudo apt install -y aria2 unzip zip p7zip-full curl jq + + - name: Download QQ x64, Node.js and Assemble NapCat.Shell.Windows.Node.zip + run: | + set -euo pipefail + TMPDIR=$(mktemp -d) + cd "$TMPDIR" + + # ----------------------------- + # 1) 下载 QQ x64 + # ----------------------------- + JS_URL="https://cdn-go.cn/qq-web/im.qq.com_new/latest/rainbow/windowsConfig.js" + NT_URL=$(curl -fsSL "$JS_URL" | grep -oP '"ntDownloadX64Url"\s*:\s*"\K[^"]+') + QQ_ZIP="$(basename "$NT_URL")" + aria2c -x16 -s16 -k1M -o "$QQ_ZIP" "$NT_URL" + + QQ_EXTRACT="$TMPDIR/qq_extracted" + mkdir -p "$QQ_EXTRACT" + 7z x -y -o"$QQ_EXTRACT" "$QQ_ZIP" >/dev/null + + # ----------------------------- + # 2) 下载 Node.js Windows x64 zip 22.11.0 + # ----------------------------- + NODE_VER="22.11.0" + NODE_URL="https://nodejs.org/dist/v$NODE_VER/node-v$NODE_VER-win-x64.zip" + NODE_ZIP="node-v$NODE_VER-win-x64.zip" + aria2c -x16 -s16 -k1M -o "$NODE_ZIP" "$NODE_URL" + + NODE_EXTRACT="$TMPDIR/node_extracted" + mkdir -p "$NODE_EXTRACT" + unzip -q "$NODE_ZIP" -d "$NODE_EXTRACT" + + # ----------------------------- + # 3) 创建输出目录 + # ----------------------------- + OUT_DIR="$GITHUB_WORKSPACE/napcat" + mkdir -p "$OUT_DIR/napcat" + + # ----------------------------- + # 4) 解压 NapCat.Shell.zip 到 napcat + # ----------------------------- + unzip -q "$GITHUB_WORKSPACE/artifacts/NapCat.Shell.zip" -d "$OUT_DIR/napcat" + + # ----------------------------- + # 5) 拷贝 QQ 文件到 napcat + # ----------------------------- + QQ_TARGETS=("avif_convert.dll" "broadcast_ipc.dll" "config.json" "libglib-2.0-0.dll" "libgobject-2.0-0.dll" "libvips-42.dll" "ncnn.dll" "opencv.dll" "package.json" "QBar.dll" "wrapper.node") + for name in "${QQ_TARGETS[@]}"; do + find "$QQ_EXTRACT" -iname "$name" -exec cp -a {} "$OUT_DIR/napcat" \; || true + done + + # ----------------------------- + # 6) 拷贝仓库文件 napcat.bat 和 index.js + # ----------------------------- + cp -a "$GITHUB_WORKSPACE/packages/napcat-develop/napcat.bat" "$OUT_DIR/napcat/" || true + cp -a "$GITHUB_WORKSPACE/packages/napcat-develop/index.js" "$OUT_DIR/napcat/" || true + + # ----------------------------- + # 7) 拷贝 Node.exe 到 napcat + # ----------------------------- + cp -a "$NODE_EXTRACT/node-v$NODE_VER-win-x64/node.exe" "$OUT_DIR/napcat/" || true + + # ----------------------------- + # 8) 生成 index.txt + # ----------------------------- + echo "NapCat Files Collected on $(date)" > "$GITHUB_WORKSPACE/index.txt" + + # ----------------------------- + # 9) 打包 napcat,命名为 NapCat.Shell.Windows.Node.zip + # ----------------------------- + cd "$OUT_DIR" + zip -qr "$GITHUB_WORKSPACE/NapCat.Shell.Windows.Node.zip" napcat + + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: NapCat.Shell.Windows.Node + path: NapCat.Shell.Windows.Node.zip release-napcat: needs: [Build-LiteLoader, Build-Shell] diff --git a/packages/napcat-develop/index.js b/packages/napcat-develop/index.js new file mode 100644 index 00000000..2c5488b1 --- /dev/null +++ b/packages/napcat-develop/index.js @@ -0,0 +1,14 @@ +const path = require('path'); +const { pathToFileURL } = require('url'); + +// 公共目录变量 +const BASE_DIR = __dirname; +const WRAPPER_NODE_PATH = path.join(BASE_DIR, 'wrapper.node'); +const PACKAGE_JSON_PATH = path.join(BASE_DIR, 'package.json'); +const CONFIG_JSON_PATH = path.join(BASE_DIR, 'config.json'); +const NAPCAT_MJS_PATH = path.join(BASE_DIR, 'napcat', 'napcat.mjs'); +process.env.NAPCAT_WRAPPER_PATH = WRAPPER_NODE_PATH; +process.env.NAPCAT_QQ_PACKAGE_INFO_PATH = PACKAGE_JSON_PATH; +process.env.NAPCAT_QQ_VERSION_CONFIG_PATH = CONFIG_JSON_PATH; + process.env.NAPCAT_DISABLE_PIPE = '1'; +import(pathToFileURL(NAPCAT_MJS_PATH).href); \ No newline at end of file diff --git a/packages/napcat-develop/napcat.bat b/packages/napcat-develop/napcat.bat new file mode 100644 index 00000000..0c15cd10 --- /dev/null +++ b/packages/napcat-develop/napcat.bat @@ -0,0 +1 @@ +node.exe ./index.js \ No newline at end of file