From e7dd516d8e065a443d72173764797a9d7f97c3d8 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 6 Sep 2026 07:43:37 +0000 Subject: [PATCH] Pinne die Actions auf Commit-SHAs Die Workflows standen auf Tags. Ein Tag laesst sich verschieben: wer actions/checkout uebernaehme, uebernaehme damit jeden CI- und Release-Lauf dieses Repos. Das stand seit gestern als offener Punkt in der README. Jetzt steht hinter jedem uses: eine Commit-SHA und dahinter als Kommentar die Version, die sie traegt. Dependabot hebt beides zusammen; die SHA bleibt die Wahrheit, der Kommentar ist die Lesehilfe. Eine Falle dabei, die den Aufwand rechtfertigt: softprops/action-gh-release@v3 ist ein annotiertes Tag. Die SHA, die git ls-remote --tags in der Zeile refs/tags/v3 zeigt, ist das Tag-Objekt und kein Commit; gepinnt wird die Zeile mit ^{}, also efb35369. Wer die erste SHA nimmt, bekommt einen Lauf, der nicht startet. Die beiden actions/-Tags sind leichtgewichtig, dort ist die erste SHA die richtige. Die drei SHAs sind gegengeprueft: 3d3c42e5 und efb35369 nennen die Dependabot-Berichte als "prep v7.0.1" und "release 3.0.3", und 3d3c42e5 pinnt auch das Referenz-Repo sergebulaev/linkedin-skills. CLAUDE.md fuehrt die Regel samt der Falle mit annotierten Tags. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01LA1KtLnNEf82BqzrGdbu8a --- .github/workflows/ci.yml | 11 ++++++----- .github/workflows/release.yml | 6 +++--- CLAUDE.md | 6 ++++++ README.md | 5 ----- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7c6c10a..723ba17 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,12 +15,13 @@ jobs: checks: runs-on: ubuntu-latest steps: - # Die Actions stehen auf Tags, nicht auf Commit-SHAs. Ein Tag laesst sich - # verschieben; wer die Action uebernimmt, uebernimmt damit diesen Lauf. - # Das Pinnen auf SHAs steht als offener Punkt in der README. - - uses: actions/checkout@v7 + # Die Actions stehen auf Commit-SHAs, nicht auf Tags. Ein Tag laesst sich + # verschieben; wer die Action uebernaehme, uebernaehme damit diesen Lauf. + # Der Kommentar hinter der SHA nennt die Version, die sie traegt. + # Dependabot hebt beides zusammen; die SHA bleibt die Wahrheit. + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - uses: actions/setup-python@v7 + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 with: python-version: '3.11' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a4f56c0..a7ee5ae 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,9 +20,9 @@ jobs: release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - uses: actions/setup-python@v7 + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 with: python-version: '3.11' @@ -71,7 +71,7 @@ jobs: cat release-notes.md - name: Release anlegen und Artefakt anhaengen - uses: softprops/action-gh-release@v3 + uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3 with: tag_name: ${{ steps.version.outputs.tag }} body_path: release-notes.md diff --git a/CLAUDE.md b/CLAUDE.md index 3b8a25f..5005f39 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -58,6 +58,12 @@ werden deshalb mit dem Repo-Namen davor genannt, etwa das `.skill`-Archiv gehört, wird dort und in der Paketliste der CI ergänzt. Repo-Werkzeuge, `.github/`, `.claude-plugin/` und die Landingpage gehören nicht ins Archiv. +**Actions.** In `.github/workflows/` steht hinter jedem `uses:` eine Commit-SHA, nicht ein Tag, +und dahinter als Kommentar die Version, die sie trägt. Ein Tag lässt sich verschieben; wer die +Action übernähme, übernähme damit den Lauf. Dependabot hebt SHA und Kommentar zusammen. Vorsicht +bei annotierten Tags: `softprops/action-gh-release@v3` zeigt auf ein Tag-Objekt, gepinnt wird der +Commit dahinter (`git ls-remote --tags`, die Zeile mit `^{}`). + **Beispieldaten.** Erfunden, nicht anonymisiert. Ein reales Profil zu erheben und danach zu verfremden wäre genau die Verarbeitung, die SECURITY.md einschränkt. diff --git a/README.md b/README.md index 1d4e7de..7c2bb55 100644 --- a/README.md +++ b/README.md @@ -242,11 +242,6 @@ python tests/run_eval.py --fixture profile_mid --result lauf.json Offene Punkte, ohne Termin: -- GitHub Actions auf Commit-SHAs pinnen statt auf Tags. `actions/checkout@v4` und - `actions/setup-python@v5` stehen auf verschiebbaren Tags; wer die Action übernimmt, übernimmt - damit den CI-Lauf. `.github/dependabot.yml` hält sie monatlich aktuell, ersetzt das Pinnen aber - nicht. - - package.json für `docx`, dazu gepinnte Versionen statt der Untergrenze in requirements.txt. - Ausgabepfad des Report-Templates konfigurierbar machen, statt ihn auf die claude.ai-Sandbox zu verdrahten. - Fehlerfälle Rate Limit beziehungsweise LinkedIn-Checkpoint und geänderte DOM-Struktur in der Fehlerbehandlung ergänzen.