From 7ee0c2d27247e69ae49f94667fbc0beb669f1934 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Thu, 10 Sep 2026 23:02:25 +0200 Subject: [PATCH] Fix: Gezieltes Caching fuer Packaging-Tools und Token-Pruefung in Security-Scans - Caching in main.yaml und testing.yaml auf die konkreten Packaging-Binaries (~/.cargo/bin/cargo-binstall, cargo-deb, cargo-generate-rpm) eingeschraenkt, statt das gesamte ~/.cargo/bin-Verzeichnis zu sichern (verhindert das Wiederherstellen veralteter Rust-Compiler-Proxys bei Toolchain-Updates). - AGENTS.md an das praezisierte Caching-Verhalten angepasst. - scripts/report-security-issue.py sichert den Zugriff auf Umgebungsvariablen (GITEA_URL, REPO, TOKEN) per os.environ.get ab und ueberspringt die Gitea-Issue-Synchronisation bei fehlendem oder leerem Token (verhindert Auth-Crashes bei unprivilegierten PR-Workflow-Laeufen). Co-authored-by: Junie --- .gitea/workflows/main.yaml | 5 +++- .gitea/workflows/testing.yaml | 5 +++- AGENTS.md | 2 +- scripts/report-security-issue.py | 51 +++++++++++++++++--------------- 4 files changed, 36 insertions(+), 27 deletions(-) diff --git a/.gitea/workflows/main.yaml b/.gitea/workflows/main.yaml index d8bc9fe..c95947a 100644 --- a/.gitea/workflows/main.yaml +++ b/.gitea/workflows/main.yaml @@ -67,7 +67,10 @@ jobs: id: cache-packaging-tools uses: actions/cache@v6 with: - path: ~/.cargo/bin + path: | + ~/.cargo/bin/cargo-binstall + ~/.cargo/bin/cargo-deb + ~/.cargo/bin/cargo-generate-rpm key: packaging-tools-${{ runner.os }}-${{ env.CARGO_BINSTALL_VERSION }}-${{ env.CARGO_DEB_VERSION }}-${{ env.CARGO_GENERATE_RPM_VERSION }} - name: Install Packaging Tools (Prebuilt Binaries) diff --git a/.gitea/workflows/testing.yaml b/.gitea/workflows/testing.yaml index c4e1371..c551cdf 100644 --- a/.gitea/workflows/testing.yaml +++ b/.gitea/workflows/testing.yaml @@ -67,7 +67,10 @@ jobs: id: cache-packaging-tools uses: actions/cache@v6 with: - path: ~/.cargo/bin + path: | + ~/.cargo/bin/cargo-binstall + ~/.cargo/bin/cargo-deb + ~/.cargo/bin/cargo-generate-rpm key: packaging-tools-${{ runner.os }}-${{ env.CARGO_BINSTALL_VERSION }}-${{ env.CARGO_DEB_VERSION }}-${{ env.CARGO_GENERATE_RPM_VERSION }} - name: Install Packaging Tools (Prebuilt Binaries) diff --git a/AGENTS.md b/AGENTS.md index a2ce60e..282d51f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -137,7 +137,7 @@ Promotion-Flow: `dev` → `testing` → `main`, ausschließlich per Merge (nie d `main.yaml`/`testing.yaml` cachen mehrere Verzeichnisse, um wiederholte Cross-Compile-Builds zu beschleunigen: - `~/.cargo/registry`, `~/.cargo/git`, `target` – Cache-Key basiert auf `hashFiles('Cargo.lock')`. - `~/.rustup/.../lib/rustlib/` für die zwei zusätzlichen Cross-Targets – Cache-Key basiert auf der **aufgelösten** `rustc --version`, nicht auf dem gleitenden `stable`-Label. Sonst könnte nach einem Rust-Update eine veraltete gecachte Std-Lib mit einem neueren Compiler kombiniert werden. -- `~/.cargo/bin` für `cargo-binstall`/`cargo-deb`/`cargo-generate-rpm` – alle drei sind auf feste Versionen gepinnt (Job-`env`), nicht auf `latest`. +- `~/.cargo/bin/cargo-binstall`, `~/.cargo/bin/cargo-deb`, `~/.cargo/bin/cargo-generate-rpm` (gezielt die Binaries statt des gesamten Verzeichnisses, um alte Rust-Compiler-Proxys bei Toolchain-Updates nicht wiederherzustellen) – alle drei sind auf feste Versionen gepinnt (Job-`env`), nicht auf `latest`. **Wichtige Falle:** `target/debian`, `target/generate-rpm` und `target/arch` hängen ebenfalls unter `target` und werden dadurch mitgecacht, aber von keinem Tool automatisch geleert. Vor jedem Paketbau werden sie daher explizit per `rm -rf` bereinigt – sonst werden alte, bereits hochgeladene Paket-Dateien aus früheren Builds erneut mit hochgeladen, und die Gitea Package Registry lehnt sie mit `409 Conflict` ab (Paket-Dateien sind dort unveränderlich). Bei neuen Paketierungs-Outputs außerhalb dieser drei Ordner muss diese Bereinigung entsprechend erweitert werden. diff --git a/scripts/report-security-issue.py b/scripts/report-security-issue.py index 0e6fb52..5641d7e 100644 --- a/scripts/report-security-issue.py +++ b/scripts/report-security-issue.py @@ -253,9 +253,9 @@ def main(): osv_path = sys.argv[2] if len(sys.argv) > 2 else None trufflehog_path = sys.argv[3] if len(sys.argv) > 3 else None - gitea_url = os.environ["GITEA_URL"].rstrip("/") - repo = os.environ["REPO"] - token = os.environ["TOKEN"] + gitea_url = os.environ.get("GITEA_URL", "").rstrip("/") + repo = os.environ.get("REPO", "") + token = os.environ.get("TOKEN", "").strip() run_url = os.environ.get("RUN_URL", "") osv_exit = int(os.environ.get("OSV_EXIT", "0")) trufflehog_exit = int(os.environ.get("TRUFFLEHOG_EXIT", "0")) @@ -263,28 +263,31 @@ def main(): findings = sort_findings(load_trivy(trivy_path) + load_osv(osv_path) + load_trufflehog(trufflehog_path)) print_summary(findings) - open_issue = find_open_issue(token, gitea_url, repo) - - if findings: - report = build_report(findings, run_url) - if open_issue: - print(f"Kommentiere bestehendes Issue #{open_issue['number']} mit {len(findings)} Fund(en).") - api("POST", f"/repos/{repo}/issues/{open_issue['number']}/comments", token, gitea_url, {"body": report}) - else: - label_id = ensure_label(token, gitea_url, repo) - print(f"Erstelle neues Issue mit {len(findings)} Fund(en).") - api("POST", f"/repos/{repo}/issues", token, gitea_url, { - "title": ISSUE_TITLE, - "body": report, - "labels": [label_id], - }) - elif open_issue: - print(f"Keine aktuellen Funde mehr. Kommentiere Issue #{open_issue['number']}.") - api("POST", f"/repos/{repo}/issues/{open_issue['number']}/comments", token, gitea_url, { - "body": f"Aktueller Scan hat keine offenen Schwachstellen mehr gefunden.\n\n{run_url}".strip(), - }) + if not token: + print("TOKEN nicht gesetzt oder leer – überspringe Gitea-Issue-Synchronisation.") else: - print("Keine Funde und kein offenes Issue vorhanden.") + open_issue = find_open_issue(token, gitea_url, repo) + + if findings: + report = build_report(findings, run_url) + if open_issue: + print(f"Kommentiere bestehendes Issue #{open_issue['number']} mit {len(findings)} Fund(en).") + api("POST", f"/repos/{repo}/issues/{open_issue['number']}/comments", token, gitea_url, {"body": report}) + else: + label_id = ensure_label(token, gitea_url, repo) + print(f"Erstelle neues Issue mit {len(findings)} Fund(en).") + api("POST", f"/repos/{repo}/issues", token, gitea_url, { + "title": ISSUE_TITLE, + "body": report, + "labels": [label_id], + }) + elif open_issue: + print(f"Keine aktuellen Funde mehr. Kommentiere Issue #{open_issue['number']}.") + api("POST", f"/repos/{repo}/issues/{open_issue['number']}/comments", token, gitea_url, { + "body": f"Aktueller Scan hat keine offenen Schwachstellen mehr gefunden.\n\n{run_url}".strip(), + }) + else: + print("Keine Funde und kein offenes Issue vorhanden.") osv_ok_exits = {0, 1} trufflehog_ok_exits = {0, 183}