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:
58
README.md
58
README.md
@@ -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
|
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:
|
Then open the interactive menu:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -568,12 +570,12 @@ macOS requires manual setup since there's no automated script yet.
|
|||||||
mkdir -p ~/paqet && cd ~/paqet
|
mkdir -p ~/paqet && cd ~/paqet
|
||||||
|
|
||||||
# Download latest release (Intel Mac)
|
# 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
|
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.16.tar.gz
|
tar -xzf paqet-darwin-amd64-v1.0.0-alpha.17.tar.gz
|
||||||
|
|
||||||
# For Apple Silicon (M1/M2/M3):
|
# 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
|
# 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.16.tar.gz
|
# tar -xzf paqet-darwin-arm64-v1.0.0-alpha.17.tar.gz
|
||||||
|
|
||||||
# Make executable
|
# Make executable
|
||||||
chmod +x paqet_darwin_amd64
|
chmod +x paqet_darwin_amd64
|
||||||
@@ -766,8 +768,8 @@ Then run GFK from within the venv.
|
|||||||
```bash
|
```bash
|
||||||
# Download paqet
|
# Download paqet
|
||||||
mkdir -p ~/paqet && cd ~/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
|
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.16.tar.gz
|
tar -xzf paqet-linux-amd64-v1.0.0-alpha.17.tar.gz
|
||||||
chmod +x paqet_linux_amd64
|
chmod +x paqet_linux_amd64
|
||||||
|
|
||||||
# Create config
|
# 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
|
**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:**
|
**Click to download the right file for your CLIENT machine:**
|
||||||
|
|
||||||
| Your Client OS | Download this file |
|
| Your Client OS | Download this file |
|
||||||
|----------------|-------------------|
|
|----------------|-------------------|
|
||||||
| Windows | `paqet-windows-amd64-v1.0.0-alpha.16.zip` |
|
| Windows | `paqet-windows-amd64-v1.0.0-alpha.17.zip` |
|
||||||
| Linux (most computers) | `paqet-linux-amd64-v1.0.0-alpha.16.tar.gz` |
|
| 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.16.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.16.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.16.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.16.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:**
|
**On Linux/macOS:**
|
||||||
```bash
|
```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
|
mv paqet_linux_amd64 paqet
|
||||||
chmod +x paqet
|
chmod +x paqet
|
||||||
```
|
```
|
||||||
@@ -1667,12 +1669,12 @@ macOS نیاز به راهاندازی دستی دارد.
|
|||||||
mkdir -p ~/paqet && cd ~/paqet
|
mkdir -p ~/paqet && cd ~/paqet
|
||||||
|
|
||||||
# برای Intel Mac:
|
# برای 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
|
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.16.tar.gz
|
tar -xzf paqet-darwin-amd64-v1.0.0-alpha.17.tar.gz
|
||||||
|
|
||||||
# برای Apple Silicon (M1/M2/M3):
|
# برای 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
|
# 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.16.tar.gz
|
# tar -xzf paqet-darwin-arm64-v1.0.0-alpha.17.tar.gz
|
||||||
|
|
||||||
chmod +x paqet_darwin_amd64
|
chmod +x paqet_darwin_amd64
|
||||||
```
|
```
|
||||||
@@ -1784,8 +1786,8 @@ sudo python3 mainclient.py
|
|||||||
```bash
|
```bash
|
||||||
# دانلود paqet
|
# دانلود paqet
|
||||||
mkdir -p ~/paqet && cd ~/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
|
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.16.tar.gz
|
tar -xzf paqet-linux-amd64-v1.0.0-alpha.17.tar.gz
|
||||||
chmod +x paqet_linux_amd64
|
chmod +x paqet_linux_amd64
|
||||||
|
|
||||||
# ایجاد config
|
# ایجاد config
|
||||||
@@ -1877,18 +1879,18 @@ sudo paqctl info
|
|||||||
|
|
||||||
**بروید به:** https://github.com/hanselime/paqet/releases
|
**بروید به:** 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-windows-amd64-v1.0.0-alpha.17.zip` |
|
||||||
| لینوکس (اکثر کامپیوترها) | `paqet-linux-amd64-v1.0.0-alpha.16.tar.gz` |
|
| لینوکس (اکثر کامپیوترها) | `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.16.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.16.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.16.tar.gz` |
|
| مک (Intel) | `paqet-darwin-amd64-v1.0.0-alpha.17.tar.gz` |
|
||||||
| مک (M1/M2/M3) | `paqet-darwin-arm64-v1.0.0-alpha.16.tar.gz` |
|
| مک (M1/M2/M3) | `paqet-darwin-arm64-v1.0.0-alpha.17.tar.gz` |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -1896,7 +1898,7 @@ sudo paqctl info
|
|||||||
|
|
||||||
**در لینوکس/مک:**
|
**در لینوکس/مک:**
|
||||||
```bash
|
```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
|
mv paqet_linux_amd64 paqet
|
||||||
chmod +x paqet
|
chmod +x paqet
|
||||||
```
|
```
|
||||||
|
|||||||
21
paqctl.sh
21
paqctl.sh
@@ -32,7 +32,7 @@ fi
|
|||||||
VERSION="1.0.0"
|
VERSION="1.0.0"
|
||||||
|
|
||||||
# Pinned versions for stability (update these after testing new releases)
|
# 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"
|
XRAY_VERSION_PINNED="v26.2.4"
|
||||||
GFK_VERSION_PINNED="v1.0.0"
|
GFK_VERSION_PINNED="v1.0.0"
|
||||||
|
|
||||||
@@ -2229,7 +2229,7 @@ create_management_script() {
|
|||||||
VERSION="1.0.0"
|
VERSION="1.0.0"
|
||||||
|
|
||||||
# Pinned versions for stability (update these after testing new releases)
|
# 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"
|
XRAY_VERSION_PINNED="v26.2.4"
|
||||||
GFK_VERSION_PINNED="v1.0.0"
|
GFK_VERSION_PINNED="v1.0.0"
|
||||||
|
|
||||||
@@ -5905,7 +5905,13 @@ install_additional_backend() {
|
|||||||
|
|
||||||
_install_paqet_components() {
|
_install_paqet_components() {
|
||||||
log_info "Downloading paqet binary..."
|
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"
|
log_error "Failed to download paqet"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@@ -7362,9 +7368,12 @@ main() {
|
|||||||
PAQET_VERSION="$GFK_VERSION_PINNED"
|
PAQET_VERSION="$GFK_VERSION_PINNED"
|
||||||
log_info "Using GFK ${PAQET_VERSION} (pinned for stability)"
|
log_info "Using GFK ${PAQET_VERSION} (pinned for stability)"
|
||||||
else
|
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="$PAQET_VERSION_PINNED"
|
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 '"')
|
||||||
log_info "Installing paqet ${PAQET_VERSION} (pinned for stability)"
|
if [ -z "$PAQET_VERSION" ] || ! _validate_version_tag "$PAQET_VERSION"; then
|
||||||
|
PAQET_VERSION="$PAQET_VERSION_PINNED"
|
||||||
|
fi
|
||||||
|
log_info "Installing paqet ${PAQET_VERSION}"
|
||||||
download_paqet "$PAQET_VERSION"
|
download_paqet "$PAQET_VERSION"
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ $ErrorActionPreference = "Stop"
|
|||||||
# Directories and pinned versions (for stability - update after testing new releases)
|
# Directories and pinned versions (for stability - update after testing new releases)
|
||||||
$InstallDir = "C:\paqet"
|
$InstallDir = "C:\paqet"
|
||||||
$PaqetExe = "$InstallDir\paqet_windows_amd64.exe"
|
$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"
|
$GfkDir = "$InstallDir\gfk"
|
||||||
$ConfigFile = "$InstallDir\config.yaml"
|
$ConfigFile = "$InstallDir\config.yaml"
|
||||||
$SettingsFile = "$InstallDir\settings.conf"
|
$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-Warn { Write-Host "[WARN] $args" -ForegroundColor Yellow }
|
||||||
function Write-Err { Write-Host "[ERROR] $args" -ForegroundColor Red }
|
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)
|
# Input validation (security: prevent config injection)
|
||||||
function Test-ValidIP {
|
function Test-ValidIP {
|
||||||
param([string]$IP)
|
param([string]$IP)
|
||||||
|
|||||||
Reference in New Issue
Block a user