Sebastien Rousseau

LIBMAKE

LibMake: Rust könyvtárváz-generátor

LibMake: Rust kódgenerátor, amely az első naptól kezdve érvényesíti a legjobb gyakorlatokat.

4 min read
Banner for: LibMake: Rust könyvtárváz-generátor

A LibMake ⧉ egy nyílt forráskódú Rust CLI és könyvtár, amely egyetlen hívásból teljes könyvtárprojekt-vázat generál. A cargo new --lib (amely csak egy minimális Cargo.toml és src/lib.rs fájlt hoz létre) és egy éles használatra kész könyvtárbeállítás (amelyhez kézzel kell hozzáadni a dokumentációs megjegyzéseket, a CI-t, a tesztkereteket, a benchmarkstruktúrát, a CONTRIBUTING.md fájlt és a licencfájlokat) közötti rést célozza meg.

Ez a cikk leírja, hogy mit generál a LibMake, hogyan működik a konfigurációsfájl- és a CLI-mód, milyen a generált CI-struktúra, valamint a sablonozási rendszert.

Telepítés és alapvető használat

A LibMake a crates.io oldalon jelenik meg, és a Cargón keresztül telepíthető:

cargo install libmake

A minimális CLI-hívás egy megnevezett könyvtárat generál az aktuális könyvtárban:

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"

A további opcionális kapcsolók közé tartozik a --categories, --keywords, --homepage, --documentation, --readme és --build.

Konfigurációsfájl-mód

Csapatmunkához minden CLI-kapcsoló kifejezhető egy TOML konfigurációs fájlban:

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

A hívás módja:

libmake --config libmake.toml

A LibMake JSON, YAML és CSV konfigurációs formátumokat is elfogad a --config-json, --config-yaml, illetve --config-csv kapcsolókon keresztül. A libmake.toml fájl beküldése a tároló gyökerébe minden közreműködőnek reprodukálható vázalapot biztosít, a sablonkonfiguráció változásai pedig láthatóak a Git-diffekben.

A generált projektstruktúra

Egy LibMake-hívás a következő elrendezést hozza létre:

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

A generált src/lib.rs tartalmaz egy crate szintű dokumentációs megjegyzést, a #![deny(missing_docs)] és a #![doc = include_str!("../README.md")] direktívát, amely a README-t behúzza a rustdocba, valamint egy nyilvános típusvázat a hozzá tartozó dokumentációs megjegyzéssel. Ezek a döntések a Rust API Guidelines azon követelményét követik, hogy minden nyilvános elemnek rendelkeznie kell dokumentációval.

A generált benches/lib_benchmarks.rs a Criterion.rs csomagot használja, és megköveteli a criterion fejlesztési függőségként való hozzáadását, amelyet a LibMake automatikusan beszúr a Cargo.toml fájlba.

GitHub Actions CI munkafolyamat

A generált .github/workflows/release.yml minden push és pull request esetén öt feladatot futtat:

Feladat Eszközlánc Mit ellenőriz
test stable, beta, nightly (mátrix) cargo test --all-features
clippy stable cargo clippy -- -D warnings
fmt stable cargo fmt --check
audit stable cargo audit (a cargo-audit a feladatban települ)
doc stable cargo doc --no-deps (hiányzó dokumentáció esetén hibázik)

A nightly feladatnál continue-on-error: true van beállítva, így egy nightly regresszió nem blokkolja a merge-öket, miközben a hiba továbbra is megjelenik a munkafolyamat futásában.

Sablonozás Terával

A LibMake a Tera sablonmotort használja, amely egy Jinja2-höz hasonló szintaxis Rusthoz, az összes generált fájl előállításához. Minden sablon a teljes konfigurációs struktúrát kapja meg kontextusként:

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

Az egyéni sablonkönyvtárak a --template kapcsolón keresztül támogatottak:

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

Az egyéni könyvtárnak tükröznie kell az alapértelmezett sablonstruktúrát (ugyanazokat a fájlneveket). Az egyéni könyvtárban jelen lévő bármely fájl felülírja a megfelelő beépített sablont; a nem jelen lévő fájlok visszaesnek a beépített változatra. Ez lehetővé teszi a részleges felülírásokat, például csak a CI munkafolyamat sablonjának cseréjét, miközben az alapértelmezett src/lib.rs és Cargo.toml sablonok megmaradnak.

Gyakran ismételt kérdések

