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 <junie@jetbrains.com>
This commit is contained in:
@@ -67,7 +67,10 @@ jobs:
|
|||||||
id: cache-packaging-tools
|
id: cache-packaging-tools
|
||||||
uses: actions/cache@v6
|
uses: actions/cache@v6
|
||||||
with:
|
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 }}
|
key: packaging-tools-${{ runner.os }}-${{ env.CARGO_BINSTALL_VERSION }}-${{ env.CARGO_DEB_VERSION }}-${{ env.CARGO_GENERATE_RPM_VERSION }}
|
||||||
|
|
||||||
- name: Install Packaging Tools (Prebuilt Binaries)
|
- name: Install Packaging Tools (Prebuilt Binaries)
|
||||||
|
|||||||
@@ -67,7 +67,10 @@ jobs:
|
|||||||
id: cache-packaging-tools
|
id: cache-packaging-tools
|
||||||
uses: actions/cache@v6
|
uses: actions/cache@v6
|
||||||
with:
|
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 }}
|
key: packaging-tools-${{ runner.os }}-${{ env.CARGO_BINSTALL_VERSION }}-${{ env.CARGO_DEB_VERSION }}-${{ env.CARGO_GENERATE_RPM_VERSION }}
|
||||||
|
|
||||||
- name: Install Packaging Tools (Prebuilt Binaries)
|
- name: Install Packaging Tools (Prebuilt Binaries)
|
||||||
|
|||||||
@@ -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:
|
`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')`.
|
- `~/.cargo/registry`, `~/.cargo/git`, `target` – Cache-Key basiert auf `hashFiles('Cargo.lock')`.
|
||||||
- `~/.rustup/.../lib/rustlib/<target>` 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.
|
- `~/.rustup/.../lib/rustlib/<target>` 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.
|
**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.
|
||||||
|
|
||||||
|
|||||||
@@ -253,9 +253,9 @@ def main():
|
|||||||
osv_path = sys.argv[2] if len(sys.argv) > 2 else None
|
osv_path = sys.argv[2] if len(sys.argv) > 2 else None
|
||||||
trufflehog_path = sys.argv[3] if len(sys.argv) > 3 else None
|
trufflehog_path = sys.argv[3] if len(sys.argv) > 3 else None
|
||||||
|
|
||||||
gitea_url = os.environ["GITEA_URL"].rstrip("/")
|
gitea_url = os.environ.get("GITEA_URL", "").rstrip("/")
|
||||||
repo = os.environ["REPO"]
|
repo = os.environ.get("REPO", "")
|
||||||
token = os.environ["TOKEN"]
|
token = os.environ.get("TOKEN", "").strip()
|
||||||
run_url = os.environ.get("RUN_URL", "")
|
run_url = os.environ.get("RUN_URL", "")
|
||||||
osv_exit = int(os.environ.get("OSV_EXIT", "0"))
|
osv_exit = int(os.environ.get("OSV_EXIT", "0"))
|
||||||
trufflehog_exit = int(os.environ.get("TRUFFLEHOG_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))
|
findings = sort_findings(load_trivy(trivy_path) + load_osv(osv_path) + load_trufflehog(trufflehog_path))
|
||||||
print_summary(findings)
|
print_summary(findings)
|
||||||
|
|
||||||
open_issue = find_open_issue(token, gitea_url, repo)
|
if not token:
|
||||||
|
print("TOKEN nicht gesetzt oder leer – überspringe Gitea-Issue-Synchronisation.")
|
||||||
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:
|
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}
|
osv_ok_exits = {0, 1}
|
||||||
trufflehog_ok_exits = {0, 183}
|
trufflehog_ok_exits = {0, 183}
|
||||||
|
|||||||
Reference in New Issue
Block a user