Sebastien Rousseau

LIBMAKE

LibMake: generátor lešení pro knihovny v Rustu

LibMake: generátor kódu v Rustu, který od prvního dne vynucuje osvědčené postupy

4 min čtení
Banner for: LibMake: generátor lešení pro knihovny v Rustu

LibMake ⧉ je open-source CLI a knihovna v Rustu, která z jediného vyvolání vygeneruje kompletní lešení projektu knihovny. Zaměřuje se na mezeru mezi cargo new --lib (které vytvoří pouze minimální Cargo.toml a src/lib.rs) a nastavením knihovny připraveným pro produkci (které vyžaduje ruční doplnění dokumentačních komentářů, CI, testovacích sad, struktury benchmarků, souboru CONTRIBUTING.md a licenčních souborů).

Tento článek popisuje, co LibMake generuje, jak fungují režimy konfiguračního souboru a CLI, strukturu generovaného CI a systém šablonování.

Instalace a základní použití

LibMake je publikován na crates.io a instaluje se přes Cargo:

cargo install libmake

Minimální vyvolání CLI vygeneruje pojmenovanou knihovnu v aktuálním adresáři:

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"

Mezi další volitelné přepínače patří --categories, --keywords, --homepage, --documentation, --readme a --build.

Režim konfiguračního souboru

Pro týmové použití lze všechny přepínače CLI vyjádřit v konfiguračním souboru TOML:

# 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"]

Vyvolá se takto:

libmake --config libmake.toml

LibMake přijímá také konfigurační formáty JSON, YAML a CSV prostřednictvím přepínačů --config-json, --config-yaml a --config-csv. Zařazení souboru libmake.toml do kořene repozitáře poskytne každému přispěvateli reprodukovatelný výchozí stav lešení a změny v konfiguraci šablon jsou viditelné v Git diffech.

Struktura generovaného projektu

Vyvolání LibMake vytvoří následující rozvržení:

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

Generovaný src/lib.rs obsahuje dokumentační komentář na úrovni crate, #![deny(missing_docs)], #![doc = include_str!("../README.md")] pro zahrnutí souboru README do rustdoc a veřejný typ jako zárodek s přidruženým dokumentačním komentářem. Tyto volby odpovídají požadavku Rust API Guidelines, aby všechny veřejné položky měly dokumentaci.

Generovaný benches/lib_benchmarks.rs používá Criterion.rs a vyžaduje přidání criterion jako vývojové závislosti, kterou LibMake automaticky vloží do Cargo.toml.

Pracovní postup CI v GitHub Actions

Generovaný .github/workflows/release.yml spouští při každém pushi a pull requestu pět úloh:

Úloha Toolchain Co kontroluje
test stable, beta, nightly (matrix) cargo test --all-features
clippy stable cargo clippy -- -D warnings
fmt stable cargo fmt --check
audit stable cargo audit (cargo-audit se instaluje v úloze)
doc stable cargo doc --no-deps (selže při chybějící dokumentaci)

Úloha nightly má continue-on-error: true, takže regrese v nightly neblokuje slučování, a přesto se selhání v běhu pracovního postupu zobrazí.

Šablonování pomocí Tera

LibMake používá šablonovací engine Tera, syntaxi podobnou Jinja2 pro Rust, k vykreslení všech generovaných souborů. Každá šablona dostává jako kontext celou konfigurační strukturu:

{{ name }}            → my_library
{{ author }}          → Jane Smith
{{ edition }}         → 2021
{{ description }}     → A Rust library for doing useful things

Vlastní adresáře se šablonami jsou podporovány přes přepínač --template:

libmake --config libmake.toml --template ./my_templates/

Vlastní adresář musí zrcadlit výchozí strukturu šablon (stejné názvy souborů). Jakýkoli soubor přítomný ve vlastním adresáři přepíše odpovídající vestavěnou šablonu; soubory, které ve vlastním adresáři chybí, se vrátí k vestavěné verzi. To umožňuje částečné přepisy, například nahrazení pouze šablony pracovního postupu CI při zachování výchozích šablon src/lib.rs a Cargo.toml.

Často kladené otázky

