chore(dev): add HACS installation and sync scripts for testing

Added scripts to install HACS in DevContainer for testing the
integration alongside other HACS components.

Changes:
- scripts/setup: Automatically install HACS and create symlink
- scripts/sync-hacs: Sync HACS-installed integrations via symlinks
- .gitignore: Ignore custom_components/* except tibber_prices

HACS installs to config/custom_components/, symlinks in
custom_components/ make integrations visible to Home Assistant.

Impact: Developers can test with other integrations. No user changes.
This commit is contained in:
Julian Pawlowski 2025-11-16 18:05:14 +00:00
parent 3a9ba55dd3
commit 60c3b72932
3 changed files with 101 additions and 0 deletions

5
.gitignore vendored
View file

@ -19,6 +19,11 @@ uv.lock
config/*
!config/configuration.yaml
# HACS and other custom components installed for testing
# Ignore everything in custom_components/ except tibber_prices
custom_components/*
!custom_components/tibber_prices/
# Home Assistant database and logs
*.db
*.db-shm

View file

@ -25,4 +25,61 @@ fi
scripts/bootstrap
# Install HACS for testing with other custom components
echo ""
echo "==> Installing HACS in dev environment..."
echo " This allows testing your integration alongside other HACS components."
# Ensure config directory is initialized by Home Assistant first
if [ ! -f "config/.HA_VERSION" ]; then
echo " → 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
echo " → Removing existing HACS installation..."
rm -rf config/custom_components/hacs
fi
if [ -L "custom_components/hacs" ]; then
echo " → Removing existing HACS symlink..."
rm -f custom_components/hacs
fi
# Download and extract HACS (stable release ZIP)
cd config/custom_components
echo " → 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
echo " → Installing HACS Python dependencies..."
if uv pip install -q 'aiogithubapi>=22.10.1'; then
# Create symlink so HA finds HACS alongside tibber_prices
echo " → Creating symlink in custom_components/..."
ln -sf "${PWD}/config/custom_components/hacs" custom_components/hacs
echo " ✓ HACS installed successfully in config/custom_components/hacs/"
echo " HACS is installed as stable release (no auto-updates)"
echo " HACS will install other integrations in config/custom_components/"
echo " Run './scripts/sync-hacs' after installing integrations via HACS"
else
echo " ⚠️ Warning: Failed to install HACS Python dependencies"
echo " You can install manually: uv pip install 'aiogithubapi>=22.10.1'"
fi
else
echo " ⚠️ Warning: HACS installation failed"
echo " You can install manually:"
echo " cd config/custom_components"
echo " wget https://github.com/hacs/integration/releases/latest/download/hacs.zip"
echo " unzip hacs.zip -d hacs && rm hacs.zip"
cd ../..
fi
echo ""
echo "==> Project is now ready to go!"

39
scripts/sync-hacs Executable file
View file

@ -0,0 +1,39 @@
#!/usr/bin/env bash
# script/sync-hacs: Sync HACS-installed integrations to custom_components/
set -e
cd "$(dirname "$0")/.."
echo "==> Syncing HACS-installed integrations..."
# Check if config/custom_components exists
if [ ! -d "config/custom_components" ]; then
echo " No config/custom_components directory found"
exit 0
fi
# Create symlinks for all integrations in config/custom_components/
# except those that already exist in custom_components/
synced=0
for dir in config/custom_components/*/; do
component=$(basename "$dir")
target="custom_components/$component"
# Skip if already exists and is not a symlink (don't touch tibber_prices)
if [ -e "$target" ] && [ ! -L "$target" ]; then
continue
fi
# Create or update symlink
ln -sf "${PWD}/config/custom_components/$component" "$target"
echo " ✓ Linked: $component"
synced=$((synced + 1))
done
if [ $synced -eq 0 ]; then
echo " No new integrations to sync"
else
echo " ✓ Synced $synced integration(s)"
fi