问题描述
目前仓库完全依赖手动构建和发布 Release。这导致:
- 每次发版需要人工收集依赖(Node.js 压缩包、openclaw npm 包)
- 无法保证每个 Release 的可重现性
- 无 CI 验证,脚本改动后没有自动回归测试
- README 中列出的内容包结构无法得到保证
建议实施方案
目录结构设计
新增 build-release.sh 构建脚本,并添加 .github/workflows/release.yml。
.github/workflows/release.yml 完整示例
name: Build & Release Portable Package
on:
push:
tags:
- 'v*'
workflow_dispatch: # 支持手动触发调试
env:
NODE_VERSION: "22.16.0"
jobs:
build-windows:
name: Build Windows Portable
runs-on: ubuntu-latest # Linux runner 可以交叉构建 Windows 包
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download Node.js Windows binary
run: |
NODE_URL="https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-win-x64.zip"
curl -fsSL "$NODE_URL" -o node-win.zip
unzip -q node-win.zip
mv "node-v${NODE_VERSION}-win-x64" dist-windows/node
- name: Install OpenClaw into portable prefix
run: |
# 利用 Wine 或在 Linux 上直接使用 node 进行 npm install
# 因为 npm 包内容与平台无关,可用 Linux node 辅助安装
node dist-windows/node/node_modules/npm/bin/npm-cli.js \
install -g openclaw \
--prefix dist-windows/openclaw-pkg \
--registry https://registry.npmmirror.com
- name: Copy launcher scripts and configs
run: |
cp start.bat stop.bat check.bat start-basic.bat dist-windows/
cp -r config dist-windows/
mkdir -p dist-windows/data dist-windows/workspace
- name: Package Windows zip
run: |
VERSION=${GITHUB_REF_NAME}
zip -r "OpenClaw-Portable-${VERSION}-windows.zip" dist-windows/
echo "ASSET_NAME=OpenClaw-Portable-${VERSION}-windows.zip" >> $GITHUB_ENV
- name: Create GitHub Release and upload asset
uses: softprops/action-gh-release@v2
with:
files: ${{ env.ASSET_NAME }}
generate_release_notes: true
# 可扩展:未来增加 macOS / Linux 构建 job
# build-macos:
# build-linux:
build-release.sh 本地构建脚本(供开发调试)
#!/usr/bin/env bash
set -euo pipefail
NODE_VERSION="22.16.0"
OUTDIR="dist-windows"
rm -rf "$OUTDIR" && mkdir -p "$OUTDIR"
echo "[1/4] Downloading Node.js ${NODE_VERSION} for Windows..."
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-win-x64.zip" -o node-win.zip
unzip -q node-win.zip
mv "node-v${NODE_VERSION}-win-x64" "${OUTDIR}/node"
echo "[2/4] Installing OpenClaw..."
mkdir -p "${OUTDIR}/openclaw-pkg"
node "${OUTDIR}/node/node_modules/npm/bin/npm-cli.js" \
install -g openclaw \
--prefix "${OUTDIR}/openclaw-pkg" \
--registry https://registry.npmmirror.com
echo "[3/4] Copying scripts..."
cp start.bat stop.bat check.bat start-basic.bat "${OUTDIR}/"
cp -r config "${OUTDIR}/"
mkdir -p "${OUTDIR}/data" "${OUTDIR}/workspace"
echo "[4/4] Packaging..."
zip -r "OpenClaw-Portable-dev-windows.zip" "${OUTDIR}/"
echo "Done: OpenClaw-Portable-dev-windows.zip"
额外建议
- 在 CI 中增加
check.bat / check.sh 的冠词运行以验证包的完整性
- 将
NODE_VERSION 和 OPENCLAW_VERSION 中心化为 config/versions.env 一个文件管理,脚本和 CI 共用
- 发布时自动计算 zip 包的 SHA256 校验和,附加到 Release Notes
优先级
🟡 P1 - 工程化识别。没有 CI,项目难以持续迭代和发布。
本 issue 由 AI 代码审阅自动生成,如有疑问欢迎讨论。
问题描述
目前仓库完全依赖手动构建和发布 Release。这导致:
建议实施方案
目录结构设计
新增
build-release.sh构建脚本,并添加.github/workflows/release.yml。.github/workflows/release.yml完整示例build-release.sh本地构建脚本(供开发调试)额外建议
check.bat/check.sh的冠词运行以验证包的完整性NODE_VERSION和OPENCLAW_VERSION中心化为config/versions.env一个文件管理,脚本和 CI 共用优先级
🟡 P1 - 工程化识别。没有 CI,项目难以持续迭代和发布。