Update setup_uv
This commit is contained in:
parent
db6afe10d0
commit
4c8f267e59
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user