Sebastien Rousseau

LIBMAKE

LibMake: scaffold-generator för Rust-bibliotek

LibMake: en Rust-kodgenerator som upprätthåller bästa praxis från dag ett.

4 min läsning
Banner for: LibMake: scaffold-generator för Rust-bibliotek

Gigantiska vita pelare.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

  1. Rousseau, S. LibMake: A code generator to reduce repetitive tasks and build high-quality Rust libraries. GitHub, 2023. https://github.com/sebastienrousseau/libmake
  2. The Rust Programming Language. Rust API Guidelines. GitHub, 2023. https://rust-lang.github.io/api-guidelines/
  3. The Cargo Book. Package Layout. The Rust Programming Language, 2023. https://doc.rust-lang.org/cargo/guide/project-layout.html
  4. 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.