Skip to content
Apothem
레퍼런스

의존성 고정 매니페스트

Python 런타임 범위, 개발 도구, 릴리스 도구 잠금 파일, 각 빌드 표면에 대한 승인된 버전 하한을 다루는 의존성 선언 정책.

Apothem이 의존성을 선언하고, 고정하고, 잠그는 방식에 대한 승인된 자세. 대상: 재현성 모델을 이해해야 하는 기여자 및 다운스트림 소비자.

자세

Apothem은 작은 런타임 의존성 집합과 더 큰 개발·감사·릴리스·문서 도구 체인을 갖춘 Python CLI입니다. 런타임 의존성은 pyproject.toml에서 보수적인 하한을 사용합니다. 웹사이트는 site/package-lock.json을 커밋합니다. GitHub Actions는 버전 주석과 함께 불변 SHA로 고정되며 Renovate에 의해 업그레이드됩니다.

클래스선언잠금 정책
런타임 Python 의존성pyproject.toml[project.dependencies]하한 범위; 커밋되는 Python 런타임 잠금 없음
개발 / 보안 도구[project.optional-dependencies] extras하한 범위; CI는 현재 일치하는 버전을 설치
릴리스 도구scripts/release/requirements-build-linux.txt릴리스 워크플로용 해시 잠금; 릴리스 도구 클로저에서 생성
CI 전용 도구.github/workflows/*.yml워크플로 전용 pip 도구는 정확한 고정을 사용(pip, bandit, pip-audit, pip-licenses, pyinstaller)
문서 사이트site/package.jsonsite/package-lock.json을 커밋하고 npm ci가 소비
GitHub Actions버전 주석이 있는 SHA 고정 uses: 참조Renovate가 업데이트를 제안; 예외는 action-pinning-exempt: 마커를 지님

릴리스 승인

표면승인된 상태근거
런타임 의존성현재 하한은 pyproject.toml [project.dependencies]에 있음릴리스 전에 승인된 현재 안정 하한; 알려진 런타임 CVE 차단 요소 없음
개발 도구현재 하한은 pyproject.tomldev extra에 있음릴리스 전에 승인된 최신 안정 하한
보안 도구현재 하한은 pyproject.tomlsecurity extra에 있음릴리스 전에 승인된 현재 스캐너 하한
릴리스 도구해시 잠금 클로저는 scripts/release/requirements-build-linux.txt에 있음릴리스 워크플로는 --require-hashes로 설치; 로컬 스크립트는 변동하는 의존성을 조용히 설치하는 대신 build이 이미 존재할 것을 요구
문서 도구현재 범위는 site/package.json에 있고, 정확한 해결은 site/package-lock.json에 있음잠금 파일 새로 고침 후 npm outdated는 오래된 문서 의존성을 반환하지 않음
GitHub Actions현재 릴리스에는 기존 SHA 고정을 유지; SLSA 재사용 가능 워크플로는 문서화된 태그 고정 예외로 유지공개 CI 재실행은 그린; 릴리스 표면의 동요를 피하기 위해 광범위한 action 메이저 업그레이드는 의도적으로 의존성 자동화 PR에 맡김
npm 패키징수동 전용 publish-npm.yml 워크플로; 자동 릴리스 트리거 없음유일한 공개 npm 패키지는 @ahmed-g-gad/apothem; 게시는 릴리스 준비가 통과한 후 실행

잠금

Python 잠금 파일은 기여자가 필요할 때 생성합니다. Apothem의 런타임 클로저가 작고, CLI가 여러 Python 마이너 버전을 지원하며, CI가 의도적으로 최신의 일치하는 도구 버전을 연습하기 때문에 이들은 커밋되지 않습니다.

# Astral uv:
uv pip install -e ".[dev,security,release]"
uv pip freeze > requirements.dev.lock

# pip-tools:
pip-compile --extra=dev --extra=security --extra=release -o requirements.dev.lock pyproject.toml

# Plain pip:
pip install -e ".[dev,security,release]"
pip freeze > requirements.dev.lock

웹사이트는 다릅니다. site/package-lock.json이 커밋되고 CI가 npm ci를 사용하므로, 렌더링된 문서 사이트에는 재현 가능한 Node 클로저가 있습니다.

근거

  • Python에 범위 고정을 쓰는 이유는? CLI는 광범위한 Python 매트릭스를 지원하며, CI는 사용자가 마주치기 전에 현재 도구와의 호환성 문제를 드러내야 합니다.
  • 커밋되는 Node 잠금을 쓰는 이유는? 웹사이트는 배포된 정적 산출물입니다. 잠금 파일은 그 공개 표면에 대해 결정론적 npm ci 빌드를 제공합니다.
  • SHA 고정 Actions를 쓰는 이유는? 태그는 가변적이지만 SHA는 불변입니다. Renovate는 고정된 SHA를 업데이트하고, 릴리스 게이트는 의도적인 보류를 모두 기록합니다.

On this page