From 4c722d018fb2ac4a8aab8496c72b06ec922d6659 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Fri, 27 Jun 2025 10:09:16 +0000 Subject: [PATCH] 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. --- package.json | 5 ++ scripts/build-electron.sh | 147 ++++++++++++++++++++++++++++++++++++++ scripts/common.sh | 6 ++ 3 files changed, 158 insertions(+) create mode 100755 scripts/build-electron.sh diff --git a/package.json b/package.json index bb9db22e..346c9864 100644 --- a/package.json +++ b/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: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", diff --git a/scripts/build-electron.sh b/scripts/build-electron.sh new file mode 100755 index 00000000..2450c8ac --- /dev/null +++ b/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 \ No newline at end of file diff --git a/scripts/common.sh b/scripts/common.sh index 1cc699f9..845c77eb 100755 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -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