mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-05-28 18:43:40 +00:00
Apply consistent 4-space indentation and trailing-operator style for line continuations (&&, |) across all development and release scripts. No logic changes. Release-Notes: skip
136 lines
4.9 KiB
Bash
Executable file
136 lines
4.9 KiB
Bash
Executable file
#!/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"
|