All Projects → sagebind → rote

sagebind / rote

Licence: Apache-2.0 license
Automate everything.

Programming Languages

rust
11053 projects
lua
6591 projects

Projects that are alternatives of or similar to rote

alfred
(v0.2) Even Batman needs a little help. Task runner. Automator. Build system.
Stars: ✭ 62 (-6.06%)
Mutual labels:  task-runner, build-tool, build-system
Realize
Realize is the #1 Golang Task Runner which enhance your workflow by automating the most common tasks and using the best performing Golang live reloading.
Stars: ✭ 4,162 (+6206.06%)
Mutual labels:  task-runner, build-tool, build-system
Mmake
Mmake is a small program which wraps make to provide additional functionality, such as user-friendly help output, remote includes, and eventually more. It otherwise acts as a pass-through to standard make.
Stars: ✭ 1,593 (+2313.64%)
Mutual labels:  task-runner, build-tool, build-system
makesure
Simple task/command runner with declarative goals and dependencies
Stars: ✭ 230 (+248.48%)
Mutual labels:  task-runner, build-tool, build-system
Ygor
Task toolkit. For when `npm run` isn't enough and everything else is too much.
Stars: ✭ 69 (+4.55%)
Mutual labels:  task-runner, build-tool
Doit
task management & automation tool
Stars: ✭ 972 (+1372.73%)
Mutual labels:  task-runner, build-tool
Foy
A simple, light-weight and modern task runner for general purpose.
Stars: ✭ 157 (+137.88%)
Mutual labels:  task-runner, build-tool
make
The Ultimate Makefile to compile all your C, C++, Assembly and Fortran projects
Stars: ✭ 41 (-37.88%)
Mutual labels:  build-tool, build-system
Task
A task runner / simpler Make alternative written in Go
Stars: ✭ 4,282 (+6387.88%)
Mutual labels:  task-runner, build-tool
craftr
The core framework for the Craftr build system.
Stars: ✭ 1 (-98.48%)
Mutual labels:  build-tool, build-system
gow
Missing watch mode for Go commands. Watch Go files and execute a command like "go run" or "go test"
Stars: ✭ 343 (+419.7%)
Mutual labels:  task-runner, build-tool
Cargo Make
Rust task runner and build tool.
Stars: ✭ 895 (+1256.06%)
Mutual labels:  task-runner, build-tool
Mask
🎭 A CLI task runner defined by a simple markdown file
Stars: ✭ 495 (+650%)
Mutual labels:  task-runner, build-tool
elite
Fegeya Elitebuild, small, powerful build system. Written in Rust.
Stars: ✭ 24 (-63.64%)
Mutual labels:  build-tool, build-system
ycm
Extra CMake Modules for YARP and friends
Stars: ✭ 42 (-36.36%)
Mutual labels:  build-tool, build-system
b2
B2 makes it easy to build C++ projects, everywhere.
Stars: ✭ 38 (-42.42%)
Mutual labels:  build-tool, build-system
Fortran-Tools
Fortran compilers, preprocessors, static analyzers, transpilers, IDEs, build systems, etc.
Stars: ✭ 31 (-53.03%)
Mutual labels:  build-tool, build-system
assemble-core
The core assemble application with no presets or defaults. All configuration is left to the implementor.
Stars: ✭ 17 (-74.24%)
Mutual labels:  build-tool, build-system
Air
☁️ Live reload for Go apps
Stars: ✭ 5,257 (+7865.15%)
Mutual labels:  task-runner, build-tool
alfons
🚀 Task runner for Lua and MoonScript.
Stars: ✭ 17 (-74.24%)
Mutual labels:  task-runner, build-tool

Rote

Automate everything.

Build Status Release Downloads

Rote is a multi-threaded task runner and build tool designed to be easy to use, portable, and fast. Automate your entire development workflow using Rote's scriptable task system to implement builds, deployment, and maintenance using a unified script syntax.

Status

Rote is basically unfinished and on hold indefinitely. The actual rule and task running works rather well, and is very fast, but the tool isn't fleshed out, nor is the Rotefile syntax finalized. This is not recommended to be used outside of experiments.

I don't have enough personal bandwidth to work on Rote at this point, and Rote deserves more thought to be put into its design. I fully intend to revisit Rote in the future, as I believe it is something that is sorely needed today as a "spiritual successor" to Make. Lua may or may not be the right script language, though coroutines might make the run process faster.

Go ahead and download Rote, try it out, see what you like and what you don't. I'd love to hear your opinions; I'm always listening via email ([email protected]) or on Twitter (@sagebind).


Features

  • Ridiculously fast.
  • Task parallelization with threading.
  • Incremental builds.
  • Scriptable runtime.
  • Familiar syntax that doesn't get in your way when you need to do some logic in your build.
  • Completely portable binary with no system dependencies.

Compiling

cargo build

This will compile Rote along with a downloaded Lua 5.3 interpreter.

Ubuntu 16.04 Specific

You may need to install libreadline6-dev before compiling.

Usage

To use Rote in your project, create a Rotefile in your project root. A Rotefile is a valid Lua script and should contain valid Lua code. Below is an example Rotefile:

require "cargo"
default "debug"

task("debug", function()
    cargo.build()
end)

task("release", function()
    cargo.build {
        release = true
    }
end)

task("clean", function()
    cargo.clean()
end)

Rote uses Lua as a configuration syntax. You do not need to be familiar with Lua to use Rote; the syntax is very simple to understand!

Now to execute the debug task, we can run rote debug. Rote will look for the Rotefile in the current directory. If the file is in a different directory or has a different name, you can use the -f flag to specify a different location:

rote -f my/Rotefile debug

See the default "debug" near the top? That sets the default task to debug. When rote is run without a task name, it assumes the "default" task should be run. To run the "debug" task then, we can just run

rote

See rote -h for more on command usage.

Batteries included

Since your task runner and build tool typically runs before your dependency managers, it makes little sense for you to have to install a plethora of plugins before running tasks. That's why Rote includes many common tasks built-in directly; Rote comes batteries included.

If there is a reusable component you'd like to use, but keep out of your actual Rotefile, you can save it as a simple Lua module too inside your project repository, or in one of your system's Lua include paths. Then using it in your Rotefile is as simple as requiring the module by name:

require "my_custom_module"

Really? Another build tool?

The ecosystem for build and task tools is already so saturated that Rote can hardly offer anything new, right? Actually, that is the point of Rote entirely. Rote intentionally has less features than other tools like Ant or CMake, because too many features can make a build tool too complicated or slow.

The idea for Rote came from the failures of other existing tools. Here are just a few of the common issues:

  • Nonstandard file formats or confusing configuration syntaxes.
  • Making you write verbose code instead of defining tasks.
  • Non-native tools themselves depend on interpreters to be installed, like Node.js, Python, or Ruby. This introduces additional complexity that does not come from a project itself, but with the build tool.

For more insulting comparisons to your favorite tool, here is a lengthier list:

  • Make is lightweight and simple, but has a horrible, confusing syntax.
  • Autotools are built on Make, but are the opposite of simple.
  • Ant uses XML, which is incredibly verbose for even simple tasks. Plus XML isn't designed for logic.
  • Phing is basically a PHP clone of Ant, so it inherits all the problems of Ant.
  • Rake is written in Ruby.
  • Grunt is a huge beast of a program.
  • CMake? lol.

Acknowledgements

Like most amazing software, Rote stands on the shoulders of the many who provide essential libraries and components, often a thankless job. So here's our thanks to some projects we'd like to highlight that have inspired Rote or are being used in Rote:

  • The Rust Programming Language, for an excellent native programming language
  • Lua, for such a simple, elegant scripting language
  • rust-lua53, for Lua 5.3 bindings for Rust
  • term, for simplifying cross-platform terminal colors
  • GNU Make, for starting it all
  • Jake, for script syntax inspiration
  • Cake, for script syntax inspiration

License

All documentation and source code is licensed under the Apache License, Version 2.0 (Apache-2.0). See the LICENSE file for details.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].