ferrous-systems / rust-training

Learning materials for the Rust Training courses by Ferrous Systems
143 stars 19 forks source link

setup xtask infra for cheatsheets #159

Open miguelraz opened 3 months ago

miguelraz commented 3 months ago

Problem:

Making cheatsheets like "From Python to Rust" and friends is going to be a maintainability nightmare as training-materials grows, changes ownership, etc., over time. This was raised as a concern in #148 and this PR seeks to fix that.

Proposed solution:

Setup a xtask style workflow where we

The code is (I think) defensive to spare future pain for someone else looking at this code (myself in a few months).

This PR only sets up the infrastructure but doesn't add any cheatsheets themselves - I'll file a separate PR with a basic Julia cheatsheet once this lands to separate concerns.


Current functionality: ```text ❯ cargo xtask make-cheatsheet python Compiling xtask v0.1.0 (C:\Users\mrg\work\rust-training\xtask) Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.10s Running `target\debug\xtask.exe make-cheatsheet python` Cheatsheat for python written at ./training-slides/src/python-cheatsheet.md ❯ cat .\training-slides\src\python-cheatsheet.md # Rust Fundamentals ## Overview ## Installation ## Basic Types ## Control Flow ## Compound Types ## Ownership and Borrowing ## Error Handling ## Collections ## Iterators ## Imports and Modules ## Good Design Practices # Applied Rust ## Methods and Traits ## Rust I/O Traits ## Generics ## Lifetimes ## Cargo Workspaces ## Heap Allocation (Box and Rc) ## Shared Mutability (Cell, RefCell) ## Thread Safety (Send/Sync, Arc, Mutex) ## Closures and the Fn/FnOnce/FnMut traits ## Spawning Threads and Scoped Threads # Advanced Rust ## Advanced Strings ## Debugging Rust ## Dependency Management with Cargo ## Deref Coercions ## Design Patterns ## Documentation ## Drop, Panic and Abort ## Dynamic Dispatch ## Macros ## Property Testing ## Rust Projects Build Time ## Send and Sync ## Serde ## Testing ## The stdlib ## Using Cargo ## Using Types to encode State ## WASM ❯ cargo xtask make-cheatsheet python Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.04s Running `target\debug\xtask.exe make-cheatsheet python` File python-cheatsheet.md already exists - checking it's in sync Neat! python-cheatsheet.md is in sync rust-training on  xtask-cheatsheet [$?] via 🦀 v1.78.0 ❯ cargo xtask test-cheatsheet python Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.04s Running `target\debug\xtask.exe test-cheatsheet python` Neat! python-cheatsheet.md is in sync ```
cloudflare-workers-and-pages[bot] commented 3 months ago

Deploying ferrous-systems-rust-training with  Cloudflare Pages  Cloudflare Pages

Latest commit: d85c40f
Status: ✅  Deploy successful!
Preview URL: https://84f9496e.ferrous-systems-rust-training.pages.dev
Branch Preview URL: https://xtask-cheatsheet.ferrous-systems-rust-training.pages.dev

View logs

jonathanpallant commented 3 months ago

Could we add a few words (here, or in a README) about how the cheatsheets work - to save having to read and understand the source code?

jonathanpallant commented 3 months ago

Also, it needs a rebase on main to fix the CloudFlare CI failure, and some thought about the workspaces to fix the GHA CI failure.

miguelraz commented 3 months ago

@jonathanpallant

jonathanpallant commented 3 months ago

OK, I think this tool makes sense. I had some minor points about the program itself, but I also think we should be running the unit tests in CI, and testing our cheat-sheets in CI.

jonathanpallant commented 3 months ago

re-assign to me when you're ready, thanks!