/tudas

Simple minimalist command runner

Primary LanguageShellGNU General Public License v3.0GPL-3.0

Tudas

This is an abandoned experiment. My next iteration of this is IBHC.


Tudas is a simple minimalist command runner requiring no installation and no dependencies beyond basic Unix commands. Features and syntax inspired by makesure, implementation inspired by Taskfile.

Design Goals

  • Auditable:
    • Fit all logic in a single script.
    • Avoid dependencies besides what is already found on a typical Unix OS.
    • Allow a reasonably experienced developer to understand the code in an afternoon.
  • No installation: Include the script in your code repository so developers don't have to download or install anything.
  • Worse is better: It doesn't need to be perfect; it just needs to work well and avoid footguns.
  • Simple to use:
    • Target audience is developers or sysadmins who can write basic shell scripts.
    • The Tudasfile should be simple to understand without going to look up documentation.
    • A new Tudasfile should be simple to write from scratch after a few minutes with this README.

Hello World

Add the tudas script to your Git repository. Then create a Tudasfile that looks like this:

@goal default
@depends_on cowsay_installed
    cowsay "Hello, world!"

@goal cowsay_installed
@reached_if command -v cowsay &> /dev/null
    # I'm writing this on Fedora, so we use `dnf` here:
    sudo dnf install --assumeyes cowsay

Now when you run ./tudas you should see:

goal "cowsay_installed"...

[lots of dnf output here]

Installed:
  cowsay-3.04-17.fc35.noarch

Complete!
goal "cowsay_installed": [success]
goal "default"...
 _______________
< Hello, world! >
 ---------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
goal "default": [success]

The next time you run ./tudas, you should only see this:

goal "cowsay_installed": [already satisfied]
goal "default"...
 _______________
< Hello, world! >
 ---------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
goal "default": [success]

A more complete real-world usage can be found in my partner's laptop configuration repository. I personally use this for configuring workstations, however I intend to also use this for server configuration (think "poor man's Ansible") and hobby code projects (replacing things like make install etc).