Skip to content
Apothem
Referenz

Manifest zur Abhängigkeitsfixierung

Richtlinie zur Abhängigkeitsdeklaration, die Python-Laufzeitbereiche, Entwicklungswerkzeuge, Lock-Dateien der Release-Werkzeuge und ratifizierte Versionsuntergrenzen für jede Build-Oberfläche abdeckt.

Ratifizierte Haltung dazu, wie Apothem Abhängigkeiten deklariert, fixiert und sperrt. Zielgruppe: Mitwirkende und nachgelagerte Konsumenten, die das Reproduzierbarkeitsmodell verstehen müssen.

Haltung

Apothem ist eine Python-CLI mit einem kleinen Satz an Laufzeitabhängigkeiten plus einer umfangreicheren Werkzeugkette für Entwicklung, Audit, Release und Dokumentation. Laufzeitabhängigkeiten verwenden konservative Untergrenzen in pyproject.toml; die Website committet site/package-lock.json; GitHub Actions werden per unveränderlichem SHA mit Versionskommentaren fixiert und von Renovate aktualisiert.

KlasseDeklarationLock-Richtlinie
Python-Laufzeitabhängigkeiten[project.dependencies] in pyproject.tomlUntergrenzenbereiche; kein committeter Python-Laufzeit-Lock
Entwicklungs- / Sicherheitswerkzeuge[project.optional-dependencies]-ExtrasUntergrenzenbereiche; CI installiert die aktuell passenden Versionen
Release-Werkzeugescripts/release/requirements-build-linux.txtHash-gesperrt für Release-Workflows; aus der Hülle der Release-Werkzeuge erzeugt
Nur-CI-Werkzeuge.github/workflows/*.ymlWorkflow-eigene pip-Werkzeuge verwenden exakte Fixierungen (pip, bandit, pip-audit, pip-licenses, pyinstaller)
Dokumentationsseitesite/package.jsonsite/package-lock.json committet und von npm ci konsumiert
GitHub ActionsSHA-fixierte uses:-Referenzen mit VersionskommentarenRenovate schlägt Aktualisierungen vor; Ausnahmen tragen action-pinning-exempt:-Markierungen

Release-Ratifizierung

OberflächeRatifizierter ZustandBegründung
LaufzeitabhängigkeitenAktuelle Untergrenzen leben in pyproject.toml [project.dependencies]Aktuelle stabile Untergrenzen vor dem Release ratifiziert; kein bekannter Laufzeit-CVE-Blocker
EntwicklungswerkzeugeAktuelle Untergrenzen leben im dev-Extra von pyproject.tomlNeueste stabile Untergrenzen vor dem Release ratifiziert
SicherheitswerkzeugeAktuelle Untergrenzen leben im security-Extra von pyproject.tomlAktuelle Scanner-Untergrenzen vor dem Release ratifiziert
Release-WerkzeugeDie hash-gesperrte Hülle lebt in scripts/release/requirements-build-linux.txtDer Release-Workflow installiert mit --require-hashes; lokale Skripte verlangen, dass build bereits vorhanden sind, statt schwankende Abhängigkeiten stillschweigend zu installieren
DokumentationswerkzeugeAktuelle Bereiche leben in site/package.json; die exakte Auflösung lebt in site/package-lock.jsonnpm outdated liefert nach der Lock-Datei-Aktualisierung keine veraltete Dokumentationsabhängigkeit
GitHub ActionsBestehende SHA-Fixierungen werden für das aktuelle Release beibehalten; der wiederverwendbare SLSA-Workflow bleibt die dokumentierte Tag-fixierte AusnahmeDer öffentliche CI-Neulauf ist grün; breite Major-Upgrades von Actions werden absichtlich den Abhängigkeits-Automatisierungs-PRs überlassen, um Aufruhr an der Release-Oberfläche zu vermeiden
npm-PaketierungNur manueller publish-npm.yml-Workflow; kein automatischer Release-AuslöserDas einzige öffentliche npm-Paket ist @ahmed-g-gad/apothem; die Veröffentlichung läuft, nachdem die Release-Bereitschaft bestanden ist

Sperrung

Python-Lock-Dateien werden vom Mitwirkenden bei Bedarf erzeugt. Sie werden nicht committet, weil Apothems Laufzeithülle klein ist, die CLI mehrere Python-Nebenversionen unterstützt und CI absichtlich die neuesten passenden Werkzeugversionen ausübt.

# 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

Die Website ist anders: site/package-lock.json wird committet und CI verwendet npm ci, sodass die gerenderte Dokumentationsseite eine reproduzierbare Node-Hülle hat.

Begründung

  • Warum Bereichsfixierungen für Python? Die CLI unterstützt eine breite Python-Matrix, und CI sollte Kompatibilitätsprobleme mit aktuellen Werkzeugen aufdecken, bevor Nutzer auf sie stoßen.
  • Warum ein committeter Node-Lock? Die Website ist ein bereitgestelltes statisches Artefakt; die Lock-Datei liefert deterministische npm ci-Builds für diese öffentliche Oberfläche.
  • Warum SHA-fixierte Actions? Tags sind veränderlich; SHAs sind unveränderlich. Renovate aktualisiert die fixierten SHAs, während die Release-Schranke jeden absichtlichen Aufschub festhält.

On this page