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.
155 lines
3.9 KiB
155 lines
3.9 KiB
#!/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 VITE_PWA_ENABLED=false
|
|
export VITE_DISABLE_PWA=true
|
|
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.app.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
|