From 3d33972e98f136227975f922ff90e0d4cd834002 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Thu, 10 Sep 2026 22:41:02 +0200 Subject: [PATCH 01/12] Docs: Projektbeschreibung und Titel im README korrigiert und neu strukturiert --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5601ca6..e3fcbcf 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ +# mirror-package + [![Main Release & Publish](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions/workflows/main.yaml/badge.svg?branch=main)](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions?workflow=main.yaml) [![Testing Build, Publish & Preview Release](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions/workflows/testing.yaml/badge.svg?branch=testing)](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions?workflow=testing.yaml) -# mirror-package - Automatisiertes Werkzeug zum Extrahieren, Herunterladen und Spiegeln vorkompilierter Linux-Pakete aus GitHub-Releases in eine selbstgehostete Gitea- / Forgejo-Paket-Registry. `mirror-package` überwacht konfigurierte GitHub-Repositories (wie z. B. `raspberrypi/rpi-imager` oder `Heroic-Games-Launcher/HeroicGamesLauncher`), identifiziert vorkompilierte Linux-Pakete (`.deb`, `.rpm`, `.pkg.tar.zst`, `.pkg.tar.xz`, `.pkg.tar.gz`, `.pacman`) und veröffentlicht diese anhand von Release-Stabilitätsregeln automatisch in den passenden Distributionen der Gitea-Paket-Registry. From 8359d6e4bfc39d63478770d9e5eba96571f4c5a6 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Thu, 10 Sep 2026 22:50:00 +0200 Subject: [PATCH 02/12] Docs: AGENTS.md & README.md an aktuelle CI/CD-Pipeline angepasst Beide Dokumente hinkten dem tatsaechlichen Stand der .gitea/workflows/ und renovate.json hinterher. Ergaenzt: - Neue Workflow-Dateien (unit-tests, security-scan, trufflehog-scan, renovate) und renovate.json in den Projektstruktur-Uebersichten - AGENTS.md: neuer Abschnitt 5 mit Branch-Flow, actions/cache-Details inkl. der target/-Bereinigungs-Falle, der Build-Nummer-Logik ueber die Gitea-Packages-API und der Renovate-Gruppierung/baseBranches - README.md: zwei weitere CI-Badges sowie ein kurzer CI/CD & Contributing- Abschnitt fuer Branch-Flow, PR-Tests, Security-Scans und Renovate Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Kh9v73QApBwJj96w6A8R55 --- AGENTS.md | 45 +++++++++++++++++++++++++++++++++++++-------- README.md | 20 ++++++++++++++++++-- 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 275cfca..a2ce60e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -31,8 +31,12 @@ Dieses Dokument dient als technischer Leitfaden und Kontextdokument für KI-Codi │ └── config.toml # Linker für Cross-Target-Kompilierung & Registry-Konfiguration ├── .gitea/ │ └── workflows/ -│ ├── main.yaml # CI/CD: Stabile Builds, Multi-Arch-Paketierung, Release & Upload -│ └── testing.yaml # CI/CD: Preview-Builds & Testing-Pakete +│ ├── main.yaml # CI/CD: Stabile Builds, Multi-Arch-Paketierung, Release & Upload +│ ├── testing.yaml # CI/CD: Preview-Builds & Testing-Pakete +│ ├── unit-tests.yaml # CI: cargo test bei PRs mit Ziel-Branch testing +│ ├── security-scan.yaml # CI: Trivy (vuln/secret/misconfig) & OSV-Scanner +│ ├── trufflehog-scan.yaml # CI: TruffleHog Secret-Scanning +│ └── renovate.yaml # CI: Renovate Dependency-Updates (self-hosted, wöchentlich) ├── scripts/ │ ├── get-build-number.py # Ermittelt automatisch die nächste Revisions-/Build-Nummer │ └── package-arch.py # Erzeugt native Arch Linux .pkg.tar.zst Pakete @@ -52,6 +56,7 @@ Dieses Dokument dient als technischer Leitfaden und Kontextdokument für KI-Codi ├── Dockerfile # Minimales & gehärtetes Runtime-Container-Image ├── docker-compose.example.yml # Beispielkonfiguration für Docker Compose ├── Cargo.toml # Projekt-Manifest & Metadaten für deb, rpm und arch +├── renovate.json # Renovate-Konfiguration (baseBranches, Gruppierung, Custom-Manager) ├── LICENSE # Lizenztext ├── README.md # Benutzerdokumentation └── AGENTS.md # Dieses Agenten-Handbuch @@ -77,7 +82,7 @@ Bei Änderungen an Binärnamen, Abhängigkeiten oder Beschreibungen müssen die - `pkgrel`, `arch`, `depends`, `optdepends`. ### 3.3 Skripte in `scripts/` -- **Generizität**: Die Skripte dürfen keine hardcodierten Anwendungsnamen, spezifischen Abhängigkeiten oder projektspezifischen URLs enthalten. Alle Werte müssen dynamisch aus `Cargo.toml` oder Umgebungsvariablen (`BUILD_NUMBER`, `GITEA_URL`, `REPO`, `TOKEN`) ermittelt werden. +- **Generizität**: Die Skripte dürfen keine hardcodierten Anwendungsnamen, spezifischen Abhängigkeiten oder projektspezifischen URLs enthalten. Alle Werte müssen dynamisch aus `Cargo.toml` oder Umgebungsvariablen (`BUILD_NUMBER`, `GITEA_URL`, `REPO`, `REPO_OWNER`, `TOKEN`) ermittelt werden. - **Python-Kompatibilität**: Verwende Standard-Python 3 ohne externe PyPI-Abhängigkeiten (nur Standardbibliothek). ### 3.4 Container-Sicherheit & Persistenz @@ -119,8 +124,32 @@ python3 scripts/package-arch.py --arch x86_64 --pkgrel 1 ## 5. CI/CD-Pipeline Details -- **Trigger**: - - `push` auf `main`: Baut Binaries für alle 3 Architekturen, baut `.deb`, `.rpm` und `.pkg.tar.zst`, lädt sie in die Gitea Package Registry hoch, erstellt ein Gitea Release `v` und baut/veröffentlicht das Docker-Container-Image mit den Tags `:latest`, `:`, `:v` und `:.`. - - `push` auf `testing`: Baut Binaries & Pakete für den `testing`-Kanal, erstellt ein Pre-Release `v-preview` und baut/veröffentlicht das Docker-Container-Image ausschließlich mit eindeutigen Testing-Tags (`:testing`, `:-preview`, `:-testing`, `:-preview.`, `:testing-`). Der Tag `:latest` ist strikt dem `main`-Workflow vorbehalten. -- **Secrets**: - - `PACKAGE_TOKEN` (bzw. Fallback-Token-Namen wie `RELEASE_TOKEN`, `GITEA_TOKEN`) wird für API-Zugriffe auf Gitea Packages, Container Registry und Releases verwendet. +### 5.1 Branch-Flow & Trigger +Promotion-Flow: `dev` → `testing` → `main`, ausschließlich per Merge (nie direkt gepusht). + +- `pull_request` mit Ziel-Branch `testing` (`unit-tests.yaml`): führt `cargo test` aus (`types: opened, synchronize, reopened`). +- `push` auf `main` (`main.yaml`): Baut Binaries für alle 3 Architekturen, baut `.deb`, `.rpm` und `.pkg.tar.zst`, lädt sie in die Gitea Package Registry hoch, erstellt ein Gitea Release `v` und baut/veröffentlicht das Docker-Container-Image mit den Tags `:latest`, `:`, `:v` und `:.`. +- `push` auf `testing` (`testing.yaml`): Baut Binaries & Pakete für den `testing`-Kanal, erstellt ein Pre-Release `v-preview` und baut/veröffentlicht das Docker-Container-Image ausschließlich mit eindeutigen Testing-Tags (`:testing`, `:-preview`, `:-testing`, `:-preview.`, `:testing-`). Der Tag `:latest` ist strikt dem `main`-Workflow vorbehalten. +- `push`/`pull_request`/wöchentlich (`security-scan.yaml`, `trufflehog-scan.yaml`): Trivy (vuln/secret/misconfig) & OSV-Scanner bzw. TruffleHog laufen auf `main`/`testing`/`dev` sowie bei jedem PR; Funde werden per `scripts/report-security-issue.py` als Gitea-Issue gemeldet. +- wöchentlich, `workflow_dispatch` (`renovate.yaml`): Renovate (containerisiert via `ghcr.io/renovatebot/renovate`) prüft Dependency-Updates, siehe 5.5. + +### 5.2 Caching (`actions/cache@v6`) +`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`. + +**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. + +### 5.3 Build-Nummer (`scripts/get-build-number.py`) +Pro CI-Lauf wird genau **eine** Build-Nummer ermittelt und identisch an `cargo deb`, `cargo generate-rpm` und `package-arch.py --pkgrel` weitergereicht – `.deb`, `.rpm` und Arch-Paket tragen also immer dieselbe Nummer. Zur Ermittlung wird pro Paket-Typ (`debian`, `rpm`, `arch`) gezielt `GET /api/v1/packages/{owner}/{type}/{name}/-/latest` abgefragt (ein Request pro Typ, kein Paging, unbeeinflusst von Docker-Tags/anderen Paketen desselben Owners); das Maximum aller drei Typen + 1 ergibt die neue Nummer. Eine pauschale, ungefilterte Abfrage über alle Pakete des Owners (`GET /packages/{owner}`) darf hier nicht mehr verwendet werden, da sie durch Docker-Image-Tags & Co. verdrängt werden kann. + +### 5.4 Secrets +- `PACKAGE_TOKEN` (bzw. Fallback-Token-Namen wie `RELEASE_TOKEN`, `GITEA_TOKEN`) wird für API-Zugriffe auf Gitea Packages, Container Registry und Releases verwendet. +- `SECURITY_TOKEN` für die Security-Scan-Workflows (Gitea-Issue-Erstellung). +- `RENOVATE_TOKEN` für den Renovate-Workflow. + +### 5.5 Renovate (`renovate.json`) +- `baseBranches: ["dev"]` – Renovate liest Dependency-Dateien ausschließlich von `dev` und öffnet PRs nur dort, passend zum `dev → testing → main`-Promotion-Flow. Die Konfigurationsdatei selbst muss trotzdem über den Gitea-Default-Branch auffindbar sein. +- Drei Gruppen (`packageRules`), jeweils mit `separateMajorMinor: false`/`separateMinorPatch: false` (sonst reißt Renovate Major-Updates trotz `groupName` standardmäßig in einen eigenen PR): "Gitea Actions" (dateibasiert über `matchFileNames: [".gitea/workflows/**"]`, deckt auch die Custom-Manager unten ab), "Cargo Dependencies", "Docker-Images". +- `customManagers` (Regex) tracken Versionen, die als reine Strings in `run:`-Blöcken stecken und vom `github-actions`-Manager nicht erkannt werden: `TRIVY_VERSION`, `OSV_SCANNER_VERSION`, `TRUFFLEHOG_VERSION`, `CARGO_BINSTALL_VERSION`, `CARGO_DEB_VERSION`, `CARGO_GENERATE_RPM_VERSION`. Wird in einer Workflow-Datei eine weitere Tool-Version nach demselben Muster (`NAME_VERSION: "x.y.z"`) gepinnt, muss hier ein passender Eintrag ergänzt werden, sonst bleibt sie von Renovate unbemerkt veraltet. diff --git a/README.md b/README.md index e3fcbcf..07d4880 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ [![Main Release & Publish](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions/workflows/main.yaml/badge.svg?branch=main)](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions?workflow=main.yaml) [![Testing Build, Publish & Preview Release](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions/workflows/testing.yaml/badge.svg?branch=testing)](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions?workflow=testing.yaml) +[![Security Scans](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions/workflows/security-scan.yaml/badge.svg?branch=main)](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions?workflow=security-scan.yaml) +[![TruffleHog Secret Scan](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions/workflows/trufflehog-scan.yaml/badge.svg?branch=main)](https://gitea.creative-dragonslayer.de/Linuxapps/MirrorPackage/actions?workflow=trufflehog-scan.yaml) Automatisiertes Werkzeug zum Extrahieren, Herunterladen und Spiegeln vorkompilierter Linux-Pakete aus GitHub-Releases in eine selbstgehostete Gitea- / Forgejo-Paket-Registry. @@ -202,8 +204,12 @@ services: │ └── config.toml # Linker- & Cargo-Konfiguration ├── .gitea/ │ └── workflows/ -│ ├── main.yaml # CI/CD: Release, Pakete & Container (Stable) -│ └── testing.yaml # CI/CD: Preview, Pakete & Container (Testing) +│ ├── main.yaml # CI/CD: Release, Pakete & Container (Stable) +│ ├── testing.yaml # CI/CD: Preview, Pakete & Container (Testing) +│ ├── unit-tests.yaml # CI: cargo test bei PRs gegen testing +│ ├── security-scan.yaml # CI: Trivy & OSV-Scanner +│ ├── trufflehog-scan.yaml # CI: TruffleHog Secret-Scanning +│ └── renovate.yaml # CI: automatisierte Abhängigkeits-Updates (Renovate) ├── scripts/ │ ├── get-build-number.py # Dynamische Ermittlung der Build-/Revisionsnummer │ └── package-arch.py # Erstellung nativer Arch Linux-Pakete @@ -223,6 +229,7 @@ services: ├── Dockerfile # Gehärtetes, minimales Runtime-Container-Image ├── docker-compose.example.yml # Beispielkonfiguration für Docker Compose ├── Cargo.toml # Projekt-Manifest und Paketierungs-Metadaten +├── renovate.json # Renovate-Konfiguration für automatisierte Abhängigkeits-Updates ├── LICENSE # GPL-3.0-or-later Lizenztext ├── AGENTS.md # Agenten- & Entwickler-Richtlinien └── README.md # Projektdokumentation @@ -251,6 +258,15 @@ cargo build --release --- +## CI/CD & Contributing + +- **Branch-Flow**: Änderungen durchlaufen `dev` → `testing` → `main`, jeweils per Merge (nie direkt gepusht). +- **Pull Requests gegen `testing`** lösen automatisch `cargo test` aus. +- **Sicherheits-Scans** (Trivy, OSV-Scanner, TruffleHog) laufen bei jedem Push auf `main`/`testing`/`dev` sowie bei jedem Pull Request; Funde werden als Gitea-Issue gemeldet. +- **Abhängigkeits-Updates** werden automatisiert über [Renovate](https://docs.renovatebot.com/) als PRs gegen `dev` vorgeschlagen. + +--- + ## Lizenz Dieses Projekt ist unter der [GPL-3.0-or-later](LICENSE)-Lizenz lizenziert. From 7ee0c2d27247e69ae49f94667fbc0beb669f1934 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Thu, 10 Sep 2026 23:02:25 +0200 Subject: [PATCH 03/12] 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} From b8a4d2d665dccbbdc25480ab6493d62bcaa4807f Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Thu, 10 Sep 2026 23:04:24 +0200 Subject: [PATCH 04/12] Docs: TruffleHog-Push-Trigger-Scope in AGENTS.md/README.md korrigiert Aus dem /code-review-Lauf: Beide Dokumente behaupteten, die Security-Scans liefen nur bei Push auf main/testing/dev. Das stimmt fuer security-scan.yaml, aber trufflehog-scan.yaml hat keinen branches-Filter und laeuft tatsaechlich bei Push auf jeden Branch. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Kh9v73QApBwJj96w6A8R55 --- AGENTS.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 282d51f..a804b3c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -130,7 +130,7 @@ Promotion-Flow: `dev` → `testing` → `main`, ausschließlich per Merge (nie d - `pull_request` mit Ziel-Branch `testing` (`unit-tests.yaml`): führt `cargo test` aus (`types: opened, synchronize, reopened`). - `push` auf `main` (`main.yaml`): Baut Binaries für alle 3 Architekturen, baut `.deb`, `.rpm` und `.pkg.tar.zst`, lädt sie in die Gitea Package Registry hoch, erstellt ein Gitea Release `v` und baut/veröffentlicht das Docker-Container-Image mit den Tags `:latest`, `:`, `:v` und `:.`. - `push` auf `testing` (`testing.yaml`): Baut Binaries & Pakete für den `testing`-Kanal, erstellt ein Pre-Release `v-preview` und baut/veröffentlicht das Docker-Container-Image ausschließlich mit eindeutigen Testing-Tags (`:testing`, `:-preview`, `:-testing`, `:-preview.`, `:testing-`). Der Tag `:latest` ist strikt dem `main`-Workflow vorbehalten. -- `push`/`pull_request`/wöchentlich (`security-scan.yaml`, `trufflehog-scan.yaml`): Trivy (vuln/secret/misconfig) & OSV-Scanner bzw. TruffleHog laufen auf `main`/`testing`/`dev` sowie bei jedem PR; Funde werden per `scripts/report-security-issue.py` als Gitea-Issue gemeldet. +- `push`/`pull_request`/wöchentlich (`security-scan.yaml`, `trufflehog-scan.yaml`): Trivy (vuln/secret/misconfig) & OSV-Scanner laufen bei Push auf `main`/`testing`/`dev` sowie bei jedem PR; TruffleHog hat **keinen** `branches`-Filter und läuft bei Push auf **jeden** Branch (zusätzlich bei jedem PR). Funde werden per `scripts/report-security-issue.py` als Gitea-Issue gemeldet. - wöchentlich, `workflow_dispatch` (`renovate.yaml`): Renovate (containerisiert via `ghcr.io/renovatebot/renovate`) prüft Dependency-Updates, siehe 5.5. ### 5.2 Caching (`actions/cache@v6`) diff --git a/README.md b/README.md index 07d4880..0b82cae 100644 --- a/README.md +++ b/README.md @@ -262,7 +262,7 @@ cargo build --release - **Branch-Flow**: Änderungen durchlaufen `dev` → `testing` → `main`, jeweils per Merge (nie direkt gepusht). - **Pull Requests gegen `testing`** lösen automatisch `cargo test` aus. -- **Sicherheits-Scans** (Trivy, OSV-Scanner, TruffleHog) laufen bei jedem Push auf `main`/`testing`/`dev` sowie bei jedem Pull Request; Funde werden als Gitea-Issue gemeldet. +- **Sicherheits-Scans**: Trivy & OSV-Scanner laufen bei Push auf `main`/`testing`/`dev` sowie bei jedem Pull Request; TruffleHog läuft bei Push auf **jeden** Branch (kein `branches`-Filter) sowie ebenfalls bei jedem Pull Request. Funde werden als Gitea-Issue gemeldet. - **Abhängigkeits-Updates** werden automatisiert über [Renovate](https://docs.renovatebot.com/) als PRs gegen `dev` vorgeschlagen. --- From 9c14d965dba43f59a4cfce38f983897bab69fad2 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Thu, 10 Sep 2026 23:21:29 +0200 Subject: [PATCH 05/12] =?UTF-8?q?Fix:=20Zus=C3=A4tzliche=20Pr=C3=BCfung=20?= =?UTF-8?q?auf=20leere=20Umgebungsvariablen=20in=20report-security-issue.p?= =?UTF-8?q?y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/report-security-issue.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/report-security-issue.py b/scripts/report-security-issue.py index 5641d7e..1518b86 100644 --- a/scripts/report-security-issue.py +++ b/scripts/report-security-issue.py @@ -253,8 +253,8 @@ 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.get("GITEA_URL", "").rstrip("/") - repo = os.environ.get("REPO", "") + gitea_url = os.environ.get("GITEA_URL", "").strip().rstrip("/") + repo = os.environ.get("REPO", "").strip() token = os.environ.get("TOKEN", "").strip() run_url = os.environ.get("RUN_URL", "") osv_exit = int(os.environ.get("OSV_EXIT", "0")) @@ -263,8 +263,9 @@ def main(): findings = sort_findings(load_trivy(trivy_path) + load_osv(osv_path) + load_trufflehog(trufflehog_path)) print_summary(findings) - if not token: - print("TOKEN nicht gesetzt oder leer – überspringe Gitea-Issue-Synchronisation.") + if not token or not gitea_url or not repo: + missing = [name for name, val in [("TOKEN", token), ("GITEA_URL", gitea_url), ("REPO", repo)] if not val] + print(f"{', '.join(missing)} nicht gesetzt oder leer – überspringe Gitea-Issue-Synchronisation.") else: open_issue = find_open_issue(token, gitea_url, repo) From 10a3ae0bf73ca3d16e342e14794840e337a71931 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Fri, 11 Sep 2026 17:16:32 +0200 Subject: [PATCH 06/12] Fix: Renovate-Authentifizierung und Custom-Cargo-Registry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Renovate-Workflow: Host in RENOVATE_HOST_RULES statt hartkodiert über die bereits genutzte server_url-Expression bezogen - GITHUB_COM_TOKEN (aus neuem Secret GH_RENOVATE_TOKEN) ergänzt, damit Renovate GitHub-gehostete Dependencies authentifiziert statt rate-limitiert abfragt - allowCustomCrateRegistries in renovate.json aktiviert, da sonst Lookups für die eigenen Cargo-Pakete (config-ctdra, logger-ctdra) aus der Gitea-Registry fehlschlagen Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01E7r1oHC5ezNRnDuneTRCtN --- .gitea/workflows/renovate.yaml | 3 ++- AGENTS.md | 1 + renovate.json | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/renovate.yaml b/.gitea/workflows/renovate.yaml index 9fd8195..3be160c 100644 --- a/.gitea/workflows/renovate.yaml +++ b/.gitea/workflows/renovate.yaml @@ -21,5 +21,6 @@ jobs: RENOVATE_AUTODISCOVER: "false" RENOVATE_GIT_AUTHOR: "Renovate Bot " RENOVATE_HOST_RULES: >- - [{"hostType":"cargo","matchHost":"gitea.creative-dragonslayer.de","token":"${{ secrets.RENOVATE_TOKEN }}"}] + [{"hostType":"cargo","matchHost":"${{ gitea.server_url || github.server_url }}","token":"${{ secrets.RENOVATE_TOKEN }}"}] + GITHUB_COM_TOKEN: ${{ secrets.GH_RENOVATE_TOKEN }} LOG_LEVEL: info diff --git a/AGENTS.md b/AGENTS.md index a804b3c..5c128d2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -148,6 +148,7 @@ Pro CI-Lauf wird genau **eine** Build-Nummer ermittelt und identisch an `cargo d - `PACKAGE_TOKEN` (bzw. Fallback-Token-Namen wie `RELEASE_TOKEN`, `GITEA_TOKEN`) wird für API-Zugriffe auf Gitea Packages, Container Registry und Releases verwendet. - `SECURITY_TOKEN` für die Security-Scan-Workflows (Gitea-Issue-Erstellung). - `RENOVATE_TOKEN` für den Renovate-Workflow. +- `GH_RENOVATE_TOKEN` (optional, Renovate-Workflow, als `GITHUB_COM_TOKEN` an Renovate durchgereicht) – GitHub-PAT (Public-Repo-Read genügt), damit Renovate Release-Infos für GitHub-gehostete Dependencies (u.a. `github-actions`-Manager) authentifiziert statt rate-limitiert abfragt. ### 5.5 Renovate (`renovate.json`) - `baseBranches: ["dev"]` – Renovate liest Dependency-Dateien ausschließlich von `dev` und öffnet PRs nur dort, passend zum `dev → testing → main`-Promotion-Flow. Die Konfigurationsdatei selbst muss trotzdem über den Gitea-Default-Branch auffindbar sein. diff --git a/renovate.json b/renovate.json index f6417c7..9f7ce67 100644 --- a/renovate.json +++ b/renovate.json @@ -4,6 +4,7 @@ "timezone": "Europe/Berlin", "schedule": ["before 6am on monday"], "baseBranches": ["dev"], + "allowCustomCrateRegistries": true, "packageRules": [ { "matchFileNames": [".gitea/workflows/**"], From 65c115932f3c1b3164209f94e7527a955eab013d Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Fri, 11 Sep 2026 17:58:24 +0200 Subject: [PATCH 07/12] =?UTF-8?q?Fix:=20Renovate-CI-Lauf=20auf=20st=C3=BCn?= =?UTF-8?q?dlich=20statt=20w=C3=B6chentlich=20erh=C3=B6ht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beschleunigt Renovates Reaktion auf Dependency-Dashboard-Checkboxen (die den in renovate.json gesetzten wöchentlichen Update-Schedule ohnehin umgehen) von bis zu einer Woche auf bis zu einer Stunde. Tatsächliche neue Update-PRs entstehen weiterhin nur innerhalb des renovate.json-Schedules (Montag vor 6 Uhr). Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01E7r1oHC5ezNRnDuneTRCtN --- .gitea/workflows/renovate.yaml | 2 +- AGENTS.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/renovate.yaml b/.gitea/workflows/renovate.yaml index 3be160c..4c7e7ae 100644 --- a/.gitea/workflows/renovate.yaml +++ b/.gitea/workflows/renovate.yaml @@ -2,7 +2,7 @@ name: Renovate on: schedule: - - cron: "0 4 * * 1" + - cron: "0 * * * *" workflow_dispatch: jobs: diff --git a/AGENTS.md b/AGENTS.md index 5c128d2..83ac0a6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -131,7 +131,7 @@ Promotion-Flow: `dev` → `testing` → `main`, ausschließlich per Merge (nie d - `push` auf `main` (`main.yaml`): Baut Binaries für alle 3 Architekturen, baut `.deb`, `.rpm` und `.pkg.tar.zst`, lädt sie in die Gitea Package Registry hoch, erstellt ein Gitea Release `v` und baut/veröffentlicht das Docker-Container-Image mit den Tags `:latest`, `:`, `:v` und `:.`. - `push` auf `testing` (`testing.yaml`): Baut Binaries & Pakete für den `testing`-Kanal, erstellt ein Pre-Release `v-preview` und baut/veröffentlicht das Docker-Container-Image ausschließlich mit eindeutigen Testing-Tags (`:testing`, `:-preview`, `:-testing`, `:-preview.`, `:testing-`). Der Tag `:latest` ist strikt dem `main`-Workflow vorbehalten. - `push`/`pull_request`/wöchentlich (`security-scan.yaml`, `trufflehog-scan.yaml`): Trivy (vuln/secret/misconfig) & OSV-Scanner laufen bei Push auf `main`/`testing`/`dev` sowie bei jedem PR; TruffleHog hat **keinen** `branches`-Filter und läuft bei Push auf **jeden** Branch (zusätzlich bei jedem PR). Funde werden per `scripts/report-security-issue.py` als Gitea-Issue gemeldet. -- wöchentlich, `workflow_dispatch` (`renovate.yaml`): Renovate (containerisiert via `ghcr.io/renovatebot/renovate`) prüft Dependency-Updates, siehe 5.5. +- stündlich, `workflow_dispatch` (`renovate.yaml`): Renovate (containerisiert via `ghcr.io/renovatebot/renovate`) prüft Dependency-Updates, siehe 5.5. Der stündliche CI-Lauf steuert nur, wie schnell Renovate reagiert (z.B. auf Dependency-Dashboard-Checkboxen); tatsächliche neue Update-PRs entstehen weiterhin nur innerhalb des in `renovate.json` gesetzten `schedule` (Montag vor 6 Uhr). ### 5.2 Caching (`actions/cache@v6`) `main.yaml`/`testing.yaml` cachen mehrere Verzeichnisse, um wiederholte Cross-Compile-Builds zu beschleunigen: From 113c5d21208422658a280236a582bd86809ba845 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 11 Sep 2026 16:00:16 +0000 Subject: [PATCH 08/12] chore(deps): update rust crate reqwest to v0.13.5 --- Cargo.lock | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8e147db..3bb0597 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -93,6 +93,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "bitflags" version = "2.13.1" @@ -316,7 +322,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc 0.2.189", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -565,7 +571,7 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-util", @@ -1035,7 +1041,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -1090,11 +1096,11 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029" dependencies = [ - "base64", + "base64 0.23.1", "bytes", "encoding_rs", "futures-core", @@ -1214,7 +1220,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -1892,7 +1898,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] From dcc781250153725a01c02cbd363fb73a588aadb3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 11 Sep 2026 16:00:22 +0000 Subject: [PATCH 09/12] chore(deps): update gitea actions --- .gitea/workflows/main.yaml | 2 +- .gitea/workflows/renovate.yaml | 2 +- .gitea/workflows/testing.yaml | 2 +- .gitea/workflows/unit-tests.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitea/workflows/main.yaml b/.gitea/workflows/main.yaml index c95947a..b903d4f 100644 --- a/.gitea/workflows/main.yaml +++ b/.gitea/workflows/main.yaml @@ -18,7 +18,7 @@ jobs: uses: actions/checkout@v7 - name: Install Rust Toolchain - uses: actions-rust-lang/setup-rust-toolchain@v1 + uses: actions-rust-lang/setup-rust-toolchain@v2 with: toolchain: stable cache: false diff --git a/.gitea/workflows/renovate.yaml b/.gitea/workflows/renovate.yaml index 3be160c..cade954 100644 --- a/.gitea/workflows/renovate.yaml +++ b/.gitea/workflows/renovate.yaml @@ -9,7 +9,7 @@ jobs: renovate: name: Dependency-Updates prüfen & Pull Requests erstellen runs-on: ubuntu-latest - container: ghcr.io/renovatebot/renovate:44.79.2 + container: ghcr.io/renovatebot/renovate:44.82.0 steps: - name: Renovate ausführen run: renovate diff --git a/.gitea/workflows/testing.yaml b/.gitea/workflows/testing.yaml index c551cdf..dbdcc45 100644 --- a/.gitea/workflows/testing.yaml +++ b/.gitea/workflows/testing.yaml @@ -18,7 +18,7 @@ jobs: uses: actions/checkout@v7 - name: Install Rust Toolchain - uses: actions-rust-lang/setup-rust-toolchain@v1 + uses: actions-rust-lang/setup-rust-toolchain@v2 with: toolchain: stable cache: false diff --git a/.gitea/workflows/unit-tests.yaml b/.gitea/workflows/unit-tests.yaml index 047eb94..7703f7f 100644 --- a/.gitea/workflows/unit-tests.yaml +++ b/.gitea/workflows/unit-tests.yaml @@ -18,7 +18,7 @@ jobs: uses: actions/checkout@v7 - name: Install Rust Toolchain - uses: actions-rust-lang/setup-rust-toolchain@v1 + uses: actions-rust-lang/setup-rust-toolchain@v2 with: toolchain: stable cache: false From 5f1d67748524f9c971a718b76190a204e11408f0 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Fri, 11 Sep 2026 22:12:42 +0200 Subject: [PATCH 10/12] Feat: Aktualisiert `renovate.json` auf die neuste Version. Co-Authored-By: Renovate-Bot --- renovate.json | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/renovate.json b/renovate.json index 9f7ce67..717bd4d 100644 --- a/renovate.json +++ b/renovate.json @@ -3,8 +3,9 @@ "extends": ["config:recommended"], "timezone": "Europe/Berlin", "schedule": ["before 6am on monday"], - "baseBranches": ["dev"], - "allowCustomCrateRegistries": true, + "baseBranchPatterns": [ + "dev" + ], "packageRules": [ { "matchFileNames": [".gitea/workflows/**"], @@ -28,7 +29,9 @@ "customManagers": [ { "customType": "regex", - "fileMatch": ["^\\.gitea/workflows/.+\\.ya?ml$"], + "managerFilePatterns": [ + "/^\\.gitea/workflows/.+\\.ya?ml$/" + ], "matchStrings": [ "TRIVY_VERSION:\\s*\"(?[^\"]+)\"" ], @@ -38,7 +41,9 @@ }, { "customType": "regex", - "fileMatch": ["^\\.gitea/workflows/.+\\.ya?ml$"], + "managerFilePatterns": [ + "/^\\.gitea/workflows/.+\\.ya?ml$/" + ], "matchStrings": [ "OSV_SCANNER_VERSION:\\s*\"(?[^\"]+)\"" ], @@ -48,7 +53,9 @@ }, { "customType": "regex", - "fileMatch": ["^\\.gitea/workflows/.+\\.ya?ml$"], + "managerFilePatterns": [ + "/^\\.gitea/workflows/.+\\.ya?ml$/" + ], "matchStrings": [ "TRUFFLEHOG_VERSION:\\s*\"(?[^\"]+)\"" ], @@ -58,7 +65,9 @@ }, { "customType": "regex", - "fileMatch": ["^\\.gitea/workflows/.+\\.ya?ml$"], + "managerFilePatterns": [ + "/^\\.gitea/workflows/.+\\.ya?ml$/" + ], "matchStrings": [ "CARGO_BINSTALL_VERSION:\\s*\"(?[^\"]+)\"" ], @@ -68,7 +77,9 @@ }, { "customType": "regex", - "fileMatch": ["^\\.gitea/workflows/.+\\.ya?ml$"], + "managerFilePatterns": [ + "/^\\.gitea/workflows/.+\\.ya?ml$/" + ], "matchStrings": [ "CARGO_DEB_VERSION:\\s*\"(?[^\"]+)\"" ], @@ -77,7 +88,9 @@ }, { "customType": "regex", - "fileMatch": ["^\\.gitea/workflows/.+\\.ya?ml$"], + "managerFilePatterns": [ + "/^\\.gitea/workflows/.+\\.ya?ml$/" + ], "matchStrings": [ "CARGO_GENERATE_RPM_VERSION:\\s*\"(?[^\"]+)\"" ], From 12828d45e1a920f0d324aea6c74e769a98a70dd9 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Fri, 11 Sep 2026 22:14:27 +0200 Subject: [PATCH 11/12] Feat: Hebt Version auf 1.0.4 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3bb0597..e2f9dd9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -872,7 +872,7 @@ dependencies = [ [[package]] name = "mirror-package" -version = "1.0.3" +version = "1.0.4" dependencies = [ "anyhow", "clap", diff --git a/Cargo.toml b/Cargo.toml index 6c751d6..1fe505c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mirror-package" -version = "1.0.3" +version = "1.0.4" edition = "2024" authors = ['DragonSlayer_14'] readme = "README.md" From 2a059466b3fbf3faf231fc8d0ba428d4a3d2ee43 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Fri, 11 Sep 2026 22:17:06 +0200 Subject: [PATCH 12/12] Fix: Korrigiert E-Mail-Adresse des Renovate-Bots im Workflow --- .gitea/workflows/renovate.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/renovate.yaml b/.gitea/workflows/renovate.yaml index 8949c79..cd3e060 100644 --- a/.gitea/workflows/renovate.yaml +++ b/.gitea/workflows/renovate.yaml @@ -19,7 +19,7 @@ jobs: RENOVATE_TOKEN: ${{ secrets.RENOVATE_TOKEN }} RENOVATE_REPOSITORIES: ${{ gitea.repository || github.repository }} RENOVATE_AUTODISCOVER: "false" - RENOVATE_GIT_AUTHOR: "Renovate Bot " + RENOVATE_GIT_AUTHOR: "Renovate Bot " RENOVATE_HOST_RULES: >- [{"hostType":"cargo","matchHost":"${{ gitea.server_url || github.server_url }}","token":"${{ secrets.RENOVATE_TOKEN }}"}] GITHUB_COM_TOKEN: ${{ secrets.GH_RENOVATE_TOKEN }}