forked from jsnbuchanan/crowd-funder-for-time-pwa
- Deleted src/registerServiceWorker.ts and all related imports - Cleaned up WebPlatformService and main.web.ts to remove manual SW logic - Updated VitePWA config for correct dev/prod SW handling - Fixed missing FontAwesome download icon in PWA prompt - Updated docs to reflect new PWA registration approach PWA now works reliably in all web environments with zero manual SW code.
155 lines
3.9 KiB
Bash
Executable File
155 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# experiment.sh
|
|
# Author: Matthew Raymer
|
|
# Description: Build script for TimeSafari Electron application
|
|
# This script handles the complete build process for the TimeSafari Electron app,
|
|
# including web asset compilation and Capacitor sync.
|
|
#
|
|
# Build Process:
|
|
# 1. Environment setup and dependency checks
|
|
# 2. Web asset compilation (Vite)
|
|
# 3. Capacitor sync
|
|
# 4. Electron start
|
|
#
|
|
# Dependencies:
|
|
# - Node.js and npm
|
|
# - TypeScript
|
|
# - Vite
|
|
# - @capacitor-community/electron
|
|
#
|
|
# Usage: ./experiment.sh
|
|
#
|
|
# Exit Codes:
|
|
# 1 - Required command not found
|
|
# 2 - TypeScript installation failed
|
|
# 3 - Build process failed
|
|
# 4 - Capacitor sync failed
|
|
# 5 - Electron start failed
|
|
|
|
# Exit on any error
|
|
set -e
|
|
|
|
# ANSI color codes for better output formatting
|
|
readonly RED='\033[0;31m'
|
|
readonly GREEN='\033[0;32m'
|
|
readonly YELLOW='\033[1;33m'
|
|
readonly BLUE='\033[0;34m'
|
|
readonly NC='\033[0m' # No Color
|
|
|
|
# Logging functions
|
|
log_info() {
|
|
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')] [INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] [SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] [WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] [ERROR]${NC} $1"
|
|
}
|
|
|
|
# Function to check if a command exists
|
|
check_command() {
|
|
if ! command -v "$1" &> /dev/null; then
|
|
log_error "$1 is required but not installed."
|
|
exit 1
|
|
fi
|
|
log_info "Found $1: $(command -v "$1")"
|
|
}
|
|
|
|
# Function to measure and log execution time
|
|
measure_time() {
|
|
local start_time=$(date +%s)
|
|
"$@"
|
|
local end_time=$(date +%s)
|
|
local duration=$((end_time - start_time))
|
|
log_success "Completed in ${duration} seconds"
|
|
}
|
|
|
|
# Print build header
|
|
echo -e "\n${BLUE}=== TimeSafari Electron Build Process ===${NC}\n"
|
|
log_info "Starting build process at $(date)"
|
|
|
|
# Check required commands
|
|
log_info "Checking required dependencies..."
|
|
check_command node
|
|
check_command npm
|
|
check_command git
|
|
|
|
# Create application data directory
|
|
log_info "Setting up application directories..."
|
|
mkdir -p ~/.local/share/TimeSafari/timesafari
|
|
|
|
# Clean up previous builds
|
|
log_info "Cleaning previous builds..."
|
|
rm -rf dist* || log_warn "No previous builds to clean"
|
|
|
|
# Set environment variables for the build
|
|
log_info "Configuring build environment..."
|
|
export VITE_PLATFORM=electron
|
|
|
|
|
|
export DEBUG_MIGRATIONS=0
|
|
|
|
# Ensure TypeScript is installed
|
|
log_info "Verifying TypeScript installation..."
|
|
if [ ! -f "./node_modules/.bin/tsc" ]; then
|
|
log_info "Installing TypeScript..."
|
|
if ! npm install --save-dev typescript@~5.2.2; then
|
|
log_error "TypeScript installation failed!"
|
|
exit 2
|
|
fi
|
|
# Verify installation
|
|
if [ ! -f "./node_modules/.bin/tsc" ]; then
|
|
log_error "TypeScript installation verification failed!"
|
|
exit 2
|
|
fi
|
|
log_success "TypeScript installed successfully"
|
|
else
|
|
log_info "TypeScript already installed"
|
|
fi
|
|
|
|
# Get git hash for versioning
|
|
GIT_HASH=$(git log -1 --pretty=format:%h)
|
|
log_info "Using git hash: ${GIT_HASH}"
|
|
|
|
# Build web assets
|
|
log_info "Building web assets with Vite..."
|
|
if ! measure_time env VITE_GIT_HASH="$GIT_HASH" npx vite build --config vite.config.electron.mts --mode electron; then
|
|
log_error "Web asset build failed!"
|
|
exit 3
|
|
fi
|
|
|
|
# Sync with Capacitor
|
|
log_info "Syncing with Capacitor..."
|
|
if ! measure_time npx cap sync electron; then
|
|
log_error "Capacitor sync failed!"
|
|
exit 4
|
|
fi
|
|
|
|
# Restore capacitor config
|
|
log_info "Restoring capacitor config..."
|
|
if ! git checkout electron/capacitor.config.json; then
|
|
log_error "Failed to restore capacitor config!"
|
|
exit 4
|
|
fi
|
|
|
|
# Start Electron
|
|
log_info "Starting Electron..."
|
|
cd electron/
|
|
if ! measure_time npm run electron:start; then
|
|
log_error "Electron start failed!"
|
|
exit 5
|
|
fi
|
|
|
|
# Print build summary
|
|
log_success "Build and start completed successfully!"
|
|
echo -e "\n${GREEN}=== End of Build Process ===${NC}\n"
|
|
|
|
# Exit with success
|
|
exit 0 |