From 8a9b8eaff53febcc22c786fd8ca8eb3d5feffbd5 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:48:41 +0200 Subject: [PATCH] add test --- misc/build.func | 1 + misc/github.func | 82 +++++++++++++++++++++++++++++++++++++++++++++++ misc/install.func | 82 ----------------------------------------------- 3 files changed, 83 insertions(+), 82 deletions(-) create mode 100644 misc/github.func diff --git a/misc/build.func b/misc/build.func index 5a70a74..c884f0a 100644 --- a/misc/build.func +++ b/misc/build.func @@ -15,6 +15,7 @@ variables() { } source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/api.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/github.func) # This function sets various color variables using ANSI escape codes for formatting text in the terminal. color() { diff --git a/misc/github.func b/misc/github.func new file mode 100644 index 0000000..6c8d7b9 --- /dev/null +++ b/misc/github.func @@ -0,0 +1,82 @@ +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +get_gh_release() { + set -Eeuo pipefail + trap 'echo -e "\n❌ [get_gh_release] Error on line $LINENO: $BASH_COMMAND"' ERR + + local repo="$1" + local app="${repo##*/}" + local api_url="https://api.github.com/repos/$repo/releases/latest" + local header=() + local attempt=0 + local max_attempts=3 + local api_response tag + + [[ -n "${GITHUB_TOKEN:-}" ]] && header=(-H "Authorization: token $GITHUB_TOKEN") + + until [[ $attempt -ge $max_attempts ]]; do + ((attempt++)) + msg_info "[$attempt/$max_attempts] Fetching GitHub release for $repo" + + if ! api_response=$(curl -fsSL "${header[@]}" "$api_url"); then + msg_warn "Request failed for $repo, retrying..." + sleep 2 + continue + fi + + if echo "$api_response" | grep -q "API rate limit exceeded"; then + msg_error "GitHub API rate limit exceeded." + return 1 + fi + + if echo "$api_response" | jq -e '.message == "Not Found"' &>/dev/null; then + msg_error "Repository not found: $repo" + return 1 + fi + + tag=$(echo "$api_response" | jq -r '.tag_name // .name // empty') + [[ "$tag" =~ ^v[0-9] ]] && tag="${tag:1}" + + if [[ -z "$tag" ]]; then + msg_error "Empty tag received, retrying..." + sleep 2 + continue + fi + + msg_ok "Found release: $tag for $repo" + + local version_file="/opt/${app}_version.txt" + [[ ! -f "$version_file" ]] && echo "$tag" >"$version_file" + + echo "$tag" + return 0 + done + + msg_error "Failed to fetch release for $repo after $max_attempts attempts." + return 1 +} + +fetch_and_extract_gh_release() { + set -Eeuo pipefail + trap 'echo -e "\n❌ [fetch_and_extract_gh_release] Error on line $LINENO: $BASH_COMMAND"' ERR + + local repo="$1" + local tag="$2" + local app="${repo##*/}" + + local temp_file + temp_file=$(mktemp) + local tarball_url="https://github.com/$repo/archive/refs/tags/v$tag.tar.gz" + + msg_info "Downloading tarball for $app..." + if ! curl -fsSL "$tarball_url" -o "$temp_file"; then + msg_error "Failed to download tarball: $tarball_url" + return 1 + fi + + mkdir -p "/opt/$app" + tar -xzf "$temp_file" -C /opt + mv "/opt/${app}-${tag}"/* "/opt/$app/" 2>/dev/null || msg_warn "Could not move extracted files." + rm -rf "/opt/${app}-${tag}" + + msg_ok "Extracted $app to /opt/$app" +} diff --git a/misc/install.func b/misc/install.func index 01b1522..2a730fb 100644 --- a/misc/install.func +++ b/misc/install.func @@ -220,88 +220,6 @@ EOF msg_ok "Core dependencies installed" } -get_gh_release() { - set -Eeuo pipefail - trap 'echo -e "\n❌ [get_gh_release] Error on line $LINENO: $BASH_COMMAND"' ERR - - local repo="$1" - local app="${repo##*/}" - local api_url="https://api.github.com/repos/$repo/releases/latest" - local header=() - local attempt=0 - local max_attempts=3 - local api_response tag - - [[ -n "${GITHUB_TOKEN:-}" ]] && header=(-H "Authorization: token $GITHUB_TOKEN") - - until [[ $attempt -ge $max_attempts ]]; do - ((attempt++)) - msg_info "[$attempt/$max_attempts] Fetching GitHub release for $repo" - - if ! api_response=$(curl -fsSL "${header[@]}" "$api_url"); then - msg_warn "Request failed for $repo, retrying..." - sleep 2 - continue - fi - - if echo "$api_response" | grep -q "API rate limit exceeded"; then - msg_error "GitHub API rate limit exceeded." - return 1 - fi - - if echo "$api_response" | jq -e '.message == "Not Found"' &>/dev/null; then - msg_error "Repository not found: $repo" - return 1 - fi - - tag=$(echo "$api_response" | jq -r '.tag_name // .name // empty') - [[ "$tag" =~ ^v[0-9] ]] && tag="${tag:1}" - - if [[ -z "$tag" ]]; then - msg_warn "Empty tag received, retrying..." - sleep 2 - continue - fi - - msg_ok "Found release: $tag for $repo" - - local version_file="/opt/${app}_version.txt" - [[ ! -f "$version_file" ]] && echo "$tag" >"$version_file" - - echo "$tag" - return 0 - done - - msg_error "Failed to fetch release for $repo after $max_attempts attempts." - return 1 -} - -fetch_and_extract_gh_release() { - set -Eeuo pipefail - trap 'echo -e "\n❌ [fetch_and_extract_gh_release] Error on line $LINENO: $BASH_COMMAND"' ERR - - local repo="$1" - local tag="$2" - local app="${repo##*/}" - - local temp_file - temp_file=$(mktemp) - local tarball_url="https://github.com/$repo/archive/refs/tags/v$tag.tar.gz" - - msg_info "Downloading tarball for $app..." - if ! curl -fsSL "$tarball_url" -o "$temp_file"; then - msg_error "Failed to download tarball: $tarball_url" - return 1 - fi - - mkdir -p "/opt/$app" - tar -xzf "$temp_file" -C /opt - mv "/opt/${app}-${tag}"/* "/opt/$app/" 2>/dev/null || msg_warn "Could not move extracted files." - rm -rf "/opt/${app}-${tag}" - - msg_ok "Extracted $app to /opt/$app" -} - # This function modifies the message of the day (motd) and SSH settings motd_ssh() { grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >>/root/.bashrc