Browse Source
- Updated electron-builder.config.json with proper TimeSafari metadata - Added Linux package support (AppImage, deb, rpm) - Created build-packages.sh script for easy package building - Added npm scripts for building from project root - Created comprehensive README-BUILDING.md documentation - Fixed package.json metadata (author, homepage, repository) - Added maintainer information for Linux packages Features: - AppImage: Portable, no installation required (~145MB) - Debian package: System integration via package manager (~96MB) - RPM package: Support for RPM-based distributions - Build scripts support individual or all package types Usage: - npm run electron:build (all packages) - npm run electron:build:appimage (AppImage only) - npm run electron:build:deb (Debian package only) - cd electron && ./build-packages.sh [type]streamline-attempt
5 changed files with 357 additions and 10 deletions
@ -0,0 +1,251 @@ |
|||
# Building TimeSafari Electron App |
|||
|
|||
This guide explains how to build distributable packages for the TimeSafari Electron desktop application. |
|||
|
|||
## Quick Start |
|||
|
|||
### From Project Root |
|||
```bash |
|||
# Build all Linux packages (AppImage, deb) |
|||
npm run electron:build |
|||
|
|||
# Build specific package types |
|||
npm run electron:build:appimage # AppImage only |
|||
npm run electron:build:deb # Debian package only |
|||
``` |
|||
|
|||
### From Electron Directory |
|||
```bash |
|||
cd electron |
|||
|
|||
# Build all packages |
|||
./build-packages.sh |
|||
|
|||
# Build specific types |
|||
./build-packages.sh appimage |
|||
./build-packages.sh deb |
|||
./build-packages.sh pack # Unpacked directory (for testing) |
|||
``` |
|||
|
|||
## Package Types |
|||
|
|||
### 1. AppImage (Recommended for Linux) |
|||
- **File**: `TimeSafari-1.0.0.AppImage` |
|||
- **Size**: ~145MB |
|||
- **Usage**: Download and run directly, no installation required |
|||
- **Distribution**: Upload to GitHub releases or website |
|||
|
|||
```bash |
|||
# Make executable and run |
|||
chmod +x TimeSafari-1.0.0.AppImage |
|||
./TimeSafari-1.0.0.AppImage |
|||
``` |
|||
|
|||
### 2. Debian Package (.deb) |
|||
- **File**: `TimeSafari_1.0.0_amd64.deb` |
|||
- **Size**: ~96MB |
|||
- **Usage**: Install via package manager |
|||
- **Distribution**: Upload to repositories or direct download |
|||
|
|||
```bash |
|||
# Install |
|||
sudo dpkg -i TimeSafari_1.0.0_amd64.deb |
|||
|
|||
# Run |
|||
timesafari |
|||
``` |
|||
|
|||
### 3. RPM Package (.rpm) |
|||
- **File**: `TimeSafari-1.0.0.x86_64.rpm` |
|||
- **Requirements**: `rpmbuild` must be installed |
|||
- **Usage**: Install via package manager |
|||
|
|||
```bash |
|||
# Install rpmbuild (Arch Linux) |
|||
sudo pacman -S rpm-tools |
|||
|
|||
# Build RPM |
|||
./build-packages.sh rpm |
|||
|
|||
# Install (on RPM-based systems) |
|||
sudo rpm -i TimeSafari-1.0.0.x86_64.rpm |
|||
``` |
|||
|
|||
## Build Requirements |
|||
|
|||
### System Dependencies |
|||
- Node.js 18+ |
|||
- npm or yarn |
|||
- Python 3 (for native module compilation) |
|||
- Build tools (gcc, make) |
|||
|
|||
### Optional Dependencies |
|||
- `rpmbuild` - for RPM packages |
|||
- `fpm` - automatically downloaded by electron-builder |
|||
|
|||
### Node Dependencies |
|||
All required dependencies are in `package.json`: |
|||
- `electron-builder` - Main build tool |
|||
- `better-sqlite3-multiple-ciphers` - SQLite with encryption |
|||
- Native module compilation tools |
|||
|
|||
## Build Process |
|||
|
|||
### 1. Preparation |
|||
```bash |
|||
# Install dependencies |
|||
npm install |
|||
|
|||
# Build TypeScript |
|||
npm run build |
|||
``` |
|||
|
|||
### 2. Package Creation |
|||
The build process: |
|||
1. Compiles TypeScript to JavaScript |
|||
2. Rebuilds native modules for Electron |
|||
3. Packages the app with electron-builder |
|||
4. Creates platform-specific installers |
|||
|
|||
### 3. Output Location |
|||
All built packages are saved to `electron/dist/`: |
|||
``` |
|||
dist/ |
|||
├── TimeSafari-1.0.0.AppImage # Portable AppImage |
|||
├── TimeSafari_1.0.0_amd64.deb # Debian package |
|||
├── TimeSafari-1.0.0.x86_64.rpm # RPM package (if built) |
|||
└── linux-unpacked/ # Unpacked directory |
|||
``` |
|||
|
|||
## Configuration |
|||
|
|||
### App Metadata |
|||
App information is configured in `electron/package.json`: |
|||
```json |
|||
{ |
|||
"name": "TimeSafari", |
|||
"version": "1.0.0", |
|||
"description": "Time Safari - Community building through gifts, gratitude, and collaborative projects", |
|||
"homepage": "https://timesafari.app", |
|||
"author": { |
|||
"name": "Matthew Raymer", |
|||
"email": "matthew@timesafari.app" |
|||
} |
|||
} |
|||
``` |
|||
|
|||
### Build Configuration |
|||
Build settings are in `electron/electron-builder.config.json`: |
|||
- Package formats and architectures |
|||
- Icons and assets |
|||
- Platform-specific settings |
|||
- Signing and publishing options |
|||
|
|||
## Troubleshooting |
|||
|
|||
### Common Issues |
|||
|
|||
#### 1. Native Module Compilation Errors |
|||
```bash |
|||
# Clear cache and rebuild |
|||
npm run build |
|||
``` |
|||
|
|||
#### 2. Missing Dependencies |
|||
```bash |
|||
# Install system dependencies (Arch Linux) |
|||
sudo pacman -S base-devel python |
|||
|
|||
# Install Node dependencies |
|||
npm install |
|||
``` |
|||
|
|||
#### 3. RPM Build Fails |
|||
```bash |
|||
# Install rpmbuild |
|||
sudo pacman -S rpm-tools |
|||
|
|||
# Try building again |
|||
./build-packages.sh rpm |
|||
``` |
|||
|
|||
#### 4. Large Package Size |
|||
The packages are large (~100-150MB) because they include: |
|||
- Complete Electron runtime |
|||
- Node.js runtime |
|||
- SQLite native modules |
|||
- Application assets |
|||
|
|||
This is normal for Electron applications. |
|||
|
|||
### Debug Mode |
|||
For detailed build information: |
|||
```bash |
|||
DEBUG=electron-builder npx electron-builder build |
|||
``` |
|||
|
|||
## Distribution |
|||
|
|||
### GitHub Releases |
|||
1. Create a new release on GitHub |
|||
2. Upload the built packages as release assets |
|||
3. Users can download and install directly |
|||
|
|||
### Package Repositories |
|||
- **Debian/Ubuntu**: Upload `.deb` to repository |
|||
- **Fedora/CentOS**: Upload `.rpm` to repository |
|||
- **Arch Linux**: Create PKGBUILD for AUR |
|||
|
|||
### Direct Download |
|||
Host the packages on your website for direct download. |
|||
|
|||
## Cross-Platform Building |
|||
|
|||
### Current Support |
|||
- **Linux**: Full support (AppImage, deb, rpm) |
|||
- **Windows**: Configured but requires Windows build environment |
|||
- **macOS**: Configured but requires macOS build environment |
|||
|
|||
### Building for Other Platforms |
|||
To build for Windows or macOS, you need: |
|||
- The target platform's build environment |
|||
- Platform-specific signing certificates |
|||
- Updated build configuration |
|||
|
|||
## Security Considerations |
|||
|
|||
### Code Signing |
|||
For production releases, consider code signing: |
|||
- **Linux**: Not required but recommended |
|||
- **Windows**: Required for Windows SmartScreen |
|||
- **macOS**: Required for Gatekeeper |
|||
|
|||
### Package Integrity |
|||
- Verify package checksums |
|||
- Use HTTPS for distribution |
|||
- Consider GPG signatures for packages |
|||
|
|||
## Performance Tips |
|||
|
|||
### Build Optimization |
|||
- Use `--dir` flag for faster development builds |
|||
- Cache node_modules between builds |
|||
- Use CI/CD for automated builds |
|||
|
|||
### Package Size Reduction |
|||
- Remove unnecessary dependencies |
|||
- Use electron-builder's file filtering |
|||
- Consider using electron-updater for delta updates |
|||
|
|||
## Support |
|||
|
|||
For build issues: |
|||
1. Check the console output for specific errors |
|||
2. Verify all dependencies are installed |
|||
3. Try cleaning and rebuilding |
|||
4. Check electron-builder documentation |
|||
5. Open an issue with build logs |
|||
|
|||
--- |
|||
|
|||
**Happy Building! 🚀** |
@ -0,0 +1,56 @@ |
|||
#!/bin/bash |
|||
|
|||
# TimeSafari Electron Build Script |
|||
# Usage: ./build-packages.sh [pack|appimage|deb|rpm|all] |
|||
|
|||
set -e |
|||
|
|||
echo "🚀 TimeSafari Electron Build Script" |
|||
echo "==================================" |
|||
|
|||
# Build TypeScript and rebuild native modules |
|||
echo "📦 Building TypeScript and native modules..." |
|||
npm run build |
|||
|
|||
BUILD_TYPE="${1:-all}" |
|||
|
|||
case "$BUILD_TYPE" in |
|||
"pack") |
|||
echo "📦 Creating unpacked build..." |
|||
npx electron-builder build --dir -c ./electron-builder.config.json |
|||
;; |
|||
"appimage") |
|||
echo "📦 Creating AppImage..." |
|||
npx electron-builder build --linux AppImage -c ./electron-builder.config.json |
|||
;; |
|||
"deb") |
|||
echo "📦 Creating Debian package..." |
|||
npx electron-builder build --linux deb -c ./electron-builder.config.json |
|||
;; |
|||
"rpm") |
|||
echo "📦 Creating RPM package..." |
|||
if ! command -v rpmbuild &> /dev/null; then |
|||
echo "⚠️ rpmbuild not found. Install with: sudo pacman -S rpm-tools" |
|||
exit 1 |
|||
fi |
|||
npx electron-builder build --linux rpm -c ./electron-builder.config.json |
|||
;; |
|||
"all") |
|||
echo "📦 Creating all Linux packages..." |
|||
npx electron-builder build --linux -c ./electron-builder.config.json |
|||
;; |
|||
*) |
|||
echo "❌ Unknown build type: $BUILD_TYPE" |
|||
echo "Usage: $0 [pack|appimage|deb|rpm|all]" |
|||
exit 1 |
|||
;; |
|||
esac |
|||
|
|||
echo "" |
|||
echo "✅ Build completed successfully!" |
|||
echo "📁 Output files in: ./dist/" |
|||
echo "" |
|||
echo "📦 Available packages:" |
|||
ls -la dist/ | grep -E '\.(AppImage|deb|rpm)$' || echo " No packages found" |
|||
echo "" |
|||
echo "🎉 Ready to distribute!" |
Loading…
Reference in new issue