upgrade/install: 버전 같아도 캐시 우회로 항상 최신 bin 강제 갱신(no-cache+캐시버스터, hash -r). v0.3.1

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-27 17:59:24 +09:00
parent a577c6f45b
commit 949e7527cd
2 changed files with 17 additions and 6 deletions

View File

@ -18,7 +18,7 @@ set -euo pipefail
REPO="${YAKCLOUD_STARTER_REPO:-https://gitea.yakenator.io/yakenator/yakcloud-starter}" REPO="${YAKCLOUD_STARTER_REPO:-https://gitea.yakenator.io/yakenator/yakcloud-starter}"
BRANCH="${YAKCLOUD_STARTER_BRANCH:-main}" BRANCH="${YAKCLOUD_STARTER_BRANCH:-main}"
VERSION="0.3.0" VERSION="0.3.1"
die() { echo "✗ $*" >&2; exit 1; } die() { echo "✗ $*" >&2; exit 1; }
info() { echo "▸ $*"; } info() { echo "▸ $*"; }
@ -89,16 +89,24 @@ cmd_project_check() {
python3 scripts/yakcloud_deploy.py yakcloud.yaml --dry-run python3 scripts/yakcloud_deploy.py yakcloud.yaml --dry-run
} }
# 전역 CLI 자기 갱신(설치된 yakcloud 를 최신 bin 으로 덮어씀). # 전역 CLI 자기 갱신 — 버전이 같아도 항상 최신 파일을 강제로 다시 받아 덮어쓴다(캐시 우회).
cmd_upgrade() { cmd_upgrade() {
local self; self="$(command -v yakcloud 2>/dev/null || true)"; [ -n "$self" ] || self="$0" local self; self="$(command -v yakcloud 2>/dev/null || true)"; [ -n "$self" ] || self="$0"
info "yakcloud CLI 업그레이드… ($self)" # 심볼릭 링크면 실체 파일을 갱신.
if [ -L "$self" ]; then self="$(readlink -f "$self" 2>/dev/null || readlink "$self" 2>/dev/null || echo "$self")"; fi
local before; before="$("$self" version 2>/dev/null || echo '?')"
info "yakcloud CLI 강제 갱신… ($self, 현재 $before)"
local tmp; tmp="$(mktemp)" local tmp; tmp="$(mktemp)"
curl -fsSL "$REPO/raw/branch/$BRANCH/bin/yakcloud" -o "$tmp" || { rm -f "$tmp"; die "다운로드 실패"; } # 캐시 우회: no-cache 헤더 + 캐시버스터 쿼리. Gitea/프록시가 raw 를 캐시해도 항상 최신 획득.
local bust; bust="$(date +%s 2>/dev/null || echo 0)"
curl -fsSL -H 'Cache-Control: no-cache' -H 'Pragma: no-cache' \
"$REPO/raw/branch/$BRANCH/bin/yakcloud?nocache=$bust" -o "$tmp" \
|| { rm -f "$tmp"; die "다운로드 실패"; }
head -1 "$tmp" | grep -q 'bash' || { rm -f "$tmp"; die "받은 파일이 올바르지 않습니다"; } head -1 "$tmp" | grep -q 'bash' || { rm -f "$tmp"; die "받은 파일이 올바르지 않습니다"; }
chmod +x "$tmp" chmod +x "$tmp"
mv "$tmp" "$self" 2>/dev/null || { rm -f "$tmp"; die "설치 실패(권한) — 'DEST=<dir> 재설치' 또는 sudo"; } mv "$tmp" "$self" 2>/dev/null || { rm -f "$tmp"; die "설치 실패(권한) — 'DEST=<dir> 재설치' 또는 sudo"; }
echo "✓ 업그레이드 완료: $("$self" version 2>/dev/null || echo yakcloud)" hash -r 2>/dev/null || true # 셸 명령 해시 캐시 초기화(새 바이너리 즉시 반영)
echo "✓ 업그레이드 완료: $before → $("$self" version 2>/dev/null || echo yakcloud)"
} }
# 기존 프로젝트의 플러밍(엔진·CI·스킬)만 최신화. 앱/매니페스트/Dockerfile 등 사용자 파일은 보존. # 기존 프로젝트의 플러밍(엔진·CI·스킬)만 최신화. 앱/매니페스트/Dockerfile 등 사용자 파일은 보존.

View File

@ -8,7 +8,10 @@ BRANCH="${YAKCLOUD_STARTER_BRANCH:-main}"
DEST="${DEST:-$HOME/.local/bin}" DEST="${DEST:-$HOME/.local/bin}"
mkdir -p "$DEST" mkdir -p "$DEST"
echo "▸ yakcloud CLI 설치 → $DEST/yakcloud" echo "▸ yakcloud CLI 설치 → $DEST/yakcloud"
curl -fsSL "$REPO/raw/branch/$BRANCH/bin/yakcloud" -o "$DEST/yakcloud" # 캐시 우회(no-cache + 캐시버스터) — 항상 최신 bin 획득.
BUST="$(date +%s 2>/dev/null || echo 0)"
curl -fsSL -H 'Cache-Control: no-cache' -H 'Pragma: no-cache' \
"$REPO/raw/branch/$BRANCH/bin/yakcloud?nocache=$BUST" -o "$DEST/yakcloud"
chmod +x "$DEST/yakcloud" chmod +x "$DEST/yakcloud"
echo "✓ 완료. PATH 에 $DEST 가 있는지 확인하세요:" echo "✓ 완료. PATH 에 $DEST 가 있는지 확인하세요:"
echo ' export PATH="$HOME/.local/bin:$PATH"' echo ' export PATH="$HOME/.local/bin:$PATH"'