Reviewed-on: #10
program-ctdra
Eine schlanke, abhängigkeitsfreie Rust-Bibliothek zur einfachen und zuverlässigen Ermittlung des Programmnamens (Dateistamm der aktuellen ausführbaren Datei).
🚀 Übersicht & Features
- Einfache API:
program_name(): Ermittelt den Programmnamen mit sicherem Fallback ("app").program_name_or(fallback): Ermittelt den Programmnamen mit anpassbarem Fallback.try_program_name(): Gibt den Programmnamen alsOption<String>zurück.
- Zero Dependencies: Nutzt ausschließlich die Rust-Standardbibliothek (
std::env,std::path). - Rust Edition 2024: Moderner Rust-Standard mit optimierten Release-Profil-Einstellungen (
debug = "none"). - Vollständig getestet & dokumentiert: Mit Unit-Tests, Integrationstests und getesteten Rustdoc-Codebeispielen.
- Automatisierte CI/CD-Workflows (Gitea Actions):
- Testing-Pipeline (
testing-Branch): Baut, testet und erstellt automatisch ein Gitea Pre-Release (v<VERSION>-preview) inklusive.crate-Paket. - Main-Release-Pipeline (
main-Branch): Baut, testet, paketiert, veröffentlicht in der Gitea Cargo Package Registry und erstellt ein Gitea Release (v<VERSION>).
- Testing-Pipeline (
- GPL-3.0-or-later Lizenz: Freie Software unter der GNU General Public License v3.0 oder neuer.
📦 Installation & Einbindung
Um program-ctdra aus der Gitea Package Registry in einem Cargo-Projekt zu verwenden:
1. Registry konfigurieren
Füge die Gitea Package Registry zu deiner lokalen ~/.cargo/config.toml oder projektweiten .cargo/config.toml hinzu:
[registries.gitea]
index = "sparse+https://gitea.creative-dragonslayer.de/api/packages/Rust-Crates/cargo/"
2. Abhängigkeit in Cargo.toml deklarieren
[dependencies]
program-ctdra = { version = "1.0.0", registry = "gitea" }
💡 Anwendungsbeispiele
use program_ctdra::{program_name, program_name_or, try_program_name};
fn main() {
// 1. Standard-Aufruf mit Fallback "app"
let name = program_name();
println!("Aktuelles Programm: {name}");
// 2. Mit benutzerdefiniertem Fallback
let service_name = program_name_or("mein-dienst");
println!("Dienst-Name: {service_name}");
// 3. Optionale Ermittlung ohne Fallback
match try_program_name() {
Some(name) => println!("Executable-Name ermittelt: {name}"),
None => eprintln!("Konnte Programmnamen nicht ermitteln!"),
}
}
📁 Projektstruktur
.
├── .gitea/
│ └── workflows/
│ ├── main.yaml # CI/CD: Test, Check, Publish & Release für 'main'
│ └── testing.yaml # CI/CD: Test, Check & Pre-Release für 'testing'
├── .idea/ # Vorkonfigurierte JetBrains IDE Einstellungen
├── src/
│ └── lib.rs # Bibliotheks-Implementierung & Unit-Tests
├── tests/
│ └── integration_test.rs # Integrationstests für die öffentliche API
├── Cargo.lock
├── Cargo.toml # Crate-Manifest & Metadaten
├── LICENSE # GNU General Public License v3.0
├── AGENTS.md # Richtlinien und Kontext für KI-Agenten
└── README.md # Projektdokumentation
💻 Lokale Entwicklung & Validierung
Die gängigen Cargo-Befehle zur Entwicklung und Verifizierung:
-
Kompilierung prüfen:
cargo check --all-targets -
Tests ausführen (Unit-, Integrations- und Doc-Tests):
cargo test -
Linter & Code-Formatierung:
cargo clippy --all-targets -- -D warnings cargo fmt --check -
Crate lokal paketieren:
cargo package -
Dokumentation generieren:
cargo doc --no-deps --open
🔄 CI/CD & Branching-Workflow
| Branch | Trigger | Aktionen |
|---|---|---|
testing |
Push auf testing |
• cargo test• cargo check --all-targets• cargo package• Erstellt/Aktualisiert Pre-Release v<VERSION>-preview mit .crate-Asset |
main |
Push auf main |
• cargo test• cargo check --all-targets• cargo package• Veröffentlicht Crate in Gitea Package Registry • Erstellt/Aktualisiert Release v<VERSION> mit .crate-Asset |
Hinweis zur Versionierung: Die Versionsnummer wird automatisch aus
Cargo.toml(version = "...") ausgelesen. Vor einem Merge aufmainodertestingmuss die Version inCargo.tomlentsprechend SemVer angepasst werden.
📄 Lizenz
Dieses Projekt steht unter der GNU General Public License v3.0 or later (GPL-3.0-or-later).