Update setup_uv

This commit is contained in:
tremor021 2025-06-04 11:56:46 +02:00
parent db6afe10d0
commit 4c8f267e59

View File

@ -989,63 +989,108 @@ function download_with_progress() {
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Installs or upgrades uv (Python package manager) from GitHub releases. # Installs or upgrades uv (Python package manager) from GitHub releases.
# # - Downloads platform-specific tarball (no install.sh!)
# Description: # - Extracts uv binary
# - Downloads architecture-specific tarball # - Places it in /usr/local/bin
# - Places binary in /usr/local/bin # - Optionally installs a specific Python version via uv
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
function setup_uv() { function setup_uv() {
$STD msg_info "Checking uv installation..." $STD msg_info "Checking uv installation..."
UV_BIN="/usr/local/bin/uv" local UV_BIN="/usr/local/bin/uv"
local TMP_DIR
TMP_DIR=$(mktemp -d) TMP_DIR=$(mktemp -d)
ARCH=$(uname -m)
if [[ "$ARCH" == "x86_64" ]]; then # Determine system architecture
UV_TAR="uv-x86_64-unknown-linux-gnu.tar.gz" local ARCH
elif [[ "$ARCH" == "aarch64" ]]; then ARCH=$(uname -m)
UV_TAR="uv-aarch64-unknown-linux-gnu.tar.gz" local UV_TAR
else
case "$ARCH" in
x86_64) UV_TAR="uv-x86_64-unknown-linux-gnu.tar.gz" ;;
aarch64) UV_TAR="uv-aarch64-unknown-linux-gnu.tar.gz" ;;
*)
msg_error "Unsupported architecture: $ARCH" msg_error "Unsupported architecture: $ARCH"
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
return 1 return 1
fi ;;
esac
# Get latest version from GitHub
local LATEST_VERSION
LATEST_VERSION=$(curl -fsSL https://api.github.com/repos/astral-sh/uv/releases/latest |
grep '"tag_name":' | cut -d '"' -f4 | sed 's/^v//')
# get current github version
LATEST_VERSION=$(curl -s https://api.github.com/repos/astral-sh/uv/releases/latest | grep '"tag_name":' | cut -d '"' -f4 | sed 's/^v//')
if [[ -z "$LATEST_VERSION" ]]; then if [[ -z "$LATEST_VERSION" ]]; then
msg_error "Could not fetch latest uv version from GitHub." msg_error "Could not fetch latest uv version from GitHub."
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
return 1 return 1
fi fi
# check if uv exists # Check if uv is already up to date
if [[ -x "$UV_BIN" ]]; then if [[ -x "$UV_BIN" ]]; then
local INSTALLED_VERSION
INSTALLED_VERSION=$($UV_BIN -V | awk '{print $2}') INSTALLED_VERSION=$($UV_BIN -V | awk '{print $2}')
if [[ "$INSTALLED_VERSION" == "$LATEST_VERSION" ]]; then if [[ "$INSTALLED_VERSION" == "$LATEST_VERSION" ]]; then
$STD msg_ok "uv is already at the latest version ($INSTALLED_VERSION)" $STD msg_ok "uv is already at the latest version ($INSTALLED_VERSION)"
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
# set path [[ ":$PATH:" != *":/usr/local/bin:"* ]] && export PATH="/usr/local/bin:$PATH"
if [[ ":$PATH:" != *":/usr/local/bin:"* ]]; then
export PATH="/usr/local/bin:$PATH"
fi
return 0 return 0
else else
$STD msg_info "Updating uv from $INSTALLED_VERSION to $LATEST_VERSION" $STD msg_info "Updating uv from $INSTALLED_VERSION to $LATEST_VERSION"
fi fi
else else
$STD msg_info "uv not found. Installing version $LATEST_VERSION" $STD msg_info "Installing uv $LATEST_VERSION"
fi fi
# install or update uv # Download and install manually
curl -fsSL "https://github.com/astral-sh/uv/releases/latest/download/${UV_TAR}" -o "$TMP_DIR/uv.tar.gz" local UV_URL="https://github.com/astral-sh/uv/releases/latest/download/${UV_TAR}"
tar -xzf "$TMP_DIR/uv.tar.gz" -C "$TMP_DIR" if ! curl -fsSL "$UV_URL" -o "$TMP_DIR/uv.tar.gz"; then
install -m 755 "$TMP_DIR"/*/uv "$UV_BIN" msg_error "Failed to download $UV_URL"
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
return 1
fi
# set path if ! tar -xzf "$TMP_DIR/uv.tar.gz" -C "$TMP_DIR"; then
msg_error "Failed to extract uv archive"
rm -rf "$TMP_DIR"
return 1
fi
install -m 755 "$TMP_DIR"/*/uv "$UV_BIN" || {
msg_error "Failed to install uv binary"
rm -rf "$TMP_DIR"
return 1
}
rm -rf "$TMP_DIR"
ensure_usr_local_bin_persist ensure_usr_local_bin_persist
msg_ok "uv installed/updated to $LATEST_VERSION" msg_ok "uv $LATEST_VERSION installed"
# Optional: install specific Python version
if [[ -n "${PYTHON_VERSION:-}" ]]; then
$STD msg_info "Ensuring Python $PYTHON_VERSION is available via uv..."
local VERSION_MATCH
VERSION_MATCH=$(uv python list --only-downloads |
grep -E "^cpython-${PYTHON_VERSION//./\\.}\.[0-9]+-linux" |
cut -d'-' -f2 | sort -V | tail -n1)
if [[ -z "$VERSION_MATCH" ]]; then
msg_error "No matching Python $PYTHON_VERSION.x version found via uv"
return 1
fi
if uv python list | grep -q "cpython-${VERSION_MATCH}-linux.*uv/python"; then
$STD msg_ok "Python $VERSION_MATCH already installed via uv"
else
if ! $STD uv python install "$VERSION_MATCH"; then
msg_error "Failed to install Python $VERSION_MATCH via uv"
return 1
fi
msg_ok "Installed Python $VERSION_MATCH via uv"
fi
fi
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------