.class="img-fluid clearfix"
LibMake ⧉ är ett Rust-CLI och bibliotek med öppen källkod som genererar en komplett projektstruktur för bibliotek från ett enda anrop. Verktyget riktar sig mot gapet mellan cargo new --lib (som endast skapar en minimal Cargo.toml och src/lib.rs) och en produktionsfärdig bibliotekskonfiguration (som kräver att man manuellt lägger till dokumentationskommentarer, CI, testramverk, benchmarkstruktur, CONTRIBUTING.md och licensfiler).
Denna artikel beskriver vad LibMake genererar, hur konfigurationsfils- och CLI-lägena fungerar, den genererade CI-strukturen samt mallsystemet.
Installation och grundläggande användning
LibMake publiceras på crates.io och installeras via Cargo:
cargo install libmake
Det minimala CLI-anropet genererar ett namngivet bibliotek i den aktuella katalogen:
libmake \
--author "Jane Smith" \
--email "jane@example.com" \
--name "my_library" \
--description "A Rust library for doing useful things" \
--version "0.1.0" \
--licence "MIT OR Apache-2.0" \
--repository "https://github.com/example/my_library" \
--rustversion "1.70.0" \
--edition "2021" \
--output "my_library"
Ytterligare valfria flaggor inkluderar --categories, --keywords, --homepage, --documentation, --readme och --build.
Konfigurationsfilsläge
För teamanvändning kan alla CLI-flaggor uttryckas i en TOML-konfigurationsfil:
# libmake.toml
author = "Jane Smith"
email = "jane@example.com"
name = "my_library"
description = "A Rust library for doing useful things"
version = "0.1.0"
licence = "MIT OR Apache-2.0"
repository = "https://github.com/example/my_library"
rustversion = "1.70.0"
edition = "2021"
output = "my_library"
categories = ["algorithms", "data-structures"]
keywords = ["rust", "library"]
Anropas som:
libmake --config libmake.toml
LibMake accepterar även konfigurationsformaten JSON, YAML och CSV via flaggorna --config-json, --config-yaml respektive --config-csv. Att checka in libmake.toml i repositoriets rot ger varje bidragsgivare en reproducerbar baslinje för strukturen, och ändringar i mallkonfigurationen syns i Git-diffar.
Genererad projektstruktur
Ett LibMake-anrop skapar följande layout:
my_library/
├── .github/
│ └── workflows/
│ └── release.yml # full CI matrix
├── benches/
│ └── lib_benchmarks.rs # Criterion benchmark stub
├── src/
│ └── lib.rs # doc-commented, deny(missing_docs)
├── tests/
│ └── lib_tests.rs # integration test stub
├── CONTRIBUTING.md
├── Cargo.toml # complete metadata
├── LICENSE-APACHE
├── LICENSE-MIT
└── README.md
Den genererade src/lib.rs innehåller en dokumentationskommentar på crate-nivå, #![deny(missing_docs)], #![doc = include_str!("../README.md")] för att inkludera README-filen i rustdoc, samt en publik stubbtyp med tillhörande dokumentationskommentar. Dessa val följer kravet i Rust API Guidelines på att alla publika objekt ska ha dokumentation.
Den genererade benches/lib_benchmarks.rs använder Criterion.rs och kräver att criterion läggs till som dev-dependency, vilket LibMake infogar i Cargo.toml automatiskt.
CI-arbetsflöde med GitHub Actions
Den genererade .github/workflows/release.yml kör fem jobb vid varje push och pull request:
| Jobb | Verktygskedja | Vad som kontrolleras |
|---|---|---|
test |
stable, beta, nightly (matris) | cargo test --all-features |
clippy |
stable | cargo clippy -- -D warnings |
fmt |
stable | cargo fmt --check |
audit |
stable | cargo audit (cargo-audit installeras i jobbet) |
doc |
stable | cargo doc --no-deps (misslyckas vid saknad dokumentation) |
Nightly-jobbet har continue-on-error: true så att en nightly-regression inte blockerar sammanslagningar, samtidigt som felet fortfarande syns i arbetsflödeskörningen.
Mallhantering med Tera
LibMake använder mallmotorn Tera, en Jinja2-liknande syntax för Rust, för att rendera alla genererade filer. Varje mall tar emot hela konfigurationsstrukturen som kontext:
{{ name }} → my_library
{{ author }} → Jane Smith
{{ edition }} → 2021
{{ description }} → A Rust library for doing useful things
Anpassade mallkataloger stöds via flaggan --template:
libmake --config libmake.toml --template ./my_templates/
Den anpassade katalogen måste spegla standardmallstrukturen (samma filnamn). Varje fil som finns i den anpassade katalogen åsidosätter motsvarande inbyggda mall; filer som inte finns i den anpassade katalogen faller tillbaka på den inbyggda versionen. Detta möjliggör partiella åsidosättanden, till exempel att endast ersätta CI-arbetsflödesmallen medan standardmallarna för src/lib.rs och Cargo.toml behålls.
Vanliga frågor
Hur skiljer sig LibMake från cargo new --lib?
cargo new --lib skapar ett minimalt projekt med endast Cargo.toml och src/lib.rs (som innehåller ett enda #[cfg(test)]-block). LibMake genererar hela strukturen (integrationstester, benchmarks, CI, CONTRIBUTING.md, dubbla licensfiler och en korrekt dokumenterad src/lib.rs), konfigurerad med projektets faktiska metadata i stället för platshållare.
Kan LibMake användas med ett befintligt Cargo-workspace?
LibMake genererar en fristående crate-katalog. För att lägga till den genererade craten i ett befintligt workspace lägger man till utdatasökvägen i arrayen members i rotens Cargo.toml. LibMake ändrar inte befintliga workspace-filer.
Kan jag uppdatera strukturmallarna efter den första genereringen? LibMake genererar filer en gång; verktyget spårar eller uppdaterar inte tidigare genererade projekt. För att ta till sig uppdaterade mallar är det rekommenderade tillvägagångssättet att köra LibMake på nytt i en temporär katalog och jämföra resultatet med den befintliga craten, och därefter selektivt tillämpa önskade ändringar.
Vilka Rust-utgåvor och MSRV-värden stöder LibMake?
LibMake accepterar valfri sträng för --edition och --rustversion och skriver värdena direkt till Cargo.toml. Verktyget validerar inte om den angivna utgåvan eller MSRV-värdet är en verklig Rust-version, så anroparen ansvarar för att ange korrekta värden.
Referenser
- Rousseau, S. LibMake: A code generator to reduce repetitive tasks and build high-quality Rust libraries. GitHub, 2023. https://github.com/sebastienrousseau/libmake
- The Rust Programming Language. Rust API Guidelines. GitHub, 2023. https://rust-lang.github.io/api-guidelines/
- The Cargo Book. Package Layout. The Rust Programming Language, 2023. https://doc.rust-lang.org/cargo/guide/project-layout.html
- Keats, V. et al. Tera: A template engine inspired by Jinja2 and Django templates. GitHub, 2023. https://keats.github.io/tera/
Senast granskad .
Återpublicera denna artikel
Kopiera format för Medium
# LibMake: scaffold-generator för Rust-bibliotek — Sebastien Rousseau > Originally published at [https://sebastienrousseau.com/sv/2023-10-26-libmake-kodgenerator-for-rust-bibliotek/](https://sebastienrousseau.com/sv/2023-10-26-libmake-kodgenerator-for-rust-bibliotek/) LibMake är ett Rust-CLI-verktyg som genererar en komplett biblioteksstruktur (Cargo.toml, src/lib.rs med dokumentationsmallar, test- och benchmarkramverk samt GitHub Actions-CI) från ett enda kommando eller en versionshanterad TOML/YAML-konfigurationsfil. Read the full article on sebastienrousseau.com: https://sebastienrousseau.com/sv/2023-10-26-libmake-kodgenerator-for-rust-bibliotek/
Kopiera format för Mastodon
LibMake: scaffold-generator för Rust-bibliotek — Sebastien Rousseau LibMake är ett Rust-CLI-verktyg som genererar en komplett biblioteksstruktur (Cargo.toml, src/lib.rs med dokumentationsmallar, test- och benchmarkramverk samt GitHub Actions-CI) från ett enda kommando eller en versionshanterad TOML/YAML-konfigurationsfil. https://sebastienrousseau.com/sv/2023-10-26-libmake-kodgenerator-for-rust-bibliotek/
Kopiera formaterat för LinkedIn
LibMake: scaffold-generator för Rust-bibliotek — Sebastien Rousseau LibMake är ett Rust-CLI-verktyg som genererar en komplett biblioteksstruktur (Cargo.toml, src/lib.rs med dokumentationsmallar, test- och benchmarkramverk samt GitHub Actions-CI) från ett enda kommando eller en versionshanterad TOML/YAML-konfigurationsfil. Här är de viktigaste strategiska lärdomarna: - Installation och grundläggande användning. LibMake publiceras på crates.io och installeras via Cargo:. - Konfigurationsfilsläge. För teamanvändning kan alla CLI-flaggor uttryckas i en TOML-konfigurationsfil:. - Genererad projektstruktur. Ett LibMake-anrop skapar följande layout:. - CI-arbetsflöde med GitHub Actions. Den genererade .github/workflows/release.yml kör fem jobb vid varje push och pull request:. Hur hanterar din organisation de utmaningar som beskrivs i denna artikel? → https://sebastienrousseau.com/sv/2023-10-26-libmake-kodgenerator-for-rust-bibliotek/ #Libmake #RustKodgenerator #CargoScaffold #RustBiblioteksmall #TeraMallar Sebastien Rousseau | CC-BY-4.0
Citera den här artikeln
LibMake: scaffold-generator för Rust-bibliotek — Sebastien Rousseau
LibMake är ett Rust-CLI-verktyg som genererar en komplett biblioteksstruktur (Cargo.toml, src/lib.rs med dokumentationsmallar, test- och benchmarkramverk samt GitHub Actions-CI) från ett enda kommando eller en versionshanterad TOML/YAML-konfigurationsfil.
BibTeX
@online{rousseau2023libmake,
author = {Rousseau, Sebastien},
title = {{LibMake: scaffold-generator för Rust-bibliotek — Sebastien Rousseau}},
year = {2023},
url = {https://sebastienrousseau.com/sv/2023-10-26-libmake-kodgenerator-for-rust-bibliotek/},
urldate = {2023}
}RIS
TY - GEN AU - Rousseau, Sebastien TI - LibMake: scaffold-generator för Rust-bibliotek — Sebastien Rousseau PY - 2023 UR - https://sebastienrousseau.com/sv/2023-10-26-libmake-kodgenerator-for-rust-bibliotek/ ER -
Vancouver
Rousseau S. LibMake: scaffold-generator för Rust-bibliotek — Sebastien Rousseau. sebastienrousseau.com. 2023 Oct 26. Available from: https://sebastienrousseau.com/sv/2023-10-26-libmake-kodgenerator-for-rust-bibliotek/
Chicago
Rousseau, Sebastien. "LibMake: scaffold-generator för Rust-bibliotek — Sebastien Rousseau." sebastienrousseau.com. October 26, 2023. https://sebastienrousseau.com/sv/2023-10-26-libmake-kodgenerator-for-rust-bibliotek/.
APA
Rousseau, S. (2023, October 26). LibMake: scaffold-generator för Rust-bibliotek — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/sv/2023-10-26-libmake-kodgenerator-for-rust-bibliotek/
Återpublicera den här artikeln
LibMake: scaffold-generator för Rust-bibliotek — Sebastien Rousseau
LibMake är ett Rust-CLI-verktyg som genererar en komplett biblioteksstruktur (Cargo.toml, src/lib.rs med dokumentationsmallar, test- och benchmarkramverk samt GitHub Actions-CI) från ett enda kommando eller en versionshanterad TOML/YAML-konfigurationsfil.
Den här artikeln är licensierad under Creative Commons Attribution 4.0 International. Återpublicering kräver attribution till den kanoniska URL:en.
LibMake: scaffold-generator för Rust-bibliotek — Sebastien Rousseau LibMake är ett Rust-CLI-verktyg som genererar en komplett biblioteksstruktur (Cargo.toml, src/lib.rs med dokumentationsmallar, test- och benchmarkramverk samt GitHub Actions-CI) från ett enda kommando eller en versionshanterad TOML/YAML-konfigurationsfil. Originally published at https://sebastienrousseau.com/sv/2023-10-26-libmake-kodgenerator-for-rust-bibliotek/ by Sebastien Rousseau. Licensed under CC-BY-4.0.