backend-infra-engineer: Release v0.3.3 snapshot
This commit is contained in:
322
scripts/dev-setup.sh
Executable file
322
scripts/dev-setup.sh
Executable file
@@ -0,0 +1,322 @@
|
||||
#!/bin/bash
|
||||
# YAZE Developer Setup Script
|
||||
# One-command setup for new developers
|
||||
|
||||
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
|
||||
|
||||
# Print functions
|
||||
print_header() {
|
||||
echo -e "${BLUE}================================${NC}"
|
||||
echo -e "${BLUE}$1${NC}"
|
||||
echo -e "${BLUE}================================${NC}"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${GREEN}✓ $1${NC}"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}⚠ $1${NC}"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}✗ $1${NC}"
|
||||
}
|
||||
|
||||
# Detect OS
|
||||
detect_os() {
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
OS="linux"
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
OS="macos"
|
||||
elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
|
||||
OS="windows"
|
||||
else
|
||||
OS="unknown"
|
||||
fi
|
||||
echo "Detected OS: $OS"
|
||||
}
|
||||
|
||||
# Check prerequisites
|
||||
check_prerequisites() {
|
||||
print_header "Checking Prerequisites"
|
||||
|
||||
# Check Git
|
||||
if command -v git &> /dev/null; then
|
||||
print_success "Git found: $(git --version)"
|
||||
else
|
||||
print_error "Git not found. Please install Git first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check CMake
|
||||
if command -v cmake &> /dev/null; then
|
||||
CMAKE_VERSION=$(cmake --version | head -n1 | cut -d' ' -f3)
|
||||
print_success "CMake found: $CMAKE_VERSION"
|
||||
|
||||
# Check version
|
||||
CMAKE_MAJOR=$(echo $CMAKE_VERSION | cut -d'.' -f1)
|
||||
CMAKE_MINOR=$(echo $CMAKE_VERSION | cut -d'.' -f2)
|
||||
if [ "$CMAKE_MAJOR" -lt 3 ] || ([ "$CMAKE_MAJOR" -eq 3 ] && [ "$CMAKE_MINOR" -lt 16 ]); then
|
||||
print_error "CMake 3.16+ required. Found: $CMAKE_VERSION"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
print_error "CMake not found. Please install CMake 3.16+ first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check compiler
|
||||
if command -v gcc &> /dev/null; then
|
||||
GCC_VERSION=$(gcc --version | head -n1 | cut -d' ' -f4)
|
||||
print_success "GCC found: $GCC_VERSION"
|
||||
elif command -v clang &> /dev/null; then
|
||||
CLANG_VERSION=$(clang --version | head -n1 | cut -d' ' -f4)
|
||||
print_success "Clang found: $CLANG_VERSION"
|
||||
else
|
||||
print_error "No C++ compiler found. Please install GCC 12+ or Clang 14+."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check Ninja
|
||||
if command -v ninja &> /dev/null; then
|
||||
print_success "Ninja found: $(ninja --version)"
|
||||
else
|
||||
print_warning "Ninja not found. Will use Make instead."
|
||||
fi
|
||||
}
|
||||
|
||||
# Install dependencies
|
||||
install_dependencies() {
|
||||
print_header "Installing Dependencies"
|
||||
|
||||
case $OS in
|
||||
"linux")
|
||||
if command -v apt-get &> /dev/null; then
|
||||
print_success "Installing dependencies via apt..."
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y build-essential ninja-build pkg-config ccache \
|
||||
libsdl2-dev libyaml-cpp-dev libgtk-3-dev libglew-dev
|
||||
elif command -v dnf &> /dev/null; then
|
||||
print_success "Installing dependencies via dnf..."
|
||||
sudo dnf install -y gcc-c++ ninja-build pkgconfig SDL2-devel yaml-cpp-devel
|
||||
elif command -v pacman &> /dev/null; then
|
||||
print_success "Installing dependencies via pacman..."
|
||||
sudo pacman -S --needed base-devel ninja pkgconfig sdl2 yaml-cpp
|
||||
else
|
||||
print_warning "Unknown Linux distribution. Please install dependencies manually."
|
||||
fi
|
||||
;;
|
||||
"macos")
|
||||
if command -v brew &> /dev/null; then
|
||||
print_success "Installing dependencies via Homebrew..."
|
||||
brew install cmake ninja pkg-config ccache sdl2 yaml-cpp
|
||||
else
|
||||
print_warning "Homebrew not found. Please install dependencies manually."
|
||||
fi
|
||||
;;
|
||||
"windows")
|
||||
print_warning "Windows detected. Please install dependencies manually:"
|
||||
echo "1. Install Visual Studio Build Tools"
|
||||
echo "2. Install vcpkg and packages: sdl2, yaml-cpp"
|
||||
echo "3. Install Ninja from https://ninja-build.org/"
|
||||
;;
|
||||
*)
|
||||
print_warning "Unknown OS. Please install dependencies manually."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Setup repository
|
||||
setup_repository() {
|
||||
print_header "Setting up Repository"
|
||||
|
||||
# Check if we're in a git repository
|
||||
if [ ! -d ".git" ]; then
|
||||
print_error "Not in a git repository. Please run this script from the YAZE root directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Update submodules
|
||||
print_success "Updating submodules..."
|
||||
git submodule update --init --recursive
|
||||
|
||||
# Check for uncommitted changes
|
||||
if ! git diff-index --quiet HEAD --; then
|
||||
print_warning "You have uncommitted changes. Consider committing or stashing them."
|
||||
fi
|
||||
}
|
||||
|
||||
# Configure IDE
|
||||
configure_ide() {
|
||||
print_header "Configuring IDE"
|
||||
|
||||
# Generate compile_commands.json
|
||||
print_success "Generating compile_commands.json..."
|
||||
cmake -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
|
||||
|
||||
# Create VS Code settings
|
||||
if [ ! -d ".vscode" ]; then
|
||||
mkdir -p .vscode
|
||||
print_success "Creating VS Code configuration..."
|
||||
|
||||
cat > .vscode/settings.json << EOF
|
||||
{
|
||||
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
|
||||
"C_Cpp.default.compileCommands": "\${workspaceFolder}/build/compile_commands.json",
|
||||
"C_Cpp.default.intelliSenseMode": "macos-clang-x64",
|
||||
"files.associations": {
|
||||
"*.h": "c",
|
||||
"*.cc": "cpp"
|
||||
},
|
||||
"cmake.buildDirectory": "\${workspaceFolder}/build",
|
||||
"cmake.configureOnOpen": true,
|
||||
"cmake.useCMakePresets": "always",
|
||||
"cmake.generator": "Ninja Multi-Config",
|
||||
"cmake.preferredGenerators": [
|
||||
"Ninja Multi-Config",
|
||||
"Ninja",
|
||||
"Unix Makefiles"
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
cat > .vscode/tasks.json << EOF
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "CMake: Configure (dev)",
|
||||
"type": "shell",
|
||||
"command": "cmake",
|
||||
"args": ["--preset", "dev"],
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"presentation": {
|
||||
"echo": true,
|
||||
"reveal": "always",
|
||||
"focus": false,
|
||||
"panel": "shared"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "CMake: Build (dev)",
|
||||
"type": "shell",
|
||||
"command": "cmake",
|
||||
"args": ["--build", "--preset", "dev"],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": ["\$gcc"],
|
||||
"presentation": {
|
||||
"echo": true,
|
||||
"reveal": "always",
|
||||
"focus": false,
|
||||
"panel": "shared"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "CMake: Clean Build",
|
||||
"type": "shell",
|
||||
"command": "cmake",
|
||||
"args": ["--build", "--preset", "dev", "--target", "clean"],
|
||||
"group": "build",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "CMake: Run Tests",
|
||||
"type": "shell",
|
||||
"command": "ctest",
|
||||
"args": ["--preset", "stable", "--output-on-failure"],
|
||||
"group": "test",
|
||||
"problemMatcher": []
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
}
|
||||
|
||||
# Run first build
|
||||
run_first_build() {
|
||||
print_header "Running First Build"
|
||||
|
||||
# Configure project
|
||||
print_success "Configuring project..."
|
||||
cmake --preset dev
|
||||
|
||||
# Build project
|
||||
print_success "Building project..."
|
||||
cmake --build build
|
||||
|
||||
# Check if build succeeded
|
||||
if [ -f "build/bin/yaze" ] || [ -f "build/bin/yaze.exe" ]; then
|
||||
print_success "Build successful! YAZE executable created."
|
||||
else
|
||||
print_error "Build failed. Check the output above for errors."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Run tests
|
||||
run_tests() {
|
||||
print_header "Running Tests"
|
||||
|
||||
print_success "Running test suite..."
|
||||
cd build
|
||||
ctest --output-on-failure -L stable || print_warning "Some tests failed (this is normal for first setup)"
|
||||
cd ..
|
||||
}
|
||||
|
||||
# Print next steps
|
||||
print_next_steps() {
|
||||
print_header "Setup Complete!"
|
||||
|
||||
echo -e "${GREEN}✓ YAZE development environment is ready!${NC}"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo "1. Run the application:"
|
||||
echo " ./build/bin/yaze"
|
||||
echo ""
|
||||
echo "2. Run tests:"
|
||||
echo " cd build && ctest"
|
||||
echo ""
|
||||
echo "3. Format code:"
|
||||
echo " cmake --build build --target yaze-format"
|
||||
echo ""
|
||||
echo "4. Check formatting:"
|
||||
echo " cmake --build build --target yaze-format-check"
|
||||
echo ""
|
||||
echo "5. Read the documentation:"
|
||||
echo " docs/BUILD.md"
|
||||
echo ""
|
||||
echo "Happy coding! 🎮"
|
||||
}
|
||||
|
||||
# Main function
|
||||
main() {
|
||||
print_header "YAZE Developer Setup"
|
||||
echo "This script will set up your YAZE development environment."
|
||||
echo ""
|
||||
|
||||
detect_os
|
||||
check_prerequisites
|
||||
install_dependencies
|
||||
setup_repository
|
||||
configure_ide
|
||||
run_first_build
|
||||
run_tests
|
||||
print_next_steps
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
|
||||
Reference in New Issue
Block a user