feat: auto-detect latest paqet version from GitHub on install

Fresh installs now fetch the latest paqet release from GitHub API.
Falls back to pinned v1.0.0-alpha.17 if the API is unreachable.
This commit is contained in:
SamNet-dev
2026-02-19 02:58:47 -06:00
parent 8dbcbee91b
commit a9c9fa3cb8
3 changed files with 58 additions and 35 deletions

View File

@@ -238,6 +238,8 @@ Run this on your VPS (requires root):
curl -fsSL https://raw.githubusercontent.com/SamNet-dev/paqctl/main/paqctl.sh | sudo bash
```
> The installer automatically downloads the latest paqet release from GitHub.
Then open the interactive menu:
```bash
@@ -568,12 +570,12 @@ macOS requires manual setup since there's no automated script yet.
mkdir -p ~/paqet && cd ~/paqet
# Download latest release (Intel Mac)
curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.16/paqet-darwin-amd64-v1.0.0-alpha.16.tar.gz
tar -xzf paqet-darwin-amd64-v1.0.0-alpha.16.tar.gz
curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.17/paqet-darwin-amd64-v1.0.0-alpha.17.tar.gz
tar -xzf paqet-darwin-amd64-v1.0.0-alpha.17.tar.gz
# For Apple Silicon (M1/M2/M3):
# curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.16/paqet-darwin-arm64-v1.0.0-alpha.16.tar.gz
# tar -xzf paqet-darwin-arm64-v1.0.0-alpha.16.tar.gz
# curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.17/paqet-darwin-arm64-v1.0.0-alpha.17.tar.gz
# tar -xzf paqet-darwin-arm64-v1.0.0-alpha.17.tar.gz
# Make executable
chmod +x paqet_darwin_amd64
@@ -766,8 +768,8 @@ Then run GFK from within the venv.
```bash
# Download paqet
mkdir -p ~/paqet && cd ~/paqet
curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.16/paqet-linux-amd64-v1.0.0-alpha.16.tar.gz
tar -xzf paqet-linux-amd64-v1.0.0-alpha.16.tar.gz
curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.17/paqet-linux-amd64-v1.0.0-alpha.17.tar.gz
tar -xzf paqet-linux-amd64-v1.0.0-alpha.17.tar.gz
chmod +x paqet_linux_amd64
# Create config
@@ -867,18 +869,18 @@ Do this on a machine that CAN access GitHub (your VPS, a friend's computer, VPN,
**Go to:** https://github.com/hanselime/paqet/releases
> **Note:** Check for the latest version. Examples below use v1.0.0-alpha.16 - use newer if available.
> **Note:** Check for the latest version. Examples below use v1.0.0-alpha.17 - use newer if available.
**Click to download the right file for your CLIENT machine:**
| Your Client OS | Download this file |
|----------------|-------------------|
| Windows | `paqet-windows-amd64-v1.0.0-alpha.16.zip` |
| Linux (most computers) | `paqet-linux-amd64-v1.0.0-alpha.16.tar.gz` |
| Linux (Raspberry Pi 3/4/5, ARM 64-bit) | `paqet-linux-arm64-v1.0.0-alpha.16.tar.gz` |
| Linux (Raspberry Pi 2, ARM 32-bit) | `paqet-linux-arm32-v1.0.0-alpha.16.tar.gz` |
| macOS (Intel) | `paqet-darwin-amd64-v1.0.0-alpha.16.tar.gz` |
| macOS (M1/M2/M3) | `paqet-darwin-arm64-v1.0.0-alpha.16.tar.gz` |
| Windows | `paqet-windows-amd64-v1.0.0-alpha.17.zip` |
| Linux (most computers) | `paqet-linux-amd64-v1.0.0-alpha.17.tar.gz` |
| Linux (Raspberry Pi 3/4/5, ARM 64-bit) | `paqet-linux-arm64-v1.0.0-alpha.17.tar.gz` |
| Linux (Raspberry Pi 2, ARM 32-bit) | `paqet-linux-arm32-v1.0.0-alpha.17.tar.gz` |
| macOS (Intel) | `paqet-darwin-amd64-v1.0.0-alpha.17.tar.gz` |
| macOS (M1/M2/M3) | `paqet-darwin-arm64-v1.0.0-alpha.17.tar.gz` |
---
@@ -886,7 +888,7 @@ Do this on a machine that CAN access GitHub (your VPS, a friend's computer, VPN,
**On Linux/macOS:**
```bash
tar -xzf paqet-linux-amd64-v1.0.0-alpha.16.tar.gz
tar -xzf paqet-linux-amd64-v1.0.0-alpha.17.tar.gz
mv paqet_linux_amd64 paqet
chmod +x paqet
```
@@ -1667,12 +1669,12 @@ macOS نیاز به راه‌اندازی دستی دارد.
mkdir -p ~/paqet && cd ~/paqet
# برای Intel Mac:
curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.16/paqet-darwin-amd64-v1.0.0-alpha.16.tar.gz
tar -xzf paqet-darwin-amd64-v1.0.0-alpha.16.tar.gz
curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.17/paqet-darwin-amd64-v1.0.0-alpha.17.tar.gz
tar -xzf paqet-darwin-amd64-v1.0.0-alpha.17.tar.gz
# برای Apple Silicon (M1/M2/M3):
# curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.16/paqet-darwin-arm64-v1.0.0-alpha.16.tar.gz
# tar -xzf paqet-darwin-arm64-v1.0.0-alpha.16.tar.gz
# curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.17/paqet-darwin-arm64-v1.0.0-alpha.17.tar.gz
# tar -xzf paqet-darwin-arm64-v1.0.0-alpha.17.tar.gz
chmod +x paqet_darwin_amd64
```
@@ -1784,8 +1786,8 @@ sudo python3 mainclient.py
```bash
# دانلود paqet
mkdir -p ~/paqet && cd ~/paqet
curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.16/paqet-linux-amd64-v1.0.0-alpha.16.tar.gz
tar -xzf paqet-linux-amd64-v1.0.0-alpha.16.tar.gz
curl -LO https://github.com/hanselime/paqet/releases/download/v1.0.0-alpha.17/paqet-linux-amd64-v1.0.0-alpha.17.tar.gz
tar -xzf paqet-linux-amd64-v1.0.0-alpha.17.tar.gz
chmod +x paqet_linux_amd64
# ایجاد config
@@ -1877,18 +1879,18 @@ sudo paqctl info
**بروید به:** https://github.com/hanselime/paqet/releases
> **نکته:** آخرین نسخه را چک کنید. مثال‌های زیر از v1.0.0-alpha.16 استفاده می‌کنند - اگر جدیدتر موجود است آن را بگیرید.
> **نکته:** آخرین نسخه را چک کنید. مثال‌های زیر از v1.0.0-alpha.17 استفاده می‌کنند - اگر جدیدتر موجود است آن را بگیرید.
**فایل مناسب سیستم کلاینت خود را دانلود کنید:**
| سیستم کلاینت شما | این فایل را دانلود کنید |
|-----------------|----------------------|
| ویندوز | `paqet-windows-amd64-v1.0.0-alpha.16.zip` |
| لینوکس (اکثر کامپیوترها) | `paqet-linux-amd64-v1.0.0-alpha.16.tar.gz` |
| لینوکس (Raspberry Pi 3/4/5, ARM 64-bit) | `paqet-linux-arm64-v1.0.0-alpha.16.tar.gz` |
| لینوکس (Raspberry Pi 2, ARM 32-bit) | `paqet-linux-arm32-v1.0.0-alpha.16.tar.gz` |
| مک (Intel) | `paqet-darwin-amd64-v1.0.0-alpha.16.tar.gz` |
| مک (M1/M2/M3) | `paqet-darwin-arm64-v1.0.0-alpha.16.tar.gz` |
| ویندوز | `paqet-windows-amd64-v1.0.0-alpha.17.zip` |
| لینوکس (اکثر کامپیوترها) | `paqet-linux-amd64-v1.0.0-alpha.17.tar.gz` |
| لینوکس (Raspberry Pi 3/4/5, ARM 64-bit) | `paqet-linux-arm64-v1.0.0-alpha.17.tar.gz` |
| لینوکس (Raspberry Pi 2, ARM 32-bit) | `paqet-linux-arm32-v1.0.0-alpha.17.tar.gz` |
| مک (Intel) | `paqet-darwin-amd64-v1.0.0-alpha.17.tar.gz` |
| مک (M1/M2/M3) | `paqet-darwin-arm64-v1.0.0-alpha.17.tar.gz` |
---
@@ -1896,7 +1898,7 @@ sudo paqctl info
**در لینوکس/مک:**
```bash
tar -xzf paqet-linux-amd64-v1.0.0-alpha.16.tar.gz
tar -xzf paqet-linux-amd64-v1.0.0-alpha.17.tar.gz
mv paqet_linux_amd64 paqet
chmod +x paqet
```

View File

@@ -32,7 +32,7 @@ fi
VERSION="1.0.0"
# Pinned versions for stability (update these after testing new releases)
PAQET_VERSION_PINNED="v1.0.0-alpha.16"
PAQET_VERSION_PINNED="v1.0.0-alpha.17"
XRAY_VERSION_PINNED="v26.2.4"
GFK_VERSION_PINNED="v1.0.0"
@@ -2229,7 +2229,7 @@ create_management_script() {
VERSION="1.0.0"
# Pinned versions for stability (update these after testing new releases)
PAQET_VERSION_PINNED="v1.0.0-alpha.16"
PAQET_VERSION_PINNED="v1.0.0-alpha.17"
XRAY_VERSION_PINNED="v26.2.4"
GFK_VERSION_PINNED="v1.0.0"
@@ -5905,7 +5905,13 @@ install_additional_backend() {
_install_paqet_components() {
log_info "Downloading paqet binary..."
if ! download_paqet "$PAQET_VERSION_PINNED"; then
local _paqet_ver
_paqet_ver=$(curl -s --max-time 10 "$PAQET_API_URL" 2>/dev/null | grep -o '"tag_name"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | grep -o '"[^"]*"$' | tr -d '"')
if [ -z "$_paqet_ver" ] || ! _validate_version_tag "$_paqet_ver"; then
_paqet_ver="$PAQET_VERSION_PINNED"
fi
log_info "Using paqet ${_paqet_ver}"
if ! download_paqet "$_paqet_ver"; then
log_error "Failed to download paqet"
return 1
fi
@@ -7362,9 +7368,12 @@ main() {
PAQET_VERSION="$GFK_VERSION_PINNED"
log_info "Using GFK ${PAQET_VERSION} (pinned for stability)"
else
# Use pinned version for stability (update command can get latest)
# Fetch latest version from GitHub, fall back to pinned if API unreachable
PAQET_VERSION=$(curl -s --max-time 10 "$PAQET_API_URL" 2>/dev/null | grep -o '"tag_name"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | grep -o '"[^"]*"$' | tr -d '"')
if [ -z "$PAQET_VERSION" ] || ! _validate_version_tag "$PAQET_VERSION"; then
PAQET_VERSION="$PAQET_VERSION_PINNED"
log_info "Installing paqet ${PAQET_VERSION} (pinned for stability)"
fi
log_info "Installing paqet ${PAQET_VERSION}"
download_paqet "$PAQET_VERSION"
fi
echo ""

View File

@@ -49,7 +49,7 @@ $ErrorActionPreference = "Stop"
# Directories and pinned versions (for stability - update after testing new releases)
$InstallDir = "C:\paqet"
$PaqetExe = "$InstallDir\paqet_windows_amd64.exe"
$PaqetVersion = "v1.0.0-alpha.16" # Pinned paqet version
$PaqetVersionPinned = "v1.0.0-alpha.17" # Fallback if GitHub API unreachable
$GfkDir = "$InstallDir\gfk"
$ConfigFile = "$InstallDir\config.yaml"
$SettingsFile = "$InstallDir\settings.conf"
@@ -71,6 +71,18 @@ function Write-Success { Write-Host "[OK] $args" -ForegroundColor Green }
function Write-Warn { Write-Host "[WARN] $args" -ForegroundColor Yellow }
function Write-Err { Write-Host "[ERROR] $args" -ForegroundColor Red }
# Fetch latest paqet version from GitHub, fall back to pinned
function Get-LatestPaqetVersion {
try {
$response = Invoke-RestMethod -Uri "https://api.github.com/repos/hanselime/paqet/releases/latest" -TimeoutSec 10
if ($response.tag_name -match '^v?\d+\.\d+\.\d+') {
return $response.tag_name
}
} catch {}
return $PaqetVersionPinned
}
$PaqetVersion = Get-LatestPaqetVersion
# Input validation (security: prevent config injection)
function Test-ValidIP {
param([string]$IP)