Sebastien Rousseau

LIBMAKE، تولیدکننده کد RUST، داربست CARGO، قالب کتابخانه RUST، قالب‌سازی TERA، GITHUB ACTIONS برای RUST، CARGO-AUDIT، راهنمای API‌ RUST، تولیدکننده کد قالبی، گردش‌کار CI‌ RUST

LibMake: تولیدکننده داربست کتابخانه Rust

LibMake: یک تولیدکننده کد Rust که از روز نخست بهترین شیوه‌ها را الزامی می‌کند.

4 min read
Banner for: LibMake: تولیدکننده داربست کتابخانه Rust

LibMake ⧉ یک CLI و کتابخانه متن‌باز Rust است که یک داربست کامل پروژه کتابخانه را از یک فراخوانی واحد تولید می‌کند. این ابزار شکاف میان cargo new --lib (که تنها یک Cargo.toml و src/lib.rs کمینه ایجاد می‌کند) و یک راه‌اندازی کتابخانه آماده تولید (که نیازمند افزودن دستی کامنت‌های مستندسازی، CI، هارنس‌های آزمون، ساختار بنچمارک، CONTRIBUTING.md و فایل‌های مجوز است) را هدف قرار می‌دهد.

این مقاله توضیح می‌دهد که LibMake چه چیزی تولید می‌کند، حالت‌های فایل پیکربندی و CLI چگونه کار می‌کنند، ساختار CI تولیدشده چیست، و سامانه قالب‌سازی چگونه است.

نصب و کاربرد پایه

LibMake روی crates.io منتشر شده و از طریق Cargo نصب می‌شود:

cargo install libmake

فراخوانی کمینه CLI یک کتابخانه با نام مشخص را در دایرکتوری جاری تولید می‌کند:

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"

پرچم‌های اختیاری دیگر شامل --categories، --keywords، --homepage، --documentation، --readme و --build هستند.

حالت فایل پیکربندی

برای استفاده تیمی، تمام پرچم‌های CLI را می‌توان در یک فایل پیکربندی 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"]

که به این شکل فراخوانی می‌شود:

libmake --config libmake.toml

LibMake همچنین فرمت‌های پیکربندی JSON، YAML و CSV را به‌ترتیب از طریق پرچم‌های --config-json، --config-yaml و --config-csv می‌پذیرد. کامیت‌کردن libmake.toml در ریشه مخزن به هر مشارکت‌کننده یک مبنای داربست بازتولیدپذیر می‌دهد، و تغییرات در پیکربندی قالب در diffهای Git قابل مشاهده است.

ساختار پروژه تولیدشده

یک فراخوانی LibMake چیدمان زیر را ایجاد می‌کند:

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

فایل src/lib.rs تولیدشده شامل یک کامنت مستندسازی در سطح crate، دستور #![deny(missing_docs)]، دستور #![doc = include_str!("../README.md")] برای وارد کردن README به rustdoc، و یک نوع عمومی نمونه (stub) همراه با کامنت مستندسازی مربوطه است. این انتخاب‌ها از الزام «راهنمای API‌ Rust» پیروی می‌کنند که می‌گوید همه آیتم‌های عمومی باید مستندسازی داشته باشند.

فایل benches/lib_benchmarks.rs تولیدشده از Criterion.rs استفاده می‌کند و نیازمند افزودن criterion به‌عنوان یک وابستگی توسعه (dev-dependency) است، که LibMake آن را به‌صورت خودکار در Cargo.toml درج می‌کند.

گردش‌کار CI مبتنی بر GitHub Actions

فایل تولیدشده .github/workflows/release.yml روی هر push و هر pull request پنج کار (job) را اجرا می‌کند:

کار زنجیره‌ابزار آنچه بررسی می‌کند
test stable، beta، nightly (ماتریسی) cargo test --all-features
clippy stable cargo clippy -- -D warnings
fmt stable cargo fmt --check
audit stable cargo audit (cargo-audit در همان کار نصب می‌شود)
doc stable cargo doc --no-deps (در صورت نبود مستندات با خطا مواجه می‌شود)

کار nightly دارای continue-on-error: true است تا یک واپس‌روی (regression) در nightly مانع ادغام‌ها نشود، در حالی که همچنان شکست را در اجرای گردش‌کار نمایان می‌کند.

قالب‌سازی با Tera

