Files
jmanus/build-ui.sh
cuijiawang 0982edf55f init
2025-08-01 10:24:29 +08:00

189 lines
4.8 KiB
Bash

# /*
# * Copyright 2025 the original author or authors.
# *
# * Licensed under the Apache License, Version 2.0 (the "License");
# * you may not use this file except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * https://www.apache.org/licenses/LICENSE-2.0
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# */
#!/bin/bash
# Build frontend UI and deploy to Spring Boot static resources directory
# For macOS
set -e # Exit immediately on error
# Get the absolute path of the script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$SCRIPT_DIR"
# Define color output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Output colored logs
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Check if necessary commands exist
check_commands() {
log_info "Checking necessary commands..."
if ! command -v pnpm &> /dev/null; then
log_error "pnpm is not installed, please install pnpm first"
log_info "Installation command: npm install -g pnpm"
exit 1
fi
log_success "Command check completed"
}
# Check directory structure
check_directories() {
log_info "Checking project directory structure..."
if [ ! -d "$PROJECT_ROOT/ui-vue3" ]; then
log_error "ui-vue3 directory does not exist: $PROJECT_ROOT/ui-vue3"
exit 1
fi
if [ ! -f "$PROJECT_ROOT/ui-vue3/package.json" ]; then
log_error "ui-vue3/package.json file does not exist"
exit 1
fi
if [ ! -d "$PROJECT_ROOT/src/main/resources" ]; then
log_error "Spring Boot resources directory does not exist: $PROJECT_ROOT/src/main/resources"
exit 1
fi
log_success "Directory structure check completed"
}
# Build frontend project
build_frontend() {
log_info "Starting frontend project build..."
cd "$PROJECT_ROOT/ui-vue3"
# Check if node_modules exists, install dependencies if not
if [ ! -d "node_modules" ]; then
log_warning "node_modules does not exist, installing dependencies..."
pnpm install
fi
# Run build command
log_info "Running pnpm run build..."
pnpm run build
# Check build result
if [ ! -d "ui" ]; then
log_error "Build failed, ui directory does not exist"
exit 1
fi
log_success "Frontend project build completed"
}
# Clear static resources directory
clean_static_directory() {
log_info "Clearing static resources directory..."
STATIC_DIR="$PROJECT_ROOT/src/main/resources/static"
# Create directory (if it doesn't exist)
mkdir -p "$STATIC_DIR"
# Clear directory contents
if [ "$(ls -A $STATIC_DIR)" ]; then
log_warning "Deleting existing files in $STATIC_DIR..."
rm -rf "$STATIC_DIR"/*
log_success "Static resources directory cleared"
else
log_info "Static resources directory is already empty"
fi
}
# Copy build files
copy_build_files() {
log_info "Copying build files to static resources directory..."
SOURCE_DIR="$PROJECT_ROOT/ui-vue3/ui"
TARGET_DIR="$PROJECT_ROOT/src/main/resources/static/"
if [ ! -d "$SOURCE_DIR" ]; then
log_error "Source directory does not exist: $SOURCE_DIR"
exit 1
fi
# Copy files
cp -r "$SOURCE_DIR" "$TARGET_DIR/"
# Verify copy result
if [ "$(ls -A $TARGET_DIR)" ]; then
log_success "File copy completed"
log_info "Copied files:"
ls -la "$TARGET_DIR"
else
log_error "File copy failed, target directory is empty"
exit 1
fi
}
# Show build summary
show_summary() {
log_success "=== Build Completed ==="
log_info "Frontend files successfully deployed to: $PROJECT_ROOT/src/main/resources/static/"
log_info "You can now run the Spring Boot application"
log_info ""
log_info "Example startup commands:"
log_info " mvn spring-boot:run"
log_info " or"
log_info " java -jar target/spring-ai-alibaba-jmanus-*.jar"
}
# Main function
main() {
log_info "Starting frontend build and deployment process..."
log_info "Project root directory: $PROJECT_ROOT"
echo ""
check_commands
check_directories
build_frontend
clean_static_directory
copy_build_files
show_summary
log_success "All steps completed!"
}
# Error handling
trap 'log_error "Error occurred during script execution, exit code: $?"' ERR
# Run main function
main "$@"