본문으로 건너뛰기

[pydantic-ai] CI에서 uv cache prune 비활성화 및 HuggingFace 캐시 키 개선

PR 링크: pydantic/pydantic-ai#3271 상태: Merged | 변경: +6 / -3

들어가며

uv의 prune-cache 옵션은 CI 실행 후 사용하지 않는 캐시 항목을 정리합니다. 그러나 여러 test matrix가 동일한 캐시를 공유하는 환경에서는, 한 작업이 prune한 패키지를 다른 작업이 필요로 하여 캐시 미스가 발생할 수 있습니다. 이 PR은 prune을 비활성화하고, HuggingFace 모델 캐시의 키를 pyproject.toml 대신 uv.lock 기반으로 변경합니다.

핵심 코드 분석

prune-cache 비활성화

Before (ci.yml):

- uses: astral-sh/setup-uv@v5
  with:
    enable-cache: true

After:

- uses: astral-sh/setup-uv@v5
  with:
    enable-cache: true
    prune-cache: false

test, lowest-versions, all-extras 세 가지 테스트 matrix에 prune-cache: false를 추가했습니다.

HuggingFace 캐시 키 변경

Before:

key: hf-${{ runner.os }}-${{ hashFiles('**/pyproject.toml') }}

After:

key: hf-${{ runner.os }}-${{ hashFiles('**/uv.lock') }}

pyproject.toml은 패키지 메타데이터가 변경되어도 HuggingFace 모델 의존성과 무관할 수 있지만, uv.lock은 실제 설치된 버전을 정확히 반영합니다.

왜 이게 좋은가

  • prune 비활성화로 matrix 간 캐시 간섭이 없어지고, 캐시 적중률이 개선됩니다.
  • uv.lock 기반 캐시 키로 의존성 변경 시에만 HuggingFace 모델이 재다운로드됩니다.

정리

  • matrix CI에서는 cache prune을 주의하라: 한 작업의 prune이 다른 작업의 캐시를 무효화할 수 있습니다.
  • 캐시 키는 실제 의존성 잠금 파일 기반으로 하라: pyproject.toml보다 uv.lock(또는 package-lock.json)이 더 정확한 캐시 무효화를 제공합니다.

참고 자료

⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.

댓글

관련 포스트

PR Analysis 의 다른글