forked from trent_larson/crowd-funder-for-time-pwa
Remove redundant build:capacitor:* script aliases
- Removed 24 redundant build:capacitor:* scripts that were just aliases - Kept essential build:capacitor and build:capacitor:sync scripts - Improves script clarity and reduces maintenance overhead - No functional changes to build processes
This commit is contained in:
343
scripts/auto-run.sh
Executable file
343
scripts/auto-run.sh
Executable file
@@ -0,0 +1,343 @@
|
||||
#!/bin/bash
|
||||
# auto-run.sh
|
||||
# Author: Matthew Raymer
|
||||
# Description: Smart auto-run script that detects devices and automatically launches
|
||||
# the appropriate target for test and production builds
|
||||
#
|
||||
# This script can:
|
||||
# - Detect connected Android devices vs emulators
|
||||
# - Detect connected iOS devices vs simulators
|
||||
# - Automatically launch Electron app
|
||||
# - Choose the best available target for each platform
|
||||
#
|
||||
# Usage:
|
||||
# ./scripts/auto-run.sh [--test|--prod] [--platform=ios|android|electron|all]
|
||||
#
|
||||
# Exit Codes:
|
||||
# 0 - Success
|
||||
# 1 - No devices found
|
||||
# 2 - Build failed
|
||||
# 3 - Launch failed
|
||||
|
||||
# Exit on any error
|
||||
set -e
|
||||
|
||||
# Source common utilities
|
||||
source "$(dirname "$0")/common.sh"
|
||||
|
||||
# Default values
|
||||
BUILD_MODE="development"
|
||||
PLATFORM="all"
|
||||
AUTO_CONFIRM=false
|
||||
|
||||
# Parse command line arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--test)
|
||||
BUILD_MODE="test"
|
||||
shift
|
||||
;;
|
||||
--prod)
|
||||
BUILD_MODE="production"
|
||||
shift
|
||||
;;
|
||||
--platform=*)
|
||||
PLATFORM="${1#*=}"
|
||||
shift
|
||||
;;
|
||||
--auto)
|
||||
AUTO_CONFIRM=true
|
||||
shift
|
||||
;;
|
||||
--help)
|
||||
echo "Usage: $0 [--test|--prod] [--platform=ios|android|electron|all] [--auto]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --test Build and run in test mode"
|
||||
echo " --prod Build and run in production mode"
|
||||
echo " --platform=PLATFORM Target platform (ios|android|electron|all)"
|
||||
echo " --auto Skip confirmation prompts"
|
||||
echo " --help Show this help message"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown option: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Print header
|
||||
print_header "TimeSafari Auto-Run"
|
||||
log_info "Build mode: $BUILD_MODE"
|
||||
log_info "Target platform: $PLATFORM"
|
||||
log_info "Auto confirm: $AUTO_CONFIRM"
|
||||
|
||||
# Function to detect Android devices
|
||||
detect_android_devices() {
|
||||
log_step "Detecting Android devices..."
|
||||
|
||||
# Check if adb is available
|
||||
if ! command -v adb &> /dev/null; then
|
||||
log_warn "ADB not found - Android detection skipped"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Get list of devices
|
||||
local devices_output=$(adb devices 2>/dev/null || echo "")
|
||||
local devices=()
|
||||
local emulators=()
|
||||
|
||||
# Parse device list
|
||||
while IFS= read -r line; do
|
||||
if [[ $line =~ ^([a-zA-Z0-9.-]+)[[:space:]]+device$ ]]; then
|
||||
local device_id="${BASH_REMATCH[1]}"
|
||||
|
||||
# Check if it's an emulator (emulator IDs typically contain 'emulator')
|
||||
if [[ $device_id == *"emulator"* ]]; then
|
||||
emulators+=("$device_id")
|
||||
else
|
||||
devices+=("$device_id")
|
||||
fi
|
||||
fi
|
||||
done <<< "$devices_output"
|
||||
|
||||
# Log results
|
||||
if [ ${#devices[@]} -gt 0 ]; then
|
||||
log_success "Found ${#devices[@]} real Android device(s): ${devices[*]}"
|
||||
fi
|
||||
|
||||
if [ ${#emulators[@]} -gt 0 ]; then
|
||||
log_success "Found ${#emulators[@]} Android emulator(s): ${emulators[*]}"
|
||||
fi
|
||||
|
||||
if [ ${#devices[@]} -eq 0 ] && [ ${#emulators[@]} -eq 0 ]; then
|
||||
log_warn "No Android devices or emulators found"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Return device type and ID
|
||||
if [ ${#devices[@]} -gt 0 ]; then
|
||||
echo "real:${devices[0]}"
|
||||
else
|
||||
echo "emulator:${emulators[0]}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to detect iOS devices
|
||||
detect_ios_devices() {
|
||||
log_step "Detecting iOS devices..."
|
||||
|
||||
# Check if xcrun is available
|
||||
if ! command -v xcrun &> /dev/null; then
|
||||
log_warn "xcrun not found - iOS detection skipped"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Get list of devices
|
||||
local devices_output=$(xcrun xctrace list devices 2>/dev/null || echo "")
|
||||
local devices=()
|
||||
local simulators=()
|
||||
|
||||
# Parse device list
|
||||
while IFS= read -r line; do
|
||||
# Look for real devices (containing "iPhone" or "iPad" but not "Simulator")
|
||||
if [[ $line =~ iPhone|iPad ]] && [[ $line != *"Simulator"* ]]; then
|
||||
if [[ $line =~ \(([A-F0-9-]+)\) ]]; then
|
||||
local device_id="${BASH_REMATCH[1]}"
|
||||
devices+=("$device_id")
|
||||
fi
|
||||
fi
|
||||
|
||||
# Look for simulators
|
||||
if [[ $line =~ Simulator ]]; then
|
||||
if [[ $line =~ \(([A-F0-9-]+)\) ]]; then
|
||||
local simulator_id="${BASH_REMATCH[1]}"
|
||||
simulators+=("$simulator_id")
|
||||
fi
|
||||
fi
|
||||
done <<< "$devices_output"
|
||||
|
||||
# Log results
|
||||
if [ ${#devices[@]} -gt 0 ]; then
|
||||
log_success "Found ${#devices[@]} real iOS device(s): ${devices[*]}"
|
||||
fi
|
||||
|
||||
if [ ${#simulators[@]} -gt 0 ]; then
|
||||
log_success "Found ${#simulators[@]} iOS simulator(s): ${simulators[*]}"
|
||||
fi
|
||||
|
||||
if [ ${#devices[@]} -eq 0 ] && [ ${#simulators[@]} -eq 0 ]; then
|
||||
log_warn "No iOS devices or simulators found"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Return device type and ID
|
||||
if [ ${#devices[@]} -gt 0 ]; then
|
||||
echo "real:${devices[0]}"
|
||||
else
|
||||
echo "simulator:${simulators[0]}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to build and run Android
|
||||
run_android() {
|
||||
local device_info=$1
|
||||
local device_type=$(echo "$device_info" | cut -d: -f1)
|
||||
local device_id=$(echo "$device_info" | cut -d: -f2)
|
||||
|
||||
log_step "Building and running Android ($device_type: $device_id)..."
|
||||
|
||||
# Build the app
|
||||
if [ "$BUILD_MODE" = "test" ]; then
|
||||
safe_execute "Building Android (test)" "npm run build:android:test"
|
||||
elif [ "$BUILD_MODE" = "production" ]; then
|
||||
safe_execute "Building Android (production)" "npm run build:android:prod"
|
||||
else
|
||||
safe_execute "Building Android (development)" "npm run build:android:dev"
|
||||
fi
|
||||
|
||||
# Run the app
|
||||
if [ "$device_type" = "real" ]; then
|
||||
log_info "Installing and launching on real device: $device_id"
|
||||
safe_execute "Installing APK" "adb -s $device_id install -r android/app/build/outputs/apk/debug/app-debug.apk"
|
||||
safe_execute "Launching app" "adb -s $device_id shell am start -n app.timesafari.app/app.timesafari.MainActivity"
|
||||
else
|
||||
log_info "Launching emulator and installing app"
|
||||
safe_execute "Launching app" "npx cap run android"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to build and run iOS
|
||||
run_ios() {
|
||||
local device_info=$1
|
||||
local device_type=$(echo "$device_info" | cut -d: -f1)
|
||||
local device_id=$(echo "$device_info" | cut -d: -f2)
|
||||
|
||||
log_step "Building and running iOS ($device_type: $device_id)..."
|
||||
|
||||
# Build the app
|
||||
if [ "$BUILD_MODE" = "test" ]; then
|
||||
safe_execute "Building iOS (test)" "npm run build:ios:test"
|
||||
elif [ "$BUILD_MODE" = "production" ]; then
|
||||
safe_execute "Building iOS (production)" "npm run build:ios:prod"
|
||||
else
|
||||
safe_execute "Building iOS (development)" "npm run build:ios:dev"
|
||||
fi
|
||||
|
||||
# Run the app
|
||||
if [ "$device_type" = "real" ]; then
|
||||
log_info "Building and installing on real device: $device_id"
|
||||
safe_execute "Building for device" "npm run build:ios:release"
|
||||
# Note: For real devices, you'd typically need to use Xcode or fastlane
|
||||
log_warn "Real device deployment requires Xcode or fastlane setup"
|
||||
else
|
||||
log_info "Launching simulator and installing app"
|
||||
safe_execute "Launching app" "npx cap run ios"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to build and run Electron
|
||||
run_electron() {
|
||||
log_step "Building and running Electron..."
|
||||
|
||||
# Build the app
|
||||
if [ "$BUILD_MODE" = "test" ]; then
|
||||
safe_execute "Building Electron (test)" "npm run build:electron:test"
|
||||
elif [ "$BUILD_MODE" = "production" ]; then
|
||||
safe_execute "Building Electron (production)" "npm run build:electron:prod"
|
||||
else
|
||||
safe_execute "Building Electron (development)" "npm run build:electron:dev"
|
||||
fi
|
||||
|
||||
# Run the app
|
||||
log_info "Launching Electron app"
|
||||
safe_execute "Launching Electron" "npm run electron:start"
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
log_info "Starting auto-run at $(date)"
|
||||
|
||||
# Detect available platforms
|
||||
local android_device=""
|
||||
local ios_device=""
|
||||
local electron_available=true
|
||||
|
||||
# Check Android
|
||||
if [ "$PLATFORM" = "all" ] || [ "$PLATFORM" = "android" ]; then
|
||||
android_device=$(detect_android_devices) || log_warn "Android not available"
|
||||
fi
|
||||
|
||||
# Check iOS (only on macOS)
|
||||
if [ "$PLATFORM" = "all" ] || [ "$PLATFORM" = "ios" ]; then
|
||||
if [ "$(uname)" = "Darwin" ]; then
|
||||
ios_device=$(detect_ios_devices) || log_warn "iOS not available"
|
||||
else
|
||||
log_warn "iOS not available on non-macOS platform"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check Electron
|
||||
if [ "$PLATFORM" = "all" ] || [ "$PLATFORM" = "electron" ]; then
|
||||
if ! command -v electron &> /dev/null; then
|
||||
log_warn "Electron not available"
|
||||
electron_available=false
|
||||
fi
|
||||
fi
|
||||
|
||||
# Show available options
|
||||
log_info "Available targets:"
|
||||
[ -n "$android_device" ] && log_info " Android: $android_device"
|
||||
[ -n "$ios_device" ] && log_info " iOS: $ios_device"
|
||||
[ "$electron_available" = true ] && log_info " Electron: available"
|
||||
|
||||
# Confirm with user (unless auto mode)
|
||||
if [ "$AUTO_CONFIRM" = false ]; then
|
||||
echo ""
|
||||
read -p "Continue with auto-run? (y/N): " -n 1 -r
|
||||
echo ""
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
log_info "Auto-run cancelled by user"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Execute based on platform selection
|
||||
local success_count=0
|
||||
|
||||
if [ "$PLATFORM" = "android" ] || [ "$PLATFORM" = "all" ]; then
|
||||
if [ -n "$android_device" ]; then
|
||||
if run_android "$android_device"; then
|
||||
((success_count++))
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$PLATFORM" = "ios" ] || [ "$PLATFORM" = "all" ]; then
|
||||
if [ -n "$ios_device" ]; then
|
||||
if run_ios "$ios_device"; then
|
||||
((success_count++))
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$PLATFORM" = "electron" ] || [ "$PLATFORM" = "all" ]; then
|
||||
if [ "$electron_available" = true ]; then
|
||||
if run_electron; then
|
||||
((success_count++))
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Summary
|
||||
if [ $success_count -gt 0 ]; then
|
||||
log_success "Auto-run completed successfully! $success_count platform(s) launched."
|
||||
else
|
||||
log_error "No platforms were successfully launched"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user