2019-09-15 22:43:29 -04:00
2019-09-15 22:32:40 -04:00
fix
2019-09-15 13:46:20 -04:00
2019-09-15 19:51:50 -04:00
2019-09-15 19:51:50 -04:00
2019-09-15 19:51:50 -04:00
2019-09-15 19:51:50 -04:00
2019-09-15 22:43:29 -04:00
2019-09-15 22:29:09 -04:00

bake— a strangely familiar Bash task runner.

I love using Makefiles for one-off tasks in projects. The problem with doing this, is you can't use familiar bashisms when doing so, as GNU Make doesn't use the familiar Bash syntax. This project seeks to bridge these works.

WORK IN PROGRESS

$ bake -h
Usage: bake [OPTIONS] [TASK] [ARGUMENTS]...

  bake — a strangely familiar Bash taskrunner.

Options:
  -b, --bakefile TEXT
  -l, --list               Lists available tasks from Bakefile.
  --allow TEXT             Whitelist an environment variable for use.
  --yes                    Set mediumsecurity prompts to yes.
  -c, --continue           Fail immediately, if any task fails.
  --insecure               Use parent shell's environment variables.
  -s, --silent             Reduce output.
  -e, --environ-json TEXT  environment variables, in JSON format.
  -j, --json               Output in JSON format (stdout).
  -h, --help               Show this message and exit.

Features 'n Things

  • A Bakefile, which looks and feels like the good parts of a Makefile.
  • Except, you can write real bash code!
  • Environment variables are explicitly passed or whitelisted (allowed), not inherinted from the parent shell.
  • Unlike Makefile, either tabs or 4 spaces can be used.
  • Tasks can be run safely and reliably. Rest assured that scripts are executed from the project root (e.g. location of the Bakefile).

bake icon

$ cat Bakefile

full-install: system-deps install
install: node-deps python-deps
format:
    black .

argv-example:
    set -euxe
    echo "HELLO, $WHO"
    echo $@

dangerous-example: @confirm:secure
    # This will make you do a
    # simple math question before proceeding.
    rm -fr *

python-deps:
    pipenv install
node-deps:
    yarn install

system-deps:
    brew install pipenv

$ bake --list

 - format
 - full-install
 - install
 - env
 - argv-example
 - dangerous-example
 - python-deps
 - node-deps
 - system-deps

$ bake --silent format

All done! ✨ 🍰 ✨
7 files left unchanged.

$ bake install

 · Executing 'node-deps':
yarn install v1.17.3
[1/4] 🔍  Resolving packages...
success Already up-to-date.
✨  Done in 0.03s.
 · Executing 'python-deps':
Installing dependencies from Pipfile.lock (2ee04c)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 8/8 — 00:00:01
 · Done.

$ bake argv-example WHO=you 1 2 3

· Executing 'argv-example':
++ echo 'HELLO, you'
HELLO, you
++ echo '[1,' 2, '3]'
[1, 2, 3]
 · Done.

$ bake dangerous-example

· Executing '@confirm:secure' ·
   What is 10 times 2?: 7
· Aborted.

Installation

Install bake via (soon):

$ brew install kennethreitz/-/bake --HEAD
Languages
Python 63.8%
Perl 24.3%
Shell 9.1%
Dockerfile 2.8%