first commit
This commit is contained in:
Executable
+200
@@ -0,0 +1,200 @@
|
||||
#!/bin/bash
|
||||
|
||||
# TankStopp Build Script
|
||||
# This script handles templ generation and application building
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Function to print colored output
|
||||
print_status() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Function to check if templ is installed
|
||||
check_templ() {
|
||||
if ! command -v templ &> /dev/null; then
|
||||
print_error "templ CLI is not installed"
|
||||
print_status "Installing templ..."
|
||||
go install github.com/a-h/templ/cmd/templ@latest
|
||||
if [ $? -eq 0 ]; then
|
||||
print_success "templ installed successfully"
|
||||
else
|
||||
print_error "Failed to install templ"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
print_success "templ CLI is available"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to format templ files
|
||||
format_templ() {
|
||||
print_status "Formatting templ files..."
|
||||
templ fmt ./internal/views/
|
||||
if [ $? -eq 0 ]; then
|
||||
print_success "Templ files formatted successfully"
|
||||
else
|
||||
print_error "Failed to format templ files"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to generate Go code from templ files
|
||||
generate_templ() {
|
||||
print_status "Generating Go code from templ files..."
|
||||
templ generate ./internal/views/
|
||||
if [ $? -eq 0 ]; then
|
||||
print_success "Go code generated successfully"
|
||||
else
|
||||
print_error "Failed to generate Go code from templ files"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to build the application
|
||||
build_app() {
|
||||
print_status "Building application..."
|
||||
go build -o tankstopp ./cmd/main.go
|
||||
if [ $? -eq 0 ]; then
|
||||
print_success "Application built successfully"
|
||||
else
|
||||
print_error "Failed to build application"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to run tests
|
||||
run_tests() {
|
||||
print_status "Running tests..."
|
||||
go test ./...
|
||||
if [ $? -eq 0 ]; then
|
||||
print_success "All tests passed"
|
||||
else
|
||||
print_error "Some tests failed"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to clean generated files
|
||||
clean() {
|
||||
print_status "Cleaning generated files..."
|
||||
find ./internal/views -name "*_templ.go" -delete
|
||||
rm -f tankstopp
|
||||
print_success "Cleaned generated files"
|
||||
}
|
||||
|
||||
# Function to watch for changes (development mode)
|
||||
watch() {
|
||||
print_status "Starting development watch mode..."
|
||||
print_warning "This requires 'entr' to be installed (brew install entr / apt-get install entr)"
|
||||
|
||||
if ! command -v entr &> /dev/null; then
|
||||
print_error "entr is not installed. Install it with: brew install entr (macOS) or apt-get install entr (Linux)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_status "Watching for changes in templ files..."
|
||||
find ./internal/views -name "*.templ" | entr -r sh -c 'echo "Changes detected, rebuilding..." && ./scripts/build.sh dev'
|
||||
}
|
||||
|
||||
# Function to show help
|
||||
show_help() {
|
||||
echo "TankStopp Build Script"
|
||||
echo ""
|
||||
echo "Usage: $0 [COMMAND]"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " dev - Development build (format, generate, build)"
|
||||
echo " prod - Production build (format, generate, test, build)"
|
||||
echo " generate - Generate Go code from templ files only"
|
||||
echo " format - Format templ files only"
|
||||
echo " clean - Clean generated files"
|
||||
echo " test - Run tests only"
|
||||
echo " watch - Watch for changes and rebuild (requires entr)"
|
||||
echo " help - Show this help message"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 dev # Quick development build"
|
||||
echo " $0 prod # Production build with tests"
|
||||
echo " $0 watch # Watch mode for development"
|
||||
}
|
||||
|
||||
# Main script logic
|
||||
main() {
|
||||
case "${1:-dev}" in
|
||||
"dev")
|
||||
print_status "Starting development build..."
|
||||
check_templ
|
||||
format_templ
|
||||
generate_templ
|
||||
build_app
|
||||
print_success "Development build completed!"
|
||||
;;
|
||||
"prod")
|
||||
print_status "Starting production build..."
|
||||
check_templ
|
||||
format_templ
|
||||
generate_templ
|
||||
run_tests
|
||||
build_app
|
||||
print_success "Production build completed!"
|
||||
;;
|
||||
"generate")
|
||||
print_status "Generating templ files..."
|
||||
check_templ
|
||||
generate_templ
|
||||
print_success "Generation completed!"
|
||||
;;
|
||||
"format")
|
||||
print_status "Formatting templ files..."
|
||||
check_templ
|
||||
format_templ
|
||||
print_success "Formatting completed!"
|
||||
;;
|
||||
"clean")
|
||||
clean
|
||||
;;
|
||||
"test")
|
||||
run_tests
|
||||
;;
|
||||
"watch")
|
||||
watch
|
||||
;;
|
||||
"help"|"-h"|"--help")
|
||||
show_help
|
||||
;;
|
||||
*)
|
||||
print_error "Unknown command: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Check if we're in the right directory
|
||||
if [ ! -f "go.mod" ]; then
|
||||
print_error "This script must be run from the project root directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Run main function with all arguments
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user