LibMake از موتور قالب Tera — یک نحو شبیه Jinja2 برای Rust — برای رندر کردن همه فایل‌های تولیدشده استفاده می‌کند. هر قالب کل ساختار پیکربندی را به‌عنوان زمینه (context) دریافت می‌کند:

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

دایرکتوری‌های قالب سفارشی از طریق پرچم --template پشتیبانی می‌شوند:

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

دایرکتوری سفارشی باید ساختار قالب پیش‌فرض (همان نام‌های فایل) را بازتاب دهد. هر فایلی که در دایرکتوری سفارشی موجود باشد، قالب داخلی متناظر را بازنویسی می‌کند؛ فایل‌هایی که در دایرکتوری سفارشی موجود نباشند، به نسخه داخلی بازمی‌گردند. این امکان بازنویسی جزئی را فراهم می‌کند — برای مثال، جایگزین کردن تنها قالب گردش‌کار CI در حالی که قالب‌های پیش‌فرض src/lib.rs و Cargo.toml حفظ می‌شوند.

پرسش‌های پرتکرار

LibMake چه تفاوتی با cargo new --lib دارد؟ cargo new --lib یک پروژه کمینه تنها با Cargo.toml و src/lib.rs (شامل یک بلوک #[cfg(test)] واحد) ایجاد می‌کند. LibMake ساختار کامل را تولید می‌کند — آزمون‌های یکپارچگی، بنچمارک‌ها، CI، CONTRIBUTING.md، فایل‌های مجوز دوگانه، و یک src/lib.rs که به‌درستی مستندسازی شده — که به‌جای مقادیر جای‌گیر (placeholder) با فراداده واقعی پروژه پیکربندی شده است.

آیا می‌توان از LibMake با یک workspace موجود Cargo استفاده کرد؟ LibMake یک دایرکتوری crate مستقل تولید می‌کند. برای افزودن crate تولیدشده به یک workspace موجود، مسیر خروجی را به آرایه members مربوط به workspace در Cargo.toml ریشه اضافه کنید. LibMake فایل‌های موجود workspace را تغییر نمی‌دهد.

آیا می‌توانم قالب‌های داربست را پس از تولید اولیه به‌روزرسانی کنم؟ LibMake فایل‌ها را یک بار تولید می‌کند؛ پروژه‌های پیش‌تر تولیدشده را ردیابی یا به‌روزرسانی نمی‌کند. برای اتخاذ قالب‌های به‌روزشده، رویکرد توصیه‌شده این است که LibMake را دوباره در یک دایرکتوری موقت اجرا کنید و نتیجه را با crate موجود مقایسه (diff) کنید و تغییرات دلخواه را به‌صورت گزینشی اعمال کنید.

LibMake از چه نسخه‌ها (edition) و مقادیر MSRV زبان Rust پشتیبانی می‌کند؟ LibMake هر رشته‌ای را برای --edition و --rustversion می‌پذیرد و مقادیر را مستقیماً در Cargo.toml می‌نویسد. این ابزار اعتبارسنجی نمی‌کند که آیا نسخه یا MSRV مشخص‌شده یک نسخه واقعی Rust است یا خیر، بنابراین مسئولیت تأمین مقادیر درست بر عهده فراخوانان است.

منابع

  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/

آخرین بازبینی .

بازنشر متقابل این مقاله

کپی قالب‌بندی‌شده برای Medium

# LibMake: تولیدکننده داربست کتابخانه Rust — Sebastien Rousseau

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

LibMake یک ابزار خط فرمان (CLI) Rust است که یک داربست کامل کتابخانه - Cargo.toml، src/lib.rs همراه با قالب‌های مستندسازی، هارنس‌های آزمون و بنچمارک، و CI مبتنی بر GitHub Actions - را از یک فرمان واحد یا یک فایل پیکربندی نسخه‌بندی‌شده TOML/YAML تولید می‌کند.

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

کپی قالب‌بندی‌شده برای Mastodon

LibMake: تولیدکننده داربست کتابخانه Rust — Sebastien Rousseau

LibMake یک ابزار خط فرمان (CLI) Rust است که یک داربست کامل کتابخانه - Cargo.toml، src/lib.rs همراه با قالب‌های مستندسازی، هارنس‌های آزمون و بنچمارک، و CI مبتنی بر GitHub Actions - را از یک فرمان واحد یا یک فایل پیکربندی نسخه‌بندی‌شده TOML/YAML تولید می‌کند.

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

کپی قالب‌بندی‌شده برای LinkedIn

LibMake: تولیدکننده داربست کتابخانه Rust — Sebastien Rousseau

LibMake یک ابزار خط فرمان (CLI) Rust است که یک داربست کامل کتابخانه - Cargo.toml، src/lib.rs همراه با قالب‌های مستندسازی، هارنس‌های آزمون و بنچمارک، و CI مبتنی بر GitHub Actions - را از یک فرمان واحد یا یک فایل پیکربندی نسخه‌بندی‌شده TOML/YAML تولید می‌کند.

مهم‌ترین نکات راهبردی به این شرح است:

- نصب و کاربرد پایه. LibMake روی crates.io منتشر شده و از طریق Cargo نصب می‌شود:.
- حالت فایل پیکربندی. برای استفاده تیمی، تمام پرچم‌های CLI را می‌توان در یک فایل پیکربندی TOML بیان کرد:.
- ساختار پروژه تولیدشده. یک فراخوانی LibMake چیدمان زیر را ایجاد می‌کند:.
- گردش‌کار CI مبتنی بر GitHub Actions. فایل تولیدشده .github/workflows/release.yml روی هر push و هر pull request پنج کار (job) را اجرا می‌کند:.

رویکرد سازمان شما به چالش‌های مطرح‌شده در این نوشته چیست؟

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

#Libmake،تولیدکنندهکدRust،داربستCargo،قالبکتابخانهRust،قالب‌سازیTera،GithubActionsبرایRust،CargoAudit،راهنمایApi‌Rust،تولیدکنندهکدقالبی،گردش‌کارCi‌Rust

Sebastien Rousseau | CC-BY-4.0
استناد به این مقاله

LibMake: تولیدکننده داربست کتابخانه Rust — Sebastien Rousseau

LibMake یک ابزار خط فرمان (CLI) Rust است که یک داربست کامل کتابخانه - Cargo.toml، src/lib.rs همراه با قالب‌های مستندسازی، هارنس‌های آزمون و بنچمارک، و CI مبتنی بر GitHub Actions - را از یک فرمان واحد یا یک فایل پیکربندی نسخه‌بندی‌شده TOML/YAML تولید می‌کند.

BibTeX

@online{rousseau2023libmake,
  author  = {Rousseau, Sebastien},
  title   = {{LibMake: تولیدکننده داربست کتابخانه Rust — Sebastien Rousseau}},
  year    = {2023},
  url     = {https://sebastienrousseau.com/fa/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 — Sebastien Rousseau
PY  - 2023
UR  - https://sebastienrousseau.com/fa/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/
ER  -

Vancouver

Rousseau S. LibMake: تولیدکننده داربست کتابخانه Rust — Sebastien Rousseau. sebastienrousseau.com. 2023 Oct 26. Available from: https://sebastienrousseau.com/fa/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/

Chicago

Rousseau, Sebastien. "LibMake: تولیدکننده داربست کتابخانه Rust — Sebastien Rousseau." sebastienrousseau.com. October 26, 2023. https://sebastienrousseau.com/fa/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 — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/fa/2023-10-26-libmake-a-code-generator-to-reduce-repetitive-tasks-and-build-high-quality-rust-libraries/

بازنشر این مقاله

LibMake: تولیدکننده داربست کتابخانه Rust — Sebastien Rousseau

LibMake یک ابزار خط فرمان (CLI) Rust است که یک داربست کامل کتابخانه - Cargo.toml، src/lib.rs همراه با قالب‌های مستندسازی، هارنس‌های آزمون و بنچمارک، و CI مبتنی بر GitHub Actions - را از یک فرمان واحد یا یک فایل پیکربندی نسخه‌بندی‌شده TOML/YAML تولید می‌کند.

این مقاله تحت مجوز زیر منتشر شده است Creative Commons Attribution 4.0 International. بازنشر مستلزم ذکر منبع با ارجاع به نشانی اصلی (canonical) است.

LibMake: تولیدکننده داربست کتابخانه Rust — Sebastien Rousseau

LibMake یک ابزار خط فرمان (CLI) Rust است که یک داربست کامل کتابخانه - Cargo.toml، src/lib.rs همراه با قالب‌های مستندسازی، هارنس‌های آزمون و بنچمارک، و CI مبتنی بر GitHub Actions - را از یک فرمان واحد یا یک فایل پیکربندی نسخه‌بندی‌شده TOML/YAML تولید می‌کند.

Originally published at https://sebastienrousseau.com/fa/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.