You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

147 lines
4.6 KiB

#!/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 Electron version" "npm run build:electron" || 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