Miben különbözik a LibMake a cargo new --lib parancstól? A cargo new --lib egy minimális projektet hoz létre, amely csak a Cargo.toml és a src/lib.rs fájlt tartalmazza (utóbbiban egyetlen #[cfg(test)] blokkal). A LibMake a teljes struktúrát generálja: integrációs teszteket, benchmarkokat, CI-t, CONTRIBUTING.md fájlt, kettős licencfájlokat és egy megfelelően dokumentált src/lib.rs fájlt, mindezt a projekt tényleges metaadataival konfigurálva, helykitöltők helyett.

Használható a LibMake meglévő Cargo-munkaterülettel? A LibMake egy önálló crate könyvtárat generál. A generált crate hozzáadásához egy meglévő munkaterülethez add hozzá a kimeneti útvonalat a gyökér Cargo.toml fájlban lévő munkaterületi members tömbhöz. A LibMake nem módosítja a meglévő munkaterületi fájlokat.

Frissíthetem a vázsablonokat a kezdeti generálás után? A LibMake a fájlokat egyszer generálja; nem követi nyomon és nem frissíti a korábban generált projekteket. A frissített sablonok átvételéhez az ajánlott megközelítés a LibMake újrafuttatása egy ideiglenes könyvtárba, majd az eredmény összehasonlítása a meglévő crate-tel, a kívánt módosításokat szelektíven alkalmazva.

Milyen Rust-kiadásokat és MSRV-értékeket támogat a LibMake? A LibMake bármely karakterláncot elfogad az --edition és --rustversion kapcsolókhoz, és az értékeket közvetlenül a Cargo.toml fájlba írja. Nem ellenőrzi, hogy a megadott kiadás vagy MSRV valós Rust-verzió-e, ezért a hívók felelősek a helyes értékek megadásáért.

Hivatkozások

  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/

Utolsó felülvizsgálat .

A cikk keresztközlése

Medium-formátumban másolás

# LibMake: Rust könyvtárváz-generátor — Sebastien Rousseau

> Originally published at [https://sebastienrousseau.com/hu/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/](https://sebastienrousseau.com/hu/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/)

A LibMake egy Rust CLI-eszköz, amely egyetlen parancsból vagy egy verziózott TOML/YAML konfigurációs fájlból teljes könyvtárvázat generál: Cargo.toml, dokumentációs sablonokkal ellátott src/lib.rs, teszt- és benchmarkkeretek, valamint GitHub Actions CI.

Read the full article on sebastienrousseau.com: https://sebastienrousseau.com/hu/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/

Mastodon-formátumban másolás

LibMake: Rust könyvtárváz-generátor — Sebastien Rousseau

A LibMake egy Rust CLI-eszköz, amely egyetlen parancsból vagy egy verziózott TOML/YAML konfigurációs fájlból teljes könyvtárvázat generál: Cargo.toml, dokumentációs sablonokkal ellátott src/lib.rs, teszt- és benchmarkkeretek, valamint GitHub Actions CI.

https://sebastienrousseau.com/hu/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/

LinkedIn-formátumban másolás

LibMake: Rust könyvtárváz-generátor — Sebastien Rousseau

A LibMake egy Rust CLI-eszköz, amely egyetlen parancsból vagy egy verziózott TOML/YAML konfigurációs fájlból teljes könyvtárvázat generál: Cargo.toml, dokumentációs sablonokkal ellátott src/lib.rs, teszt- és benchmarkkeretek, valamint GitHub Actions CI.

Íme a legfontosabb stratégiai tanulságok:

- Telepítés és alapvető használat. A LibMake a crates.io oldalon jelenik meg, és a Cargón keresztül telepíthető:.
- Konfigurációsfájl-mód. Csapatmunkához minden CLI-kapcsoló kifejezhető egy TOML konfigurációs fájlban:.
- A generált projektstruktúra. Egy LibMake-hívás a következő elrendezést hozza létre:.
- GitHub Actions CI munkafolyamat. A generált .github/workflows/release.yml minden push és pull request esetén öt feladatot futtat:.

Mi az Ön szervezetének megközelítése az e cikkben felvázolt kihívásokhoz?

→ https://sebastienrousseau.com/hu/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/

#Libmake #RustKódgenerátor #CargoVáz #RustKönyvtársablon #TeraSablonozás

Sebastien Rousseau | CC-BY-4.0
A cikk idézése

LibMake: Rust könyvtárváz-generátor — Sebastien Rousseau

A LibMake egy Rust CLI-eszköz, amely egyetlen parancsból vagy egy verziózott TOML/YAML konfigurációs fájlból teljes könyvtárvázat generál: Cargo.toml, dokumentációs sablonokkal ellátott src/lib.rs, teszt- és benchmarkkeretek, valamint GitHub Actions CI.

BibTeX

@online{rousseau2023libmake,
  author  = {Rousseau, Sebastien},
  title   = {{LibMake: Rust könyvtárváz-generátor — Sebastien Rousseau}},
  year    = {2023},
  url     = {https://sebastienrousseau.com/hu/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/},
  urldate = {2023}
}

RIS

TY  - GEN
AU  - Rousseau, Sebastien
TI  - LibMake: Rust könyvtárváz-generátor — Sebastien Rousseau
PY  - 2023
UR  - https://sebastienrousseau.com/hu/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/
ER  -

Vancouver

Rousseau S. LibMake: Rust könyvtárváz-generátor — Sebastien Rousseau. sebastienrousseau.com. 2023 Oct 26. Available from: https://sebastienrousseau.com/hu/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/

Chicago

Rousseau, Sebastien. "LibMake: Rust könyvtárváz-generátor — Sebastien Rousseau." sebastienrousseau.com. October 26, 2023. https://sebastienrousseau.com/hu/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/.

APA

Rousseau, S. (2023, October 26). LibMake: Rust könyvtárváz-generátor — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/hu/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/

A cikk újraközlése

LibMake: Rust könyvtárváz-generátor — Sebastien Rousseau

A LibMake egy Rust CLI-eszköz, amely egyetlen parancsból vagy egy verziózott TOML/YAML konfigurációs fájlból teljes könyvtárvázat generál: Cargo.toml, dokumentációs sablonokkal ellátott src/lib.rs, teszt- és benchmarkkeretek, valamint GitHub Actions CI.

Ez a cikk a következő licenc alatt áll: Creative Commons Attribution 4.0 International. Az újraközléshez a kanonikus URL forrásmegjelölése szükséges.

LibMake: Rust könyvtárváz-generátor — Sebastien Rousseau

A LibMake egy Rust CLI-eszköz, amely egyetlen parancsból vagy egy verziózott TOML/YAML konfigurációs fájlból teljes könyvtárvázat generál: Cargo.toml, dokumentációs sablonokkal ellátott src/lib.rs, teszt- és benchmarkkeretek, valamint GitHub Actions CI.

Originally published at https://sebastienrousseau.com/hu/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/ by Sebastien Rousseau.
Licensed under CC-BY-4.0.