#!/bin/bash # Exit on error set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Logging functions log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # Validation functions check_command() { if ! command -v $1 &> /dev/null; then log_error "$1 is not installed. Please install it first." exit 1 fi } check_environment() { # Check for required tools check_command "node" check_command "npm" check_command "java" check_command "gradle" # Check Node.js version NODE_VERSION=$(node -v | cut -d. -f1 | tr -d 'v') if [ "$NODE_VERSION" -lt 14 ]; then log_error "Node.js version 14 or higher is required" exit 1 fi # Check Java version JAVA_VERSION=$(java -version 2>&1 | head -n 1 | cut -d'"' -f2 | cut -d. -f1) if [ "$JAVA_VERSION" -lt 11 ]; then log_error "Java version 11 or higher is required" exit 1 fi # Check for Android SDK if [ -z "$ANDROID_HOME" ]; then log_error "ANDROID_HOME environment variable is not set" exit 1 fi } # Build functions build_typescript() { log_info "Building TypeScript..." npm run clean if ! npm run build; then log_error "TypeScript build failed" exit 1 fi } build_android() { log_info "Building Android..." cd android || exit 1 # Check for gradle wrapper if [ ! -f "./gradlew" ]; then log_error "Gradle wrapper not found" exit 1 fi # Clean and build if ! ./gradlew clean; then log_error "Android clean failed" exit 1 fi if ! ./gradlew assembleRelease; then log_error "Android build failed" exit 1 fi # Verify AAR file exists AAR_FILE="build/outputs/aar/daily-notification-release.aar" if [ ! -f "$AAR_FILE" ]; then log_error "AAR file not found at $AAR_FILE" exit 1 fi log_info "Android build successful: $AAR_FILE" cd .. } # Main build process main() { log_info "Starting build process..." # Parse command line arguments BUILD_PLATFORM="all" while [[ $# -gt 0 ]]; do case $1 in --platform) BUILD_PLATFORM="$2" shift 2 ;; *) log_error "Unknown option: $1" exit 1 ;; esac done # Check environment check_environment # Build TypeScript build_typescript # Build based on platform case $BUILD_PLATFORM in "android") build_android ;; "all") build_android ;; *) log_error "Invalid platform: $BUILD_PLATFORM. Use 'android' or 'all'" exit 1 ;; esac log_info "Build completed successfully!" } # Run main function with all arguments main "$@"