forked from trent_larson/crowd-funder-for-time-pwa
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.
This commit is contained in:
@@ -29,7 +29,12 @@
|
||||
"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",
|
||||
"clean:android": "adb uninstall app.timesafari.app || true",
|
||||
"clean:electron": "rm -rf electron/app/* electron/dist/* || true",
|
||||
"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:release": "cd ios && fastlane release",
|
||||
"fastlane:android:beta": "cd android && fastlane beta",
|
||||
|
||||
147
scripts/build-electron.sh
Executable file
147
scripts/build-electron.sh
Executable file
@@ -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
|
||||
@@ -182,6 +182,12 @@ setup_build_env() {
|
||||
export VITE_DISABLE_PWA=true
|
||||
export DEBUG_MIGRATIONS=0
|
||||
;;
|
||||
"electron")
|
||||
export VITE_PLATFORM=capacitor
|
||||
export VITE_PWA_ENABLED=false
|
||||
export VITE_DISABLE_PWA=true
|
||||
export DEBUG_MIGRATIONS=0
|
||||
;;
|
||||
"web")
|
||||
export VITE_PLATFORM=web
|
||||
export VITE_PWA_ENABLED=true
|
||||
|
||||
Reference in New Issue
Block a user