Čím se LibMake liší od cargo new --lib? cargo new --lib vytvoří minimální projekt pouze se soubory Cargo.toml a src/lib.rs (obsahující jediný blok #[cfg(test)]). LibMake vygeneruje úplnou strukturu: integrační testy, benchmarky, CI, CONTRIBUTING.md, soubory s duální licencí a řádně zdokumentovaný src/lib.rs, nakonfigurovanou se skutečnými metadaty projektu namísto zástupných hodnot.

Lze LibMake použít s existujícím pracovním prostorem Cargo? LibMake generuje samostatný adresář crate. Chcete-li generovaný crate přidat do existujícího pracovního prostoru, přidejte výstupní cestu do pole members pracovního prostoru v kořenovém Cargo.toml. LibMake neupravuje existující soubory pracovního prostoru.

Mohu aktualizovat šablony lešení po počátečním vygenerování? LibMake generuje soubory jednorázově; dříve vygenerované projekty nesleduje ani neaktualizuje. Pro převzetí aktualizovaných šablon je doporučeným postupem znovu spustit LibMake do dočasného adresáře, výsledek porovnat (diff) s existujícím crate a požadované změny uplatnit výběrově.

Které edice Rustu a hodnoty MSRV LibMake podporuje? LibMake přijímá pro --edition a --rustversion jakýkoli řetězec a zapisuje hodnoty přímo do Cargo.toml. Neověřuje, zda je zadaná edice nebo MSRV skutečnou verzí Rustu, takže za dodání správných hodnot odpovídá volající.

Reference

  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/

Naposledy revidováno .

Publikovat tento článek jinde

Kopírovat formát pro Medium

# LibMake: generátor lešení pro knihovny v Rustu — Sebastien Rousseau

> Originally published at [https://sebastienrousseau.com/cs/2023-10-26-libmake-generator-kodu-pro-rust-knihovny/](https://sebastienrousseau.com/cs/2023-10-26-libmake-generator-kodu-pro-rust-knihovny/)

LibMake je nástroj CLI v Rustu, který z jediného příkazu nebo verzovaného konfiguračního souboru TOML/YAML vygeneruje kompletní lešení knihovny: Cargo.toml, src/lib.rs se šablonami dokumentace, testovací a benchmarkové sady a CI v GitHub Actions.

Read the full article on sebastienrousseau.com: https://sebastienrousseau.com/cs/2023-10-26-libmake-generator-kodu-pro-rust-knihovny/

Kopírovat formát pro Mastodon

LibMake: generátor lešení pro knihovny v Rustu — Sebastien Rousseau

LibMake je nástroj CLI v Rustu, který z jediného příkazu nebo verzovaného konfiguračního souboru TOML/YAML vygeneruje kompletní lešení knihovny: Cargo.toml, src/lib.rs se šablonami dokumentace, testovací a benchmarkové sady a CI v GitHub Actions.

https://sebastienrousseau.com/cs/2023-10-26-libmake-generator-kodu-pro-rust-knihovny/

Zkopírovat formátované pro LinkedIn

LibMake: generátor lešení pro knihovny v Rustu — Sebastien Rousseau

LibMake je nástroj CLI v Rustu, který z jediného příkazu nebo verzovaného konfiguračního souboru TOML/YAML vygeneruje kompletní lešení knihovny: Cargo.toml, src/lib.rs se šablonami dokumentace, testovací a benchmarkové sady a CI v GitHub Actions.

Zde jsou klíčové strategické poznatky:

- Instalace a základní použití. LibMake je publikován na crates.io a instaluje se přes Cargo:.
- Režim konfiguračního souboru. Pro týmové použití lze všechny přepínače CLI vyjádřit v konfiguračním souboru TOML:.
- Struktura generovaného projektu. Vyvolání LibMake vytvoří následující rozvržení:.
- Pracovní postup CI v GitHub Actions. Generovaný .github/workflows/release.yml spouští při každém pushi a pull requestu pět úloh:.

Jaký je přístup vaší organizace k výzvám popsaným v tomto článku?

→ https://sebastienrousseau.com/cs/2023-10-26-libmake-generator-kodu-pro-rust-knihovny/

#Libmake #GenerátorKóduVRustu #LešeníCargo #ŠablonaKnihovnyVRustu #ŠablonováníTera

Sebastien Rousseau | CC-BY-4.0
Citovat tento článek

LibMake: generátor lešení pro knihovny v Rustu — Sebastien Rousseau

LibMake je nástroj CLI v Rustu, který z jediného příkazu nebo verzovaného konfiguračního souboru TOML/YAML vygeneruje kompletní lešení knihovny: Cargo.toml, src/lib.rs se šablonami dokumentace, testovací a benchmarkové sady a CI v GitHub Actions.

BibTeX

@online{rousseau2023libmake,
  author  = {Rousseau, Sebastien},
  title   = {{LibMake: generátor lešení pro knihovny v Rustu — Sebastien Rousseau}},
  year    = {2023},
  url     = {https://sebastienrousseau.com/cs/2023-10-26-libmake-generator-kodu-pro-rust-knihovny/},
  urldate = {2023}
}

RIS

TY  - GEN
AU  - Rousseau, Sebastien
TI  - LibMake: generátor lešení pro knihovny v Rustu — Sebastien Rousseau
PY  - 2023
UR  - https://sebastienrousseau.com/cs/2023-10-26-libmake-generator-kodu-pro-rust-knihovny/
ER  -

Vancouver

Rousseau S. LibMake: generátor lešení pro knihovny v Rustu — Sebastien Rousseau. sebastienrousseau.com. 2023 Oct 26. Available from: https://sebastienrousseau.com/cs/2023-10-26-libmake-generator-kodu-pro-rust-knihovny/

Chicago

Rousseau, Sebastien. "LibMake: generátor lešení pro knihovny v Rustu — Sebastien Rousseau." sebastienrousseau.com. October 26, 2023. https://sebastienrousseau.com/cs/2023-10-26-libmake-generator-kodu-pro-rust-knihovny/.

APA

Rousseau, S. (2023, October 26). LibMake: generátor lešení pro knihovny v Rustu — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/cs/2023-10-26-libmake-generator-kodu-pro-rust-knihovny/

Znovu publikovat tento článek

LibMake: generátor lešení pro knihovny v Rustu — Sebastien Rousseau

LibMake je nástroj CLI v Rustu, který z jediného příkazu nebo verzovaného konfiguračního souboru TOML/YAML vygeneruje kompletní lešení knihovny: Cargo.toml, src/lib.rs se šablonami dokumentace, testovací a benchmarkové sady a CI v GitHub Actions.

Tento článek je licencován pod Creative Commons Attribution 4.0 International. Při opětovné publikaci uveďte odkaz na kanonickou URL.

LibMake: generátor lešení pro knihovny v Rustu — Sebastien Rousseau

LibMake je nástroj CLI v Rustu, který z jediného příkazu nebo verzovaného konfiguračního souboru TOML/YAML vygeneruje kompletní lešení knihovny: Cargo.toml, src/lib.rs se šablonami dokumentace, testovací a benchmarkové sady a CI v GitHub Actions.

Originally published at https://sebastienrousseau.com/cs/2023-10-26-libmake-generator-kodu-pro-rust-knihovny/ by Sebastien Rousseau.
Licensed under CC-BY-4.0.