Files
DeskClaw/build_process/commit_7_packaging_distribution.md
Haze bad94e7e76 build(packaging): set up multi-platform packaging and CI/CD
- Add GitHub Actions workflows for CI and releases
- Create icon generation script and SVG source
- Configure electron-builder for macOS, Windows, Linux
- Add macOS entitlements for code signing
- Add Linux post-install/remove scripts
- Enhance package.json with publishing scripts
- Add artifact naming convention
2026-02-05 23:39:55 +08:00

186 lines
4.8 KiB
Markdown

# Commit 7: Packaging and Distribution
## Summary
Set up comprehensive packaging and distribution infrastructure including CI/CD workflows, multi-platform build configuration, icon generation, and macOS code signing support.
## Changes
### GitHub Actions Workflows
#### `.github/workflows/ci.yml` (New)
Continuous Integration workflow for PRs and main branch:
- **lint**: ESLint validation
- **typecheck**: TypeScript type checking
- **test**: Unit test execution
- **build**: Multi-platform build verification (macOS, Windows, Linux)
#### `.github/workflows/release.yml` (New)
Release workflow triggered by version tags:
- Matrix builds for all platforms
- Artifact collection and upload
- GitHub Release creation with auto-generated notes
- Pre-release detection for alpha/beta versions
### Build Configuration
#### `electron-builder.yml`
Enhanced configuration:
- Artifact naming with version, OS, and arch
- ASAR packaging with native module unpacking
- macOS: Universal binary, notarization ready, extended info
- Windows: NSIS installer with customization
- Linux: AppImage, DEB, RPM targets with dependencies
New features:
- `artifactName` template for consistent naming
- `asarUnpack` for native modules
- macOS `extendInfo` for privacy permissions
- DMG background and icon configuration
- Linux desktop entry with keywords
#### `package.json`
New scripts:
- `icons`: Generate icons from SVG source
- `clean`: Remove build artifacts
- `package:mac:universal`: Build universal macOS binary
- `publish`: Build and publish to GitHub
- `publish:mac/win/linux`: Platform-specific publishing
- `release`: Full release workflow
### Icon Generation
#### `resources/icons/icon.svg` (New)
Vector source icon:
- Gradient background (#6366f1 to #8b5cf6)
- White claw symbol with "X" accent
- 200px corner radius on 1024px canvas
#### `scripts/generate-icons.sh` (New)
Icon generation script:
- Generates PNG at multiple sizes (16-1024px)
- Creates macOS `.icns` via iconutil
- Creates Windows `.ico` via ImageMagick
- Creates Linux PNG set
#### `resources/icons/README.md` (New)
Documentation for icon requirements and generation.
### macOS Signing
#### `entitlements.mac.plist` (New)
macOS entitlements for:
- Unsigned executable memory (V8)
- JIT compilation
- Library validation disable
- Network client access
- Child process spawning (Gateway)
- File access permissions
### Linux Packaging
#### `scripts/linux/after-install.sh` (New)
Post-installation script:
- Update desktop database
- Update icon cache
- Create CLI symlink
#### `scripts/linux/after-remove.sh` (New)
Post-removal script:
- Remove CLI symlink
- Update databases
## Technical Details
### Build Matrix
| Platform | Target | Architecture | Format |
|----------|--------|--------------|--------|
| macOS | dmg, zip | universal | Intel + Apple Silicon |
| Windows | nsis | x64, arm64 | .exe installer |
| Linux | AppImage | x64, arm64 | Portable |
| Linux | deb | x64, arm64 | Debian package |
| Linux | rpm | x64 | Red Hat package |
### Artifact Naming Convention
```
${productName}-${version}-${os}-${arch}.${ext}
Example: ClawX-1.0.0-mac-universal.dmg
```
### Code Signing (Optional)
**macOS:**
```yaml
env:
CSC_LINK: ${{ secrets.MAC_CERTS }}
CSC_KEY_PASSWORD: ${{ secrets.MAC_CERTS_PASSWORD }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
```
**Windows:**
```yaml
env:
CSC_LINK: ${{ secrets.WIN_CERTS }}
CSC_KEY_PASSWORD: ${{ secrets.WIN_CERTS_PASSWORD }}
```
### Release Process
1. Update version in `package.json`
2. Commit and push changes
3. Create and push version tag: `git tag v1.0.0 && git push --tags`
4. GitHub Actions builds all platforms
5. Artifacts uploaded to GitHub Release
6. Users receive update notification via electron-updater
### CI Pipeline
```
Push/PR to main
|
v
┌────────────────┐
│ lint │
│ typecheck │──> Parallel
│ test │
│ build │
└────────────────┘
|
v
All Pass?
|
┌───┴───┐
No Yes
| |
v v
Fail Merge OK
```
### Release Pipeline
```
Push tag v*
|
v
┌─────────────────────────────┐
│ Build (Matrix) │
│ ┌─────┬──────┬──────────┐ │
│ │ mac │ win │ linux │ │
│ └─────┴──────┴──────────┘ │
└─────────────────────────────┘
|
v
Upload Artifacts
|
v
Create GitHub Release
|
v
Auto-update available
```
## Version
v0.1.0-alpha (incremental)