전체 설치 스크립트 GitHub 릴리스 에셋 검증 및 폴백 다운로드 방어 로직 적용
This commit is contained in:
1 parent
5a67e7bbcf
commit
b41d2f68f3
21 files changed
+541
-190
No files matched your search
+35
-12
@@ -14,7 +14,8 @@ set -euo pipefail
|
||||
# 상수 정의
|
||||
# ────────────────────────────────────────────
|
||||
REPO="helix-editor/helix"
|
||||
API_URL="https://api.github.com/repos/${REPO}/releases/latest"
|
||||
API_URL="https://api.github.com/repos/${REPO}/releases"
|
||||
FALLBACK_TAG="25.07.1"
|
||||
INSTALL_DIR="${HOME}/.local/bin"
|
||||
HELIX_CONFIG_DIR="${HOME}/.config/helix"
|
||||
|
||||
@@ -33,20 +34,26 @@ for cmd in curl tar xz uname; do
|
||||
command -v "$cmd" &>/dev/null || error "'$cmd' 명령어가 필요합니다. 먼저 설치해 주세요."
|
||||
done
|
||||
|
||||
# Fallback: jq가 없을 경우 python3를 사용해 JSON 분석
|
||||
# Fallback: jq가 없을 경우 python3 또는 grep을 사용해 JSON 분석
|
||||
if command -v jq &>/dev/null; then
|
||||
_json_latest_tag() {
|
||||
jq -r '.tag_name'
|
||||
jq -r '[.[] | select(.prerelease==false and ((.assets | length) > 0))] | .[0].tag_name'
|
||||
}
|
||||
else
|
||||
command -v python3 &>/dev/null || error "'jq' 또는 'python3' 명령어가 설치되어 있어야 합니다."
|
||||
elif command -v python3 &>/dev/null; then
|
||||
_json_latest_tag() {
|
||||
python3 -c "
|
||||
import sys, json
|
||||
data = json.load(sys.stdin)
|
||||
print(data.get('tag_name', ''))
|
||||
for r in data:
|
||||
if not r.get('prerelease') and r.get('assets'):
|
||||
print(r.get('tag_name', ''))
|
||||
break
|
||||
"
|
||||
}
|
||||
else
|
||||
_json_latest_tag() {
|
||||
grep -oE '"tag_name":[[:space:]]*"[^"]+"' | head -1 | sed -E 's/.*"([^"]+)"$/\1/'
|
||||
}
|
||||
fi
|
||||
|
||||
# ────────────────────────────────────────────
|
||||
@@ -93,12 +100,15 @@ detect_platform() {
|
||||
get_latest_release_tag() {
|
||||
info "GitHub API를 통해 Helix 최신 릴리스 버전을 조회하는 중..."
|
||||
|
||||
local release_json tag
|
||||
release_json="$(curl -fsSL "${API_URL}")" || error "GitHub API 호출에 실패했습니다."
|
||||
local release_json="" tag=""
|
||||
release_json="$(curl -fsSL -H "User-Agent: install-helix-sh" --connect-timeout 10 "${API_URL}" 2>/dev/null)" || true
|
||||
|
||||
tag="$(echo "$release_json" | _json_latest_tag)"
|
||||
if [[ -n "$release_json" ]]; then
|
||||
tag="$(echo "$release_json" | _json_latest_tag 2>/dev/null || true)"
|
||||
fi
|
||||
if [[ -z "$tag" || "$tag" == "null" ]]; then
|
||||
error "최신 릴리스 태그를 확인하는 데 실패했습니다."
|
||||
warn "최신 릴리스 태그 조회 실패. 검증된 폴백 버전(${FALLBACK_TAG})을 사용합니다."
|
||||
tag="${FALLBACK_TAG}"
|
||||
fi
|
||||
echo "$tag"
|
||||
}
|
||||
@@ -127,8 +137,21 @@ main() {
|
||||
|
||||
info "아카이브 다운로드 중: $download_url"
|
||||
if ! curl -fsSL "$download_url" -o "$tmp_archive"; then
|
||||
rm -rf "$tmp_dir"
|
||||
error "바이너리 다운로드에 실패했습니다. URL: $download_url"
|
||||
if [[ "$tag" != "$FALLBACK_TAG" ]]; then
|
||||
tag="${FALLBACK_TAG}"
|
||||
version="${tag#v}"
|
||||
asset_name="helix-${version}-${platform_arch}"
|
||||
archive_name="${asset_name}.tar.xz"
|
||||
download_url="https://github.com/helix-editor/helix/releases/download/${tag}/${archive_name}"
|
||||
warn "다운로드 실패. 폴백 버전(${FALLBACK_TAG})으로 재시도합니다: $download_url"
|
||||
if ! curl -fsSL "$download_url" -o "$tmp_archive"; then
|
||||
rm -rf "$tmp_dir"
|
||||
error "바이너리 다운로드에 실패했습니다. URL: $download_url"
|
||||
fi
|
||||
else
|
||||
rm -rf "$tmp_dir"
|
||||
error "바이너리 다운로드에 실패했습니다. URL: $download_url"
|
||||
fi
|
||||
fi
|
||||
|
||||
info "압축 해제 중..."
|
||||
|
||||
Reference in new issue
Block a user