Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

setup xtask infra for cheatsheets #159

Merged
merged 35 commits into from
Jan 14, 2025
Merged

setup xtask infra for cheatsheets #159

merged 35 commits into from
Jan 14, 2025

Conversation

miguelraz
Copy link
Contributor

@miguelraz miguelraz commented Jun 10, 2024

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

  • call cargo xtask make-cheatsheet python at the root folder
  • scrape Markdown headers in SUMMARY..md and segment topics by Rust Fundamentals, Applied Rust and Advanced Rust
  • write out to src/python-cheatsheet.md if it doesn't exist
  • if it does exist, check that it in sync: all headers in python-cheatsheet.md are in the appropriate sections, in order, and none are missing.

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:
❯ 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

Copy link

cloudflare-workers-and-pages bot commented Jun 13, 2024

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

Latest commit: cb162be
Status: ✅  Deploy successful!
Preview URL: https://73191fdd.ferrous-systems-rust-training.pages.dev
Branch Preview URL: https://xtask-cheatsheet.ferrous-systems-rust-training.pages.dev

View logs

@miguelraz miguelraz marked this pull request as ready for review June 13, 2024 01:41
@jonathanpallant
Copy link
Member

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
Copy link
Member

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
Copy link
Contributor Author

@jonathanpallant

  • added a README.md
  • rebased to main to have Cloudflare deploy passing
  • fixed workspace issue by adding a exclude = ["examples/"] array to the Cargo.toml and CI is happy

xtask/README.md Outdated Show resolved Hide resolved
xtask/src/main.rs Outdated Show resolved Hide resolved
xtask/src/main.rs Outdated Show resolved Hide resolved
xtask/src/main.rs Outdated Show resolved Hide resolved
xtask/src/main.rs Outdated Show resolved Hide resolved
xtask/src/tasks.rs Outdated Show resolved Hide resolved
xtask/src/tasks.rs Outdated Show resolved Hide resolved
xtask/src/tasks.rs Outdated Show resolved Hide resolved
@miguelraz
Copy link
Contributor Author

@jonathanpallant this feels ready for review again.

- Functions that return a Result shouldn't unwrap/expect
- use the eyre crate to add context, seeing as we have it included
- Talk about 'decks' and not 'slides' (a 'deck' has many 'slides' in it)
- Format doc comments correctly
- Add missing function comments
xtask/README.md Outdated Show resolved Hide resolved
xtask/README.md Outdated Show resolved Hide resolved
xtask/src/tasks.rs Outdated Show resolved Hide resolved
@jonathanpallant
Copy link
Member

I elected to push some changes rather than leave a bunch of review comments. Please do review the diff and let me know if you have any questions.

The final matter is deciding how we want CI to run this, to automatically check out cheatsheets. Ideally we'd have a cargo xtask test-cheatsheets which automatically tested all of them.

@miguelraz
Copy link
Contributor Author

miguelraz commented Jan 7, 2025

All the comments being hoisted to a README make sense to me and the added level of doc comments is welcome, thanks!

I'm in favor of writing a cargo xtask test-all-cheatsheets.

@miguelraz miguelraz dismissed jonathanpallant’s stale review January 7, 2025 15:00

suggestion has been committed

@miguelraz
Copy link
Contributor Author

Resolved a small merge conflict by accepting the xtask target folder as part of .gitignore

@miguelraz
Copy link
Contributor Author

miguelraz commented Jan 8, 2025

Ah, I noticed there's a corner case I haven't handled, I'm going to work on it for a bit.

Removing the review request for now.

@miguelraz miguelraz removed the request for review from jonathanpallant January 8, 2025 04:22
@jonathanpallant jonathanpallant merged commit cea2496 into main Jan 14, 2025
13 checks passed
@jonathanpallant jonathanpallant deleted the xtask-cheatsheet branch January 14, 2025 10:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants