mirror of
https://github.com/esphome/esphome.git
synced 2026-08-30 01:26:43 +00:00
72 lines
2.5 KiB
Bash
Executable File
72 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Set up ESPHome dev environment
|
|
|
|
set -e
|
|
|
|
cd "$(dirname "$0")/.."
|
|
if [ -n "$VIRTUAL_ENV" ]; then
|
|
# A virtual environment is already active (e.g. the devcontainer's pre-provisioned
|
|
# esphome-venv). Install into it rather than creating a ./venv in the workspace.
|
|
venv_state=active
|
|
elif [ -x venv/bin/python ]; then
|
|
# Reuse the environment from an earlier run, so this script can be run again
|
|
# at any time to pick up dependency changes.
|
|
venv_state=reused
|
|
source venv/bin/activate
|
|
else
|
|
venv_state=created
|
|
# --clear replaces a partial environment left behind by an interrupted run.
|
|
if [ -x "$(command -v uv)" ]; then
|
|
uv venv --clear --seed venv
|
|
else
|
|
python3 -m venv --clear venv
|
|
fi
|
|
source venv/bin/activate
|
|
fi
|
|
|
|
if ! [ -x "$(command -v uv)" ]; then
|
|
python3 -m pip install uv
|
|
fi
|
|
|
|
uv pip install setuptools wheel
|
|
uv pip install -e ".[dev,test]" --config-settings editable_mode=compat
|
|
|
|
# A worktree shares one git hooks directory with the main checkout it was
|
|
# created from, so hooks are installed from the main checkout only. Installing
|
|
# from a worktree would point the shared hook at that worktree's virtual
|
|
# environment, breaking it for everyone once the worktree is removed.
|
|
git_dir="$(git rev-parse --absolute-git-dir 2>/dev/null || true)"
|
|
common_dir="$(git rev-parse --path-format=absolute --git-common-dir 2>/dev/null || true)"
|
|
if [ -n "$common_dir" ] && [ "$git_dir" = "$common_dir" ]; then
|
|
# --overwrite replaces any hook already in place. Without it, prek finds a
|
|
# previously installed pre-commit hook, moves it aside to
|
|
# .git/hooks/pre-commit.legacy and keeps calling it, so every commit would
|
|
# run both tools.
|
|
prek install --overwrite
|
|
|
|
# Prepares the virtual environment for new checkouts and worktrees. Installed
|
|
# once here, it covers every worktree created from this checkout.
|
|
if [ -d "$common_dir/hooks" ]; then
|
|
cp script/git-hooks/post-checkout "$common_dir/hooks/post-checkout"
|
|
chmod +x "$common_dir/hooks/post-checkout"
|
|
fi
|
|
fi
|
|
|
|
mkdir -p .temp
|
|
|
|
echo
|
|
echo
|
|
case "$venv_state" in
|
|
created)
|
|
echo "Virtual environment created at ./venv. Run 'source venv/bin/activate' to use it."
|
|
;;
|
|
reused)
|
|
echo "Dependencies updated in the existing ./venv. Run 'source venv/bin/activate' to use it."
|
|
;;
|
|
active)
|
|
echo "Dependencies installed into the active virtual environment:"
|
|
echo " $VIRTUAL_ENV"
|
|
echo "It is already active in this shell, so no 'source venv/bin/activate' is needed."
|
|
;;
|
|
esac
|