rad 💯
a general purpose build tool.
statically typed, batteries included. command tasks, function tasks, and make-style tasks support.
jump to:
usage
$ rad <task-name> [--help]
// rad.ts
import { Tasks } from "https://raw.githubusercontent.com/cdaringe/rad/master/src/mod.ts";
// command tasks
const format = `prettier --write`
const test = `deno test`
// function tasks
const compile = {
dependsOn: [format],
fn({ sh, ...toolkit }) => sh('tsc')
}
// make-style tasks
const transpile = {
target: "phony",
prereqs: ["p1", "p2"],
async onMake({ logger }, { changedPrereqs /*, prereqs */}) {
for await (const req of changedPrereqs) {
logger.info(`req: ${req.filename} ${JSON.stringify(req.info)}`);
}
},
}
export const tasks: Tasks = {
compile,
format,
test
}
install
there are a few formal ways to use rad
. regardless of the route you choose,
know that all strategies support using pinned versions, adherent to semver.
see the releases page.
usage | install-method | install-steps |
---|---|---|
cli | deno |
deno install rad https://github.com/cdaringe/rad/blob/master/src/bin.ts |
cli | docker |
docker pull cdaringe/rad 1 |
cli | curl+sh |
`curl .sh |
library | deno |
import * as rad from https://github.com/cdaringe/rad/blob/master/src/mod.ts |
1For docker users, consider making a nice shell alias
# shell profile, e.g. .bash_profile
function rad() {
docker run --rm -v $PWD:/rad cdaringe/rad "$@";
}
what is it
a build tool! it competes with make, npm-scripts, bazel, gradle, ant, gulp, or any of the other many tools out there!
rad
offers:
- simple, programmable task interfaces
- easy to understand, declarative build steps
- type-checked tasks
- productive toolkit API for nuanced tasks that benefit from progamming. see toolkit
- bottom-up,
make
-style build targets- fast builds, skip redundant work when inputs haven't changed
- cli mode, or library mode
- portable. build automation for any language or project, in many environments (*limited to Deno target architectures, for the time being. long term, we may package this in
Rust
) - great UX
- no quirky DSLs (
make
,gradle
, and friends 😢). your build is code--tasks are typescript & are indeed type-checked! - debuggable. 🐛 inspect your data, tasks, or even rad itself
- simplicity of
make
, without the DSL, coupling tosh
, and C/C++ biases - use a real scripting language--not
bash/sh
! shell languages are great for running other programs, not for plumbing data
why
🙄, another build tool?.
definitely. no other build tools in 2018 2019 2020 have a sufficiently balanced enough feature set that the average polyglot programmer needs without coercing it or piling on extraneous complexity.
see why not just use