Skip to content

feat: add dual release system (offline + online versions) #1

feat: add dual release system (offline + online versions)

feat: add dual release system (offline + online versions) #1

name: Build Dual Release Packages
on:
release:
types: [published]
workflow_dispatch:
jobs:
# Job 1: Build Offline Version (with bundled model)
build-offline:
runs-on: windows-latest
timeout-minutes: 90
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Create directory structure
shell: bash
run: |
mkdir -p dist/OpenClaw-Portable-v6.0.0-windows-offline/{node,openclaw-pkg,llm/bin,llm/models,config,data,workspace,temp}
- name: Download model from GitHub Release
shell: bash
run: |
echo "=========================================="
echo " Downloading Qwen2.5-1.5B Model (1066MB)"
echo "=========================================="
cd dist/OpenClaw-Portable-v6.0.0-windows-offline/llm/models
# Download all parts
echo "📦 Part 1/3 (500MB)..."
curl -L --retry 3 --retry-delay 5 -o part1.bin \
"https://github.com/SonicBotMan/openclaw-portable/releases/download/v6.0.0/qwen-model-part1.bin"
echo "📦 Part 2/3 (500MB)..."
curl -L --retry 3 --retry-delay 5 -o part2.bin \
"https://github.com/SonicBotMan/openclaw-portable/releases/download/v6.0.0/qwen-model-part2.bin"
echo "📦 Part 3/3 (66MB)..."
curl -L --retry 3 --retry-delay 5 -o part3.bin \
"https://github.com/SonicBotMan/openclaw-portable/releases/download/v6.0.0/qwen-model-part3.bin"
# Merge parts
echo "🔧 Merging parts..."
cat part1.bin part2.bin part3.bin > qwen2.5-1.5b-instruct-q4_k_m.gguf
# Clean up
rm -f part*.bin
# Verify
ls -lh qwen2.5-1.5b-instruct-q4_k_m.gguf
echo "✅ Model downloaded and merged"
- name: Download Node.js
shell: bash
run: |
echo "=========================================="
echo " Downloading Node.js 22.16.0"
echo "=========================================="
curl -fsSL \
"https://nodejs.org/dist/v22.16.0/node-v22.16.0-win-x64.zip" \
-o /tmp/node.zip
unzip -q /tmp/node.zip -d /tmp/
mv /tmp/node-v22.16.0-win-x64/* dist/OpenClaw-Portable-v6.0.0-windows-offline/node/
rm -rf /tmp/node.zip /tmp/node-v22.16.0-win-x64
echo "✅ Node.js downloaded"
- name: Install OpenClaw
shell: bash
run: |
echo "=========================================="
echo " Installing OpenClaw"
echo "=========================================="
cd dist/OpenClaw-Portable-v6.0.0-windows-offline
./node/node.exe ./node/node_modules/npm/bin/npm-cli.js \
install -g openclaw@latest \
--prefix openclaw-pkg \
--registry https://registry.npmmirror.com
echo "✅ OpenClaw installed"
- name: Download llama.cpp
shell: bash
run: |
echo "=========================================="
echo " Downloading llama.cpp"
echo "=========================================="
curl -fsSL \
"https://github.com/ggml-org/llama.cpp/releases/download/b4265/llama-b4265-bin-win-avx2-x64.zip" \
-o /tmp/llama.zip
unzip -q /tmp/llama.zip -d /tmp/llama-tmp
# Find and move llama-server.exe
find /tmp/llama-tmp -name "llama-server.exe" -exec mv {} \
dist/OpenClaw-Portable-v6.0.0-windows-offline/llm/bin/llama-server-win32-avx2.exe \;
rm -rf /tmp/llama.zip /tmp/llama-tmp
echo "✅ llama.cpp downloaded"
- name: Copy scripts and config
shell: bash
run: |
echo "=========================================="
echo " Copying scripts"
echo "=========================================="
cp start.bat stop.bat check.bat dist/OpenClaw-Portable-v6.0.0-windows-offline/
cp -r config dist/OpenClaw-Portable-v6.0.0-windows-offline/ || true
# Create README for offline version
cat > dist/OpenClaw-Portable-v6.0.0-windows-offline/README-OFFLINE.txt << 'EOF'
OpenClaw Portable v6.0.0 - OFFLINE VERSION

Check failure on line 122 in .github/workflows/build-dual-release.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/build-dual-release.yml

Invalid workflow file

You have an error in your yaml syntax on line 122
==========================================
This version includes a built-in CPU-only AI model (Qwen2.5-1.5B).
Features:
✅ Complete offline operation after first download
✅ No external API needed
✅ Zero configuration required
The model is located in: llm/models/qwen2.5-1.5b-instruct-q4_k_m.gguf
To start: Double-click start.bat
For more information: https://github.com/SonicBotMan/openclaw-portable
EOF
echo "✅ Scripts copied"
- name: Create archive
shell: bash
run: |
echo "=========================================="
echo " Creating offline archive"
echo "=========================================="
cd dist
tar -czf OpenClaw-Portable-v6.0.0-windows-offline.tar.gz \
OpenClaw-Portable-v6.0.0-windows-offline
SIZE=$(du -h OpenClaw-Portable-v6.0.0-windows-offline.tar.gz | cut -f1)
echo "✅ Offline archive created: $SIZE"
ls -lh OpenClaw-Portable-v6.0.0-windows-offline.tar.gz
- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: openclaw-portable-v6.0.0-windows-offline
path: dist/OpenClaw-Portable-v6.0.0-windows-offline.tar.gz
retention-days: 90
compression-level: 0
- name: Summary
shell: bash
run: |
echo "=========================================="
echo " ✅ Offline Build Complete!"
echo "=========================================="
echo " Package: OpenClaw-Portable-v6.0.0-windows-offline.tar.gz"
du -h dist/OpenClaw-Portable-v6.0.0-windows-offline.tar.gz
echo " Size: ~1.2 GB (includes Qwen2.5-1.5B model)"
echo "=========================================="
# Job 2: Build Online Version (without bundled model)
build-online:
runs-on: windows-latest
timeout-minutes: 30
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Create directory structure
shell: bash
run: |
mkdir -p dist/OpenClaw-Portable-v6.0.0-windows-online/{node,openclaw-pkg,llm/bin,llm/models,config,data,workspace,temp}
- name: Download Node.js
shell: bash
run: |
echo "=========================================="
echo " Downloading Node.js 22.16.0"
echo "=========================================="
curl -fsSL \
"https://nodejs.org/dist/v22.16.0/node-v22.16.0-win-x64.zip" \
-o /tmp/node.zip
unzip -q /tmp/node.zip -d /tmp/
mv /tmp/node-v22.16.0-win-x64/* dist/OpenClaw-Portable-v6.0.0-windows-online/node/
rm -rf /tmp/node.zip /tmp/node-v22.16.0-win-x64
echo "✅ Node.js downloaded"
- name: Install OpenClaw
shell: bash
run: |
echo "=========================================="
echo " Installing OpenClaw"
echo "=========================================="
cd dist/OpenClaw-Portable-v6.0.0-windows-online
./node/node.exe ./node/node_modules/npm/bin/npm-cli.js \
install -g openclaw@latest \
--prefix openclaw-pkg \
--registry https://registry.npmmirror.com
echo "✅ OpenClaw installed"
- name: Download llama.cpp
shell: bash
run: |
echo "=========================================="
echo " Downloading llama.cpp"
echo "=========================================="
curl -fsSL \
"https://github.com/ggml-org/llama.cpp/releases/download/b4265/llama-b4265-bin-win-avx2-x64.zip" \
-o /tmp/llama.zip
unzip -q /tmp/llama.zip -d /tmp/llama-tmp
# Find and move llama-server.exe
find /tmp/llama-tmp -name "llama-server.exe" -exec mv {} \
dist/OpenClaw-Portable-v6.0.0-windows-online/llm/bin/llama-server-win32-avx2.exe \;
rm -rf /tmp/llama.zip /tmp/llama-tmp
echo "✅ llama.cpp downloaded"
- name: Copy scripts and config
shell: bash
run: |
echo "=========================================="
echo " Copying scripts"
echo "=========================================="
cp start.bat stop.bat check.bat dist/OpenClaw-Portable-v6.0.0-windows-online/
cp -r config dist/OpenClaw-Portable-v6.0.0-windows-online/ || true
# Create README for online version
cat > dist/OpenClaw-Portable-v6.0.0-windows-online/README-ONLINE.txt << 'EOF'
OpenClaw Portable v6.0.0 - ONLINE VERSION
=========================================
This version does NOT include a built-in AI model.
You can:
1. Use cloud AI APIs (DeepSeek, OpenAI, etc.) - requires API key
2. Add your own local model to llm/models/ directory
To add a local model:
1. Download a GGUF model (e.g., Qwen2.5-1.5B-Instruct)
2. Place it in: llm/models/
3. Restart OpenClaw
Recommended models:
- Qwen2.5-1.5B-Instruct-Q4_K_M.gguf (~900MB)
- Qwen2.5-3B-Instruct-Q4_K_M.gguf (~1.8GB)
- Llama-3.2-3B-Instruct-Q4_K_M.gguf (~1.8GB)
Download models from: https://huggingface.co/Qwen
To start: Double-click start.bat
For more information: https://github.com/SonicBotMan/openclaw-portable
EOF
echo "✅ Scripts copied"
- name: Create archive
shell: bash
run: |
echo "=========================================="
echo " Creating online archive"
echo "=========================================="
cd dist
tar -czf OpenClaw-Portable-v6.0.0-windows-online.tar.gz \
OpenClaw-Portable-v6.0.0-windows-online
SIZE=$(du -h OpenClaw-Portable-v6.0.0-windows-online.tar.gz | cut -f1)
echo "✅ Online archive created: $SIZE"
ls -lh OpenClaw-Portable-v6.0.0-windows-online.tar.gz
- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: openclaw-portable-v6.0.0-windows-online
path: dist/OpenClaw-Portable-v6.0.0-windows-online.tar.gz
retention-days: 90
compression-level: 0
- name: Summary
shell: bash
run: |
echo "=========================================="
echo " ✅ Online Build Complete!"
echo "=========================================="
echo " Package: OpenClaw-Portable-v6.0.0-windows-online.tar.gz"
du -h dist/OpenClaw-Portable-v6.0.0-windows-online.tar.gz
echo " Size: ~300 MB (no built-in model)"
echo "=========================================="
# Job 3: Upload both packages to Release
upload-to-release:
needs: [build-offline, build-online]
runs-on: ubuntu-latest
if: github.event_name == 'release'
steps:
- name: Download offline artifact
uses: actions/download-artifact@v4
with:
name: openclaw-portable-v6.0.0-windows-offline
path: ./packages
- name: Download online artifact
uses: actions/download-artifact@v4
with:
name: openclaw-portable-v6.0.0-windows-online
path: ./packages
- name: List packages
run: |
echo "📦 Packages to upload:"
ls -lh packages/
- name: Upload to Release
uses: softprops/action-gh-release@v1
with:
files: packages/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Summary
run: |
echo "=========================================="
echo " ✅ Dual Release Complete!"
echo "=========================================="
echo ""
echo " Packages uploaded to Release:"
echo " 1. OpenClaw-Portable-v6.0.0-windows-offline.tar.gz (~1.2 GB)"
echo " - With built-in Qwen2.5-1.5B model"
echo " - Complete offline operation"
echo ""
echo " 2. OpenClaw-Portable-v6.0.0-windows-online.tar.gz (~300 MB)"
echo " - No built-in model"
echo " - Smaller download size"
echo " - Use cloud APIs or add your own model"
echo ""
echo "=========================================="