From 949e7527cd1325b1b60f23262986ae99ccdb0752 Mon Sep 17 00:00:00 2001 From: jungwoo choi Date: Thu, 27 Aug 2026 17:59:24 +0900 Subject: [PATCH] =?UTF-8?q?upgrade/install:=20=EB=B2=84=EC=A0=84=20?= =?UTF-8?q?=EA=B0=99=EC=95=84=EB=8F=84=20=EC=BA=90=EC=8B=9C=20=EC=9A=B0?= =?UTF-8?q?=ED=9A=8C=EB=A1=9C=20=ED=95=AD=EC=83=81=20=EC=B5=9C=EC=8B=A0=20?= =?UTF-8?q?bin=20=EA=B0=95=EC=A0=9C=20=EA=B0=B1=EC=8B=A0(no-cache+?= =?UTF-8?q?=EC=BA=90=EC=8B=9C=EB=B2=84=EC=8A=A4=ED=84=B0,=20hash=20-r).=20?= =?UTF-8?q?v0.3.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- bin/yakcloud | 18 +++++++++++++----- install.sh | 5 ++++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/bin/yakcloud b/bin/yakcloud index 8abdfce..1bc3882 100755 --- a/bin/yakcloud +++ b/bin/yakcloud @@ -18,7 +18,7 @@ set -euo pipefail REPO="${YAKCLOUD_STARTER_REPO:-https://gitea.yakenator.io/yakenator/yakcloud-starter}" BRANCH="${YAKCLOUD_STARTER_BRANCH:-main}" -VERSION="0.3.0" +VERSION="0.3.1" die() { echo "✗ $*" >&2; exit 1; } info() { echo "▸ $*"; } @@ -89,16 +89,24 @@ cmd_project_check() { python3 scripts/yakcloud_deploy.py yakcloud.yaml --dry-run } -# 전역 CLI 자기 갱신(설치된 yakcloud 를 최신 bin 으로 덮어씀). +# 전역 CLI 자기 갱신 — 버전이 같아도 항상 최신 파일을 강제로 다시 받아 덮어쓴다(캐시 우회). cmd_upgrade() { 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)" - 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 "받은 파일이 올바르지 않습니다"; } chmod +x "$tmp" mv "$tmp" "$self" 2>/dev/null || { rm -f "$tmp"; die "설치 실패(권한) — 'DEST= 재설치' 또는 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 등 사용자 파일은 보존. diff --git a/install.sh b/install.sh index f84cb3f..ebcfc1e 100755 --- a/install.sh +++ b/install.sh @@ -8,7 +8,10 @@ BRANCH="${YAKCLOUD_STARTER_BRANCH:-main}" DEST="${DEST:-$HOME/.local/bin}" mkdir -p "$DEST" 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" echo "✓ 완료. PATH 에 $DEST 가 있는지 확인하세요:" echo ' export PATH="$HOME/.local/bin:$PATH"'