dua 설치 스크립트 최신 릴리스 태그 필터링 오류 수정

This commit is contained in:
mcchae committed 2026-10-31 04:28:07 +09:00
1 parent 8f2177b3b5
commit 5a67e7bbcf
4 files changed
+351 -194

No files matched your search

@@ -0,0 +1,38 @@
# dua 설치 스크립트 오류 수정 계획 (FIX-DUA-INSTALL-IMP-PLAN)
## 1. 원인 분석
`Byron/dua-cli` GitHub 저장소는 워크스페이스 내 라이브러리 크레이트(`dua-core-v5.0.1`, `dua-core-v5.0.0` 등)의 릴리스도 함께 발행합니다.
기존 `install-dua.sh`는 단순히 `prerelease == false`인 첫 번째 릴리스 태그를 가져오도록 작성되어 있어, 바이너리 에셋이 전혀 없는 `dua-core-v5.0.1` 태그를 선택하고 `dua-dua-core-v5.0.1-x86_64-unknown-linux-musl.tar.gz`와 같은 존재하지 않는 다운로드 URL을 요청하여 404 에러로 실패하였습니다.
또한 Windows용 `install-dua.ps1`은 `winget`에만 의존하고 있어, GitHub Releases에서 직접 최신 `v*` 바이너리를 다운로드하거나 폴백으로 설치하는 기능이 부족했습니다.
```mermaid
flowchart TD
Start([설치 시작]) --> API[GitHub Releases API 조회]
API --> Filter{태그가 'v*' 로 시작하고<br/>assets가 존재하는가?}
Filter -- No (예: dua-core-v*) --> Skip[무시하고 다음 릴리스 검사]
Skip --> Filter
Filter -- Yes (예: v2.46.0) --> Download[아키텍처별 에셋 다운로드<br/>dua-vX.Y.Z-target.tar.gz/.zip]
Download --> Extract[압축 해제 및 ~/.local/bin 배포]
Extract --> PathConfig[PATH 환경변수 등록]
PathConfig --> Done([설치 완료])
```
## 2. 작업 단계 및 체크리스트
### 단계 1: 원인 분석 및 계획 수립
- [x] GitHub Releases API 응답 구조 확인 (`dua-core-v*` vs `v*`)
- [x] 실행 계획서(`VIBE-WORK/261031/FIX-DUA-INSTALL-IMP-PLAN.md`) 작성
### 단계 2: `install-dua.sh` 수정
- [x] `_json_latest_tag` 함수에서 `prerelease == false` 조건뿐만 아니라 `tag_name`이 `v`로 시작하고(`startswith("v")`) `assets` 배열이 비어있지 않은 릴리스만 선택하도록 필터 강화
- [x] GitHub API 호출 시 User-Agent 헤더 및 Fallback 태그(`v2.46.0`) 안전장치 추가
- [x] `bash -n install-dua.sh` 문법 검사 및 태그 추출 테스트
### 단계 3: `install-dua.ps1` 개선
- [x] GitHub Releases에서 `v*` 태그의 Windows 바이너리(`dua-{TAG}-{ARCH}-pc-windows-msvc.zip`)를 직접 다운로드하여 `$env:USERPROFILE\.local\bin`에 설치하도록 개선 (다른 스크립트들과 일관된 방식)
- [x] PATH 환경변수 자동 등록 및 버전 확인 로직 구성
### 단계 4: 완료 보고서 작성 및 Graphify 업데이트 / Git 푸시
- [x] 완료 보고서(`VIBE-WORK/261031/FIX-DUA-INSTALL-PHASE01.md`) 작성
- [x] `uv tool run --from graphifyy graphify update .` 실행
- [x] Git commit 및 push
@@ -0,0 +1,20 @@
# dua 설치 스크립트 오류 수정 완료 보고서 (FIX-DUA-INSTALL-PHASE01)
## 1. 장애 원인
`Byron/dua-cli` GitHub 저장소에서 CLI 바이너리 릴리스(`v2.46.0` 등) 외에 내부 코어 라이브러리 릴리스(`dua-core-v5.0.1` 등, 바이너리 에셋 없음)를 함께 발행하기 시작하면서, 기존 `prerelease == false` 조건만 검사하던 로직이 `dua-core-v5.0.1` 태그를 선택하여 존재하지 않는 URL(`.../dua-dua-core-v5.0.1-...`)을 다운로드하려다 404 오류가 발생하였습니다.
```mermaid
flowchart LR
API[GitHub Releases API] --> Old[기존: 첫 번째 prerelease=false 선택<br/>dua-core-v5.0.1 선택됨 -> 404 에러]
API --> New[수정: tag_name이 'v*'로 시작하고<br/>assets가 존재하는 릴리스만 선택<br/>v2.46.0 정상 다운로드]
```
## 2. 주요 변경 사항
### 2.1. `install-dua.sh`
- `jq` 및 `python3`, `grep` 파서에서 `tag_name`이 `v`로 시작하고(`startswith("v")`) `assets` 배열이 비어있지 않은 릴리스만 필터링하도록 수정
- GitHub API Rate Limit 등으로 실패할 경우를 대비한 `FALLBACK_TAG="v2.46.0"` 안전장치 추가
- Linux에서 불필요하게 실패하는 배포판 패키지 매니저(`apt`, `dnf` 등에는 기본적으로 `dua-cli`가 없음) 시도 과정을 제거하고 GitHub 공식 정적 바이너리(`musl`)를 `~/.local/bin/dua`에 직접 설치하도록 개선
### 2.2. `install-dua.ps1`
- `winget` 의존성을 제거하고 GitHub Releases API에서 `v*` 태그의 Windows 아키텍처별 바이너리(`dua-{TAG}-{ARCH}-pc-windows-msvc.zip`)를 직접 다운로드하여 `$env:USERPROFILE\.local\bin\dua.exe`에 설치하고 사용자 PATH에 자동 등록하도록 개선