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 ツールは厳密なピン(pipbanditpip-auditpip-licensespyinstaller)を使用
ドキュメントサイト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