#!/bin/bash # script/setup: Setup script used by DevContainers to prepare the project # # Installs optional development tools (pyright, GitHub Copilot CLI, git-cliff) # and configures the environment. Called automatically by DevContainer postStartCommand. # # Usage: # ./scripts/setup/setup # # Examples: # ./scripts/setup/setup set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$SCRIPT_DIR/../.." # shellcheck source=scripts/.lib/output.sh source "$SCRIPT_DIR/../.lib/output.sh" # Install optional pyright for type checking if command -v npm >/dev/null 2>&1 && ! command -v pyright >/dev/null 2>&1; then log_header "Installing pyright for type checking" npm install -g pyright 2>/dev/null || { log_warning "pyright installation failed (optional)" log_info "You can install it manually: ${BOLD}npm install -g pyright${NC}" } fi # Install optional release note backend: GitHub Copilot CLI (AI-powered) if command -v npm >/dev/null 2>&1 && ! command -v copilot >/dev/null 2>&1; then log_header "Installing GitHub Copilot CLI for AI-powered release notes" npm install -g @github/copilot 2>/dev/null || { log_warning "GitHub Copilot CLI installation failed (optional)" log_info "You can install it manually: ${BOLD}npm install -g @github/copilot${NC}" } fi # Install optional release note backend: git-cliff (template-based) if command -v cargo >/dev/null 2>&1 && ! command -v git-cliff >/dev/null 2>&1; then log_header "Installing git-cliff for template-based release notes" cargo install git-cliff || { log_warning "git-cliff installation failed (optional)" } fi "$SCRIPT_DIR/bootstrap" # Setup Debian compatibility symlinks for common CLI tool names. mkdir -p "$HOME/.local/bin" # Generalized function to create command aliases for Debian compatibility ensure_command_alias() { local expected_cmd="$1" local actual_cmd="$2" if command -v "$actual_cmd" >/dev/null 2>&1; then actual_path="$(command -v "$actual_cmd")" ln -sf "$actual_path" "$HOME/.local/bin/$expected_cmd" 2>/dev/null || true fi } # Create command aliases for Debian compatibility # Debian package names differ from expected spellings ensure_command_alias "bat" "batcat" ensure_command_alias "fd" "fdfind" ensure_command_alias "fd-find" "fdfind" ensure_command_alias "delta" "git-delta" ensure_command_alias "http" "httpie" ensure_command_alias "ipython" "ipython3" ensure_command_alias "mlr" "miller" ensure_command_alias "rg" "ripgrep" # Ensure user-local bin directory is available in interactive shells. if ! grep -q '\$HOME/.local/bin' "$HOME/.zshrc" 2>/dev/null; then printf '\n# Added by scripts/setup/setup\nexport PATH="$HOME/.local/bin:$PATH"\n' >>"$HOME/.zshrc" fi # Install HACS for testing with other custom components echo "" log_header "Installing HACS in dev environment" log_info "This allows testing your integration alongside other HACS components" # Ensure config directory is initialized by Home Assistant first if [[ ! -f config/.HA_VERSION ]]; then log_step "Initializing Home Assistant config directory" hass --config "${PWD}/config" --script ensure_config >/dev/null 2>&1 || true fi # Create custom_components directory if it doesn't exist mkdir -p config/custom_components # Clean up existing HACS installation if present if [[ -d config/custom_components/hacs ]]; then log_step "Removing existing HACS installation" rm -rf config/custom_components/hacs fi if [[ -L custom_components/hacs ]]; then log_step "Removing existing HACS symlink" rm -f custom_components/hacs fi # Download and extract HACS (stable release ZIP) cd config/custom_components log_step "Downloading HACS" if wget -q https://github.com/hacs/integration/releases/latest/download/hacs.zip && unzip -q hacs.zip -d hacs && rm hacs.zip; then cd ../.. # Install HACS Python dependencies log_step "Installing HACS Python dependencies" if uv pip install -q 'aiogithubapi>=22.10.1'; then # Create symlink so HA finds HACS alongside tibber_prices log_step "Creating symlink in custom_components/" ln -sf "${PWD}/config/custom_components/hacs" custom_components/hacs log_success "HACS installed successfully" log_info "Location: ${BOLD}config/custom_components/hacs/${NC}" log_info "Version: Stable release (no auto-updates)" else log_warning "Failed to install HACS Python dependencies" log_info "You can install manually: ${BOLD}uv pip install 'aiogithubapi>=22.10.1'${NC}" fi else log_warning "HACS installation failed" log_info "You can install manually:" log_step "${BOLD}cd config/custom_components${NC}" log_step "${BOLD}wget https://github.com/hacs/integration/releases/latest/download/hacs.zip${NC}" log_step "${BOLD}unzip hacs.zip -d hacs && rm hacs.zip${NC}" cd ../.. fi echo "" log_success "Project setup complete"