Browse Source

feat: Add comprehensive Electron build script and automation

- Create build-electron.sh script following build-android.sh patterns
- Add support for multiple build modes: dev, package, appimage, deb
- Implement comprehensive error handling with specific exit codes
- Add proper logging and step-by-step build process tracking
- Include built-in help system and verbose logging options

Build Script Features:
- Development builds that compile and launch Electron app
- Package builds for creating distributable applications
- Support for AppImage and Debian package generation
- Automatic cleanup of previous builds and artifacts
- TypeScript compilation with proper error handling
- Capacitor sync and asset generation integration

NPM Script Integration:
- Add build:electron for development builds
- Add build:electron:package for distributable packages
- Add build:electron:appimage for AppImage packages
- Add build:electron:deb for Debian packages
- Add clean:electron for build artifact cleanup

Common Utilities Enhancement:
- Extend setup_build_env() to support 'electron' build type
- Configure proper environment variables for Electron builds
- Maintain consistency with existing build infrastructure

This provides a complete, automated build solution for Electron
that matches the quality and functionality of the Android build
system, enabling reliable cross-platform desktop application builds.
streamline-attempt
Matthew Raymer 1 week ago
parent
commit
4c722d018f
  1. 5
      package.json
  2. 147
      scripts/build-electron.sh
  3. 6
      scripts/common.sh

5
package.json

@ -29,7 +29,12 @@
"electron:build:appimage": "npm run build:capacitor && npx cap copy electron && cd electron && ./build-packages.sh appimage", "electron:build:appimage": "npm run build:capacitor && npx cap copy electron && cd electron && ./build-packages.sh appimage",
"electron:build:deb": "npm run build:capacitor && npx cap copy electron && cd electron && ./build-packages.sh deb", "electron:build:deb": "npm run build:capacitor && npx cap copy electron && cd electron && ./build-packages.sh deb",
"clean:android": "adb uninstall app.timesafari.app || true", "clean:android": "adb uninstall app.timesafari.app || true",
"clean:electron": "rm -rf electron/app/* electron/dist/* || true",
"build:android": "./scripts/build-android.sh", "build:android": "./scripts/build-android.sh",
"build:electron": "./scripts/build-electron.sh",
"build:electron:package": "./scripts/build-electron.sh --package",
"build:electron:appimage": "./scripts/build-electron.sh --appimage",
"build:electron:deb": "./scripts/build-electron.sh --deb",
"fastlane:ios:beta": "cd ios && fastlane beta", "fastlane:ios:beta": "cd ios && fastlane beta",
"fastlane:ios:release": "cd ios && fastlane release", "fastlane:ios:release": "cd ios && fastlane release",
"fastlane:android:beta": "cd android && fastlane beta", "fastlane:android:beta": "cd android && fastlane beta",

147
scripts/build-electron.sh

@ -0,0 +1,147 @@
#!/bin/bash
# build-electron.sh
# Author: Matthew Raymer
# Description: Electron build script for TimeSafari application
# This script handles the complete Electron build process including cleanup,
# web build, Capacitor build, TypeScript compilation, and Electron packaging.
#
# Usage:
# ./scripts/build-electron.sh # Development build (runs app)
# ./scripts/build-electron.sh --dev # Development build (runs app)
# ./scripts/build-electron.sh --package # Package build (creates distributable)
# ./scripts/build-electron.sh --appimage # Build AppImage package
# ./scripts/build-electron.sh --deb # Build Debian package
# ./scripts/build-electron.sh --help # Show help
# ./scripts/build-electron.sh --verbose # Enable verbose logging
#
# NPM Script Equivalents:
# npm run build:electron # Development build
# npm run build:electron:package # Package build
# npm run build:electron:appimage # AppImage package
# npm run build:electron:deb # Debian package
#
# Exit Codes:
# 1 - Electron cleanup failed
# 2 - Web build failed
# 3 - Capacitor build failed
# 4 - TypeScript compilation failed
# 5 - Electron packaging failed
# 6 - Capacitor sync failed
# 7 - Asset generation failed
# 8 - Electron app launch failed
# Exit on any error
set -e
# Source common utilities
source "$(dirname "$0")/common.sh"
# Parse command line arguments
parse_args "$@"
# Print build header
print_header "TimeSafari Electron Build Process"
log_info "Starting Electron build process at $(date)"
# Setup environment for Electron build
setup_build_env "electron"
# Setup application directories
setup_app_directories
# Load environment from .env file if it exists
load_env_file ".env"
# Step 1: Clean Electron app
safe_execute "Cleaning Electron app" "npm run clean:electron || true" || exit 1
# Step 2: Clean dist directory
log_info "Cleaning dist directory..."
clean_build_artifacts "dist" "electron/app"
# Step 3: Build Capacitor version for Electron
safe_execute "Building Capacitor version" "npm run build:capacitor" || exit 2
# Step 4: Prepare Electron app directory
log_info "Preparing Electron app directory..."
mkdir -p electron/app
# Step 5: Copy built files to Electron
safe_execute "Copying web assets to Electron" "cp -r dist/* electron/app/" || exit 3
# Step 6: Validate and copy Capacitor configuration
safe_execute "Validating Capacitor configuration" "cp capacitor.config.json electron/capacitor.config.json" || exit 3
# Step 7: Navigate to electron directory and build TypeScript
safe_execute "Compiling TypeScript" "cd electron && npm run build && cd .." || exit 4
# Step 8: Sync with Capacitor (if needed)
safe_execute "Syncing with Capacitor" "npx cap sync electron || true" || exit 6
# Step 9: Generate assets (if available)
safe_execute "Generating assets" "npx capacitor-assets generate --electron || true" || exit 7
# Determine build action based on arguments
BUILD_ACTION="dev"
PACKAGE_TYPE=""
# Parse additional arguments for build type
for arg in "$@"; do
case $arg in
--package|--build)
BUILD_ACTION="package"
;;
--appimage)
BUILD_ACTION="package"
PACKAGE_TYPE="appimage"
;;
--deb)
BUILD_ACTION="package"
PACKAGE_TYPE="deb"
;;
--dev|--development)
BUILD_ACTION="dev"
;;
*)
# Ignore unknown arguments
;;
esac
done
# Execute build action
case $BUILD_ACTION in
"package")
if [ -n "$PACKAGE_TYPE" ]; then
safe_execute "Building Electron package ($PACKAGE_TYPE)" "cd electron && ./build-packages.sh $PACKAGE_TYPE && cd .." || exit 5
else
safe_execute "Building Electron package" "cd electron && ./build-packages.sh && cd .." || exit 5
fi
;;
"dev")
safe_execute "Starting Electron development app" "cd electron && npm run electron:start && cd .." || exit 8
;;
*)
log_error "Unknown build action: $BUILD_ACTION"
exit 1
;;
esac
# Print build summary
case $BUILD_ACTION in
"package")
log_success "Electron package build completed successfully!"
if [ -d "electron/dist" ]; then
log_info "Package files available in: electron/dist/"
ls -la electron/dist/ || true
fi
;;
"dev")
log_success "Electron development build completed successfully!"
log_info "Electron app should now be running"
;;
esac
print_footer "Electron Build"
# Exit with success
exit 0

6
scripts/common.sh

@ -182,6 +182,12 @@ setup_build_env() {
export VITE_DISABLE_PWA=true export VITE_DISABLE_PWA=true
export DEBUG_MIGRATIONS=0 export DEBUG_MIGRATIONS=0
;; ;;
"electron")
export VITE_PLATFORM=capacitor
export VITE_PWA_ENABLED=false
export VITE_DISABLE_PWA=true
export DEBUG_MIGRATIONS=0
;;
"web") "web")
export VITE_PLATFORM=web export VITE_PLATFORM=web
export VITE_PWA_ENABLED=true export VITE_PWA_ENABLED=true

Loading…
Cancel
Save