A CLI tool to drive test-driven Rust workshops

Overview

wr

A Rust workshop runner

demo

wr is a CLI to drive test-driven workshops written in Rust.
It is designed to be used in conjunction with a workshop repository, which contains a series of exercises to be solved by the workshop participants.

Note
This workshop runner has been developed by Mainmatter to support our hands-on Rust workshops. Check out our landing page if you're looking for Rust consulting or training!

How it works

What I cannot create, I do not understand.

Richard Feynman

A test-driven workshop is structured as a series of exercises.
Each exercise is a Rust project with a set of tests that verify the correctness of the solution.

wr will run the tests for the current exercise and, if they pass, allow you to move on to the next exercise while keeping track of what you have solved so far.

You can see it in action in the rust-telemetry-workshop.

Installation

cargo install workshop-runner

Check that it has been installed correctly:

wr --help

Run

wr

from the top-level folder of a workshop repository to verify your current solutions and move forward in the workshop.

Enjoy!

Folder structure

wr expects the following structure for the workshop repository:

.
├── exercises
│  ├── 00_<collection name>
│  │  ├── 00_<exercise name>
│  │  │  ..
│  │  ├── 0n_<exercise name>
│  │  ..
│  ├── 0n_<collection name>
│  │  ├── 00_<exercise name>
│  │  │  ..
│  │  ├── 0n_<exercise name>

Each xx_<exercise name> folder must be a Rust project with its own Cargo.toml file.

You can choose a different top-level folder name by either passing the --exercises-dir flag when invoking wr or by creating a top-level wr.toml file with the following content:

exercises-dir = "my-top-level-folder"

You can refer to rust-telemetry-workshop as an example.

You might also like...
Simple test app based on rust-psp

PSP Test App Simple test app based on rust-psp. Demonstrating the usage of C libs. Build Download and unzip the prebuilt PSPSDK (built from clang-psp)

A tui to test regexes on the rust regex crate

regex-tui Structure src/ ├── app.rs - holds the states and renders the widgets ├── event.rs - handles the terminal events (key press, mouse cl

Black-box integration tests for your REST API using the Rust and its test framework

restest Black-box integration test for REST APIs in Rust. This crate provides the [assert_api] macro that allows to declaratively test, given a certai

Sanctity is an acronym for rust ansi16 color test utility
Sanctity is an acronym for rust ansi16 color test utility

sanctity 🌈 sanctity is an acronym for rust ansi16 color test utility. It prints your own text or the default text in all of the 16 terminal colors.

Cucumber testing framework for Rust. Fully native, no external test runners or dependencies.
Cucumber testing framework for Rust. Fully native, no external test runners or dependencies.

Cucumber testing framework for Rust An implementation of the Cucumber testing framework for Rust. Fully native, no external test runners or dependenci

Email test server for development, written in Rust
Email test server for development, written in Rust

MailCrab Email test server for development, written in Rust. Inspired by MailHog and MailCatcher. MailCrab was created as an exercise in Rust, trying

A Rust command that prettifies the ugly `cargo test` output into a beautiful one.
A Rust command that prettifies the ugly `cargo test` output into a beautiful one.

Cargo Pretty Test ✨ A Rust command-line tool that prettifies the ugly cargo test output into a beautiful output. This crate can be also used as a libr

 create and test the style and formatting of text in your terminal applications
create and test the style and formatting of text in your terminal applications

description: create and test the style and formatting of text in your terminal applications docs: https://docs.rs/termstyle termstyle is a library tha

Terminal-based typing test.
Terminal-based typing test.

ttyper Ttyper is a terminal-based typing test built with Rust and tui-rs. installation With Cargo: cargo install ttyper usage For usage instructions,

Comments
  • Configure Renovate

    Configure Renovate

    Mend Renovate

    Welcome to Renovate! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.

    🚦 To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.


    Detected Package Files

    • Cargo.toml (cargo)

    Configuration Summary

    Based on the default config's presets, Renovate will:

    • Start dependency updates only once this onboarding PR is merged
    • Show all Merge Confidence badges for pull requests.
    • Enable Renovate Dependency Dashboard creation.
    • Use semantic commit type fix for dependencies and chore for all others if semantic commits are in use.
    • Ignore node_modules, bower_components, vendor and various test/tests directories.
    • Group known monorepo packages together.
    • Use curated list of recommended non-monorepo package groupings.
    • Apply crowd-sourced package replacement rules.
    • Apply crowd-sourced workarounds for known problems with packages.

    🔡 Would you like to change the way Renovate is upgrading your dependencies? Simply edit the renovate.json in this branch with your custom config and the list of Pull Requests in the "What to Expect" section below will be updated the next time Renovate runs.


    What to Expect

    With your current configuration, Renovate will create 6 Pull Requests:

    Update Rust crate anyhow to 1.0.75
    • Schedule: ["at any time"]
    • Branch name: renovate/anyhow-1.x
    • Merge into: main
    • Upgrade anyhow to 1.0.75
    Update Rust crate indexmap to 2.0.2
    • Schedule: ["at any time"]
    • Branch name: renovate/indexmap-2.x
    • Merge into: main
    • Upgrade indexmap to 2.0.2
    Update Rust crate regex to 1.9.6
    • Schedule: ["at any time"]
    • Branch name: renovate/regex-1.x
    • Merge into: main
    • Upgrade regex to 1.9.6
    Update Rust crate serde to 1.0.188
    • Schedule: ["at any time"]
    • Branch name: renovate/serde-monorepo
    • Merge into: main
    • Upgrade serde to 1.0.188
    Update Rust crate clap to 4.4.6
    • Schedule: ["at any time"]
    • Branch name: renovate/clap-4.x
    • Merge into: main
    • Upgrade clap to 4.4.6
    Update Rust crate toml to 0.8.2
    • Schedule: ["at any time"]
    • Branch name: renovate/toml-0.x
    • Merge into: main
    • Upgrade toml to 0.8.2

    🚸 Branch creation will be limited to maximum 2 per hour, so it doesn't swamp any CI resources or overwhelm the project. See docs for prhourlylimit for details.


    ❓ Got questions? Check out Renovate's Docs, particularly the Getting Started section. If you need any further assistance then you can also request help here.


    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
Owner
Mainmatter
We are a digital product consultancy that designs and develops web apps, guiding projects and teams to sustainable success.
Mainmatter
A commmand line tool for uploading homework coded on the dcloud server onto specific google drive course folders.

A commmand line tool for uploading homework coded on the dcloud server onto specific google drive course folders.

Daniel Kogan 2 Sep 8, 2022
Coppers is a custom test harnass for Rust that measures the energy usage of your test suite.

Coppers Coppers is a test harness for Rust that can measure the evolution of power consumptions of a Rust program between different versions with the

Thijs Raymakers 175 Dec 4, 2022
gfold is a CLI-driven application that helps you keep track of multiple Git repositories.

gfold is a CLI-driven application that helps you keep track of multiple Git repositories.

Nick Gerace 215 Jan 4, 2023
Open-source Rust framework for building event-driven live-trading & backtesting systems

Barter Barter is an open-source Rust framework for building event-driven live-trading & backtesting systems. Algorithmic trade with the peace of mind

Barter 157 Feb 18, 2023
A command driven spotify player

spotify-player Table of Contents Introduction Examples Demo Installation Requirements Spotify Connect Streaming Commands Actions Search Page Mouse sup

Thang Pham 185 Dec 28, 2022
policy-driven signing service

SigningService (maybe we'll have a more clever name one day!) What is this? This repo has a little "serverless" (runs on lambda and some other service

null 4 Jul 15, 2022
Make data-driven table rendering easy with Dioxus

Dioxus Table Make data-driven table rendering easy with Dioxus Installation Until the next release of Dioxus this requires Dioxus nightly from git. Th

null 9 Oct 9, 2022
Holo is a suite of routing protocols designed to support high-scale and automation-driven networks.

Holo is a suite of routing protocols designed to support high-scale and automation-driven networks. For a description of what a routing protocol is, p

Renato Westphal 42 Apr 16, 2023
A CLI tool to get help with CLI tools 🐙

A CLI tool to get help with CLI tools ?? halp aims to help find the correct arguments for command-line tools by checking the predefined list of common

Orhun Parmaksız 566 Apr 16, 2023
Rust File Management CLI is a command-line tool written in Rust that provides essential file management functionalities. Whether you're working with files or directories, this tool simplifies common file operations with ease.

Rust FileOps Rust File Management CLI is a command-line tool written in Rust that provides essential file management functionalities. Whether you're w

Harikesh Ranjan Sinha 5 May 2, 2024