File size: 1,915 Bytes
ed3aeeb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #!/bin/sh
set -eu
PROJECT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
UV_VERSION="0.11.32"
UV_INSTALLER_SHA256="43aff33a967fe40e8c17949d8c85c65bc43f3b5c94742393c957f56ab5ba80f4"
PYTHON_VERSION="3.12.13"
TOOL_DIR="$PROJECT_ROOT/environment/bin"
CACHE_DIR="$PROJECT_ROOT/environment/cache"
INSTALLER="$PROJECT_ROOT/environment/uv-installer-$UV_VERSION.sh"
mkdir -p "$TOOL_DIR" "$CACHE_DIR" "$PROJECT_ROOT/logs/setup"
if [ ! -x "$TOOL_DIR/uv" ]; then
curl --proto '=https' --tlsv1.2 -fL \
"https://astral.sh/uv/$UV_VERSION/install.sh" \
-o "$INSTALLER.part"
printf '%s %s\n' "$UV_INSTALLER_SHA256" "$INSTALLER.part" | sha256sum --check --status
mv "$INSTALLER.part" "$INSTALLER"
UV_UNMANAGED_INSTALL="$TOOL_DIR" UV_NO_MODIFY_PATH=1 sh "$INSTALLER"
fi
if [ -x "$PROJECT_ROOT/.venv/bin/python" ]; then
ACTUAL_PYTHON_VERSION=$($PROJECT_ROOT/.venv/bin/python -c 'import platform; print(platform.python_version())')
if [ "$ACTUAL_PYTHON_VERSION" != "$PYTHON_VERSION" ]; then
echo "existing .venv uses Python $ACTUAL_PYTHON_VERSION, expected $PYTHON_VERSION; refusing to overwrite" >&2
exit 1
fi
else
UV_CACHE_DIR="$CACHE_DIR" "$TOOL_DIR/uv" venv \
--python "$PYTHON_VERSION" --python-preference only-managed "$PROJECT_ROOT/.venv"
fi
UV_CACHE_DIR="$CACHE_DIR" "$TOOL_DIR/uv" pip install \
--python "$PROJECT_ROOT/.venv/bin/python" \
-r "$PROJECT_ROOT/environment/requirements-runtime.lock"
UV_CACHE_DIR="$CACHE_DIR" "$TOOL_DIR/uv" pip freeze \
--python "$PROJECT_ROOT/.venv/bin/python" \
> "$PROJECT_ROOT/environment/installed-packages.txt"
sha256sum \
"$PROJECT_ROOT/environment/requirements-runtime.lock" \
"$PROJECT_ROOT/environment/installed-packages.txt" \
> "$PROJECT_ROOT/environment/installed-packages.sha256"
"$PROJECT_ROOT/.venv/bin/python" "$PROJECT_ROOT/scripts/capture_environment.py" \
--output "$PROJECT_ROOT/environment/tool_versions.json"
|