Skip to content

[工程化] 缺少 GitHub Actions CI/CD 自动构建并发布 Release 包的流水线 #42

@SonicBotMan

Description

@SonicBotMan

问题描述

目前仓库完全依赖手动构建和发布 Release。这导致:

  1. 每次发版需要人工收集依赖(Node.js 压缩包、openclaw npm 包)
  2. 无法保证每个 Release 的可重现性
  3. 无 CI 验证,脚本改动后没有自动回归测试
  4. 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_VERSIONOPENCLAW_VERSION 中心化为 config/versions.env 一个文件管理,脚本和 CI 共用
  • 发布时自动计算 zip 包的 SHA256 校验和,附加到 Release Notes

优先级

🟡 P1 - 工程化识别。没有 CI,项目难以持续迭代和发布。

本 issue 由 AI 代码审阅自动生成,如有疑问欢迎讨论。

Metadata

Metadata

Assignees

No one assigned

    Labels

    feature✨ Feature - New feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions