{"id":13437646,"url":"https://github.com/mcandre/tinyrick","last_synced_at":"2026-01-06T02:11:42.393Z","repository":{"id":55869629,"uuid":"153866726","full_name":"mcandre/tinyrick","owner":"mcandre","description":"a freeform Rust build system","archived":false,"fork":false,"pushed_at":"2025-10-01T00:17:32.000Z","size":176,"stargazers_count":50,"open_issues_count":22,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-10-01T02:36:29.540Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://github.com/mcandre/tinyrick","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mcandre.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-10-20T03:39:43.000Z","updated_at":"2025-10-01T00:17:36.000Z","dependencies_parsed_at":"2025-06-01T01:30:50.976Z","dependency_job_id":"dd4f3f9f-302a-4eed-8dd0-a476f50dd747","html_url":"https://github.com/mcandre/tinyrick","commit_stats":{"total_commits":99,"total_committers":1,"mean_commits":99.0,"dds":0.0,"last_synced_commit":"00a21dbfa0ae3377897e135c65b6fb59882ec1b7"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/mcandre/tinyrick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcandre%2Ftinyrick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcandre%2Ftinyrick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcandre%2Ftinyrick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcandre%2Ftinyrick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mcandre","download_url":"https://codeload.github.com/mcandre/tinyrick/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcandre%2Ftinyrick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002962,"owners_count":26083489,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T03:00:58.971Z","updated_at":"2026-01-06T02:11:42.387Z","avatar_url":"https://github.com/mcandre.png","language":"Rust","funding_links":[],"categories":["Development tools","开发工具","开发工具 Development tools"],"sub_categories":["Web Servers","Web 服务器","网络服务端 Web Servers"],"readme":"# tinyrick: a freeform Rust build system\n\n[![Donate](https://img.shields.io/badge/GUMROAD-36a9ae?style=flat\u0026logo=gumroad\u0026logoColor=white)](https://mcandre.gumroad.com/)\n\n```\n       .---.              ^\n     o{__ω__ o{          ^0^  -Let me out!\n~~ ( // *|* \\xx\\)      xx`|'\n        = =  xxxx\u0026x      ' `\n```\n\n# EXAMPLE\n\n```console\n$ cd example\n\n$ tinyrick\nrunning 1 test\ntest smoketest ... ok\n\n$ tinyrick -h\nUsage: tinyrick [options]\n\nOptions:\n    -l, --list          list available tasks\n    -h, --help          print usage info\n    -v, --version       print version info\n```\n\n# ABOUT\n\nI'm tinyrick (TINYRICK!) and I build Rust projects. With tinyrick, you configure your build in the same normal Rust code as the rest of your project. Or keep picking your nose with make, it's up to you.\n\nLook at my pants! tinyrick! You think my pants are one size fits all? No, of course not! So get the pants that fit you. Get a `tinyrick.rs` that fits your workflow. Task dependency trees, get em while they're hot! Segfaults, get em while they're not. Smarter, butter, faster, stranger.\n\nDon't shell out, lib out. Your build is more portable that way. tinyricktinyricktinyrick. If you look closely, that last period is actually a *micro* rick rendered in ASCII; even tinier tinyrick!\n\n# CRATE\n\nhttps://crates.io/crates/tinyrick\n\n# API DOCUMENTATION\n\nhttps://docs.rs/tinyrick/latest/tinyrick/\n\n# DOCKER HUB\n\nhttps://hub.docker.com/r/n4jm4/tinyrick\n\n# DOWNLOAD\n\nhttps://github.com/mcandre/tinyrick/releases\n\n# LICENSE\n\nBSD-2-Clause\n\n# RUNTIME REQUIREMENTS\n\n* [Rust](https://www.rust-lang.org/en-US/)\n\n## Recommended\n\n* [ASDF](https://asdf-vm.com/) 0.18 (run `asdf reshim` after each Rust application binary installation)\n* [direnv](https://direnv.net/) 2\n* [cargo-cache](https://crates.io/crates/cargo-cache)\n* [tinyrick_extras](https://github.com/mcandre/tinyrick_extras)\n\n# SETUP\n\n## tinyrick.rs\n\nWrite some tasks in a `tinyrick.rs` build configuration script at the top-level directory of your Rust project:\n\n```rust\nuse tinyrick::*;\n\n#[default_task]\nfn build() {\n    deps!(build_release);\n}\n\n#[task]\nfn build_release() {\n    deps!(test);\n    exec!(\"cargo\", \"build\", \"--release\");\n}\n\n#[task]\nfn clippy() {\n    exec!(\"cargo\", \"clippy\");\n}\n\n// ...\n\nfn main() {\n    run()\n}\n```\n\n## Cargo.toml\n\nNow, wire up the tinyrick command line interface by configuring your top-level `Cargo.toml`:\n\n```toml\n[package]\nname = \"arithmancy\"\n\n[dependencies]\nctor = { version = \"0.6.2\", optional = true }\ndie = \"0.2.0\"\ntinyrick = { version = \"0.0.24\", optional = true }\ntinyrick_macros = { version = \"0.0.2\", optional = true }\ntinyrick_models = { version = \"0.0.2\", optional = true }\n\n# ...\n\n[features]\nletmeout = [\n    \"ctor\",\n    \"tinyrick\",\n    \"tinyrick_macros\",\n    \"tinyrick_models\",\n]\n\n[[bin]]\nname = \"tinyrick\"\npath = \"tinyrick.rs\"\nrequired-features = [\"letmeout\"]\n```\n\nLaunch a terminal session in your project directory. Install and run the tinyrick tool:\n\n```console\n$ cargo install tinyrick\n$ tinyrick\n```\n\nWatch how he behaves... I hope tinyrick is practicing good manners :P\n\nWhat happens when you run:\n\n* `tinyrick test`?\n* `tinyrick clean`?\n* `tinyrick build`?\n* `tinyrick -h`?\n* `tinyrick --list`?\n* `VERBOSE=1 tinyrick build`?\n\nI bet the freakin' moon explodes if you run `VERBOSE=1 tinyrick build build build`! (Hold onto your pants~)\n\n# DEBRIEFING\n\nWhere are my pants? Let's break down the code so far:\n\n* `#[task] fn name() { ... }` declares a task named `name`.\n* `#[default_task] fn name() { ... }` declares a task named `name` and marks it as the default, when no CLI arguments are passed to `tinyrick`.\n* `deps!(requirement)` caches a dependency on task `requirement`.\n* `exec(command, args sequence)` and `exec!(command[, arg[, arg[, arg ...]]])` run CLI commands.\n* `VERBOSE=1` enables command string emission during processing.\n* `letmeout` is a feature gate, so that neither the tinyrick package, nor your tinyrick binary escape with your Rust package when you `tinyrick publish`.\n\n# DoN't UsE sHelL cOmMaNdS!1\n\nJust because the tinyrick library offers several *supremely convenient* macros for executing shell commands doesn't mean that you should always shell out. No way, man!\n\nWhenever possible, use regular Rust code. There's like a ba-jillion [crates](https://crates.io) of prewritten Rust code, so you might as well use it!\n\n# CONTRIBUTING\n\nFor more details on developing tinyrick itself, see [DEVELOPMENT.md](DEVELOPMENT.md).\n\n# SEE ALSO\n\n* Inspired by the excellent [mage](https://magefile.org/) build system for Go projects\n* [bb](https://github.com/mcandre/bb), a build system for (g)awk projects\n* [beltaloada](https://github.com/mcandre/beltaloada), a guide to writing build systems for (POSIX) sh\n* [booty](https://github.com/mcandre/booty?tab=readme-ov-file) for JS/Node.js/altJS\n* [cargo](https://doc.rust-lang.org/cargo/reference/build-scripts.html) custom build scripts, primarily for generating Rust source files from other languages\n* [cmake](https://cmake.org/) for C/C++ projects\n* [dale](https://github.com/mcandre/dale) builds D projects\n* [GNU autotools](https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html), a build system for Linux C/C++ projects\n* [Gradle](https://gradle.org/), a build system for JVM projects\n* [invoke](https://pypi.org/project/invoke/), a Python task runner\n* [jelly](https://github.com/mcandre/jelly), a JSON task runner\n* [lair](https://github.com/mcandre/lair), a lightweight task runner\n* [lake](https://luarocks.org/modules/steved/lake), a Lua task runner\n* [Leiningen](https://leiningen.org/) + [lein-exec](https://github.com/kumarshantanu/lein-exec), a Clojure task runner\n* [lichen](https://github.com/mcandre/lichen), a sed task runner\n* POSIX compliant [make](https://pubs.opengroup.org/onlinepubs/9799919799/utilities/make.html), the classic, application language agnostic task runner\n* [mian](https://github.com/mcandre/mian), a task runner for (Chicken) Scheme Lisp\n* [Rake](https://ruby.github.io/rake/), a task runner for Ruby projects\n* [Rebar3](https://www.rebar3.org/), a build system for Erlang projects\n* [rez](https://github.com/mcandre/rez) builds C/C++ projects\n* [sbt](https://www.scala-sbt.org/index.html), a build system for Scala projects\n* [Shake](https://shakebuild.com/), a task runner for Haskell projects\n* [yao](https://github.com/mcandre/yao), a task runner for Common LISP projects\n\n🛸\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcandre%2Ftinyrick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmcandre%2Ftinyrick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcandre%2Ftinyrick/lists"}