Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kennethreitz/bake

Bake — the strangely familiar workflow utility.
https://github.com/kennethreitz/bake

bake bakefile bash homebrew-tap invoke make makefile rake shell shell-script shell-scripting

Last synced: about 2 months ago
JSON representation

Bake — the strangely familiar workflow utility.

Awesome Lists containing this project

README

        

$ bake — a s☿rangely familiar workflow utility.            


~ under development ~  


$ cat Bakefile $ bake install
install: install/node install/python + Executing install/node:
echo 'All ready!' | yarn install v1.17.3
install/full: install/system install | info No lockfile found.
install/python: @skip:key=Pipfile.lock | [1/4] Resolving packages...
pipenv install | [2/4] Fetching packages...
install/node: @skip:key=yarn.lock | [3/4] Linking dependencies...
yarn install | [4/4] Building fresh packages...
install/system: @confirm | success Saved lockfile.
brew install pipenv yarn | Done in 0.05s.
+ Executing install/python:
python/format: | Installing dependencies from …
black . + Executing install:
| All ready!
utils/argv: + Done.
set -u && echo "$HELLO: $@"
Rinse and repeat…
utils/deploy: @confirm:secure
exit 0



~ see bake's own Bakefile ~            

## What's in the oven?


  • A Bakefile, which looks and feels like the good parts of a Makefile.

  • Except, you can write real bash code!      Any and all syntax is accepted — no magic going on here. ;)

  • Unlike Makefile, you may utilize      [ 4 × U+0020 a.k.a. “spaces”] for indentation.

  • Environment variables are explicitly passed or whitelisted (--allow), not inherited from the parent shell.

  • Tasks can be run safely and reliably. Rest assured that scripts are executed from the project root directory.

  • There are many other benefits to this design, that have yet to be expressed in this document.

------------------

### Automate Workflows — Bootstrap Development Environments — Commit The Tasks

I love using `Makefile` for one-off **tasks** in projects.

The problem with doing this is that you can't use familiar bash–isms when doing so, as **GNU Make** doesn't use the familiar **Bash** syntax, nor does it allow for simple ad–hoc use of arbitrary scripting languages (e.g. **Python**).

project seeks to bridge all of these worlds into a single entrypoint — ideal for cross–language repositories

-------------------

## Bootstraping `bake` —                                          (for local development workflows)

#### **Various `*`nix Distributions** (Python 3.6+):

The primary installation method of `bake`, today, is via `pip`:

```console
$ pip3 install bake-cli
Collecting bake-cli

Successfully installed bake-cli-0.2.0 delegator.py-0.1.1 pexpect-4.7.0 ptyprocess-0.6.0
```

This will always work, but it will not be the default recommendation.

#### MacOS (Previously known as OS X)

Installation of `bake` will (soon) be very easy, with Homebrew. The formula needs a subtle adjustment — if you want to help, [here's the repo](http://github.com/kennethreitz/homebrew--)!

```console
$ brew install kennethreitz/-/bake
==> Installing bake from kennethreitz/-

🍺 /usr/local/Cellar/bake/19-09-16: 1,563 files, 16.7MB, built in 11 seconds
```

Homebrew will be the primary installation target of `bake`.

✨🍰✨

## Bootstraping `bake` —                                             (for production workflows)

#### Containers! *e.g.* Docker.

You an also run `bake` via Docker! An official image has been made available [on DockerHub](https://cloud.docker.com/u/kennethreitz/repository/docker/kennethreitz/bake):

```console
$ docker run kennethreitz/bake Wed Sep 18 10:11:01 2019
No Bakefile found!
Usage: [OPTIONS] [TASK] [ARGUMENTS]...

$ bake — the strangely familiar task–runner.

Options:
-b, --bakefile PATH The Bakefile to use.
-l, --list Lists available tasks (and their dependencies).
-h, --help Show this message and exit.
--allow TEXT Whitelist an environment variable for use.
--no-deps Do not run dependent tasks.
--yes Set medium–security prompts to yes.
--continue Continue, if a task fails.
-i, --interactive Run in interactive mode.
--insecure Inherit parent shell's environment variables.
-s, --silent Reduce output.
-e, --environ-json TEXT Provide environment variables via JSON.
-j, --json Output in JSON format (stdout).
```

- **`Bakefile`** is expected to live at **`/app/Bakefile`**.
- If you inherit from this image, **`ONBUILD`** directives will automatically copy your application code (build context) into the container, into **`/app`**.

**Bonus Points**: this image is also [available on the GitHub Package Registry](https://github.com/kennethreitz/bake/packages/24444) (beta).

---------------

### Team & Workflow Management

You can use `bake` to bootstrap your team's development environments, ensuring a smooth and optimal workflow & local development experience.

Here's an example, using the `Bakefile` provided above:

```console
$ bake install
+ Executing install/node:
| yarn install v1.17.3
| info No lockfile found.
| [1/4] Resolving packages...
| [2/4] Fetching packages...
| [3/4] Linking dependencies...
| [4/4] Building fresh packages...
| success Saved lockfile.
| Done in 0.05s.
+ Executing install/python:
| Installing dependencies from Pipfile.lock (f10bb0)…
+ Executing install:
+ Done.
```

### Skip Steps, Automatically

Because we configured `yarn.lock` and `Pipfile.lock` as cache keys,
bake will automatically skip the configured steps— only running them
when the files are changed!

So, let's run that command again :)

```console
$ bake install
+ Skipping install/node:
+ Skipping install/python.
+ Executing install:
+ Done.
```

Neat, eh?

### Arguments & Parameters: Passing Values In

```console
$ bake utils/argv KEY=VALUES 1 2 3
+ Executing utils/argv:
| VALUES: 1 2 3
+ Done.
```

### (Optional) Non-Deterministic Confirmation Dialouges

```console
$ bake utils/deploy
What is 10 times 2?: 7
Aborted.
```

---------------------

### Community / Contrib

- [Visual Studio Code Extension](https://marketplace.visualstudio.com/items?itemName=kennethreitz.bake) — highlights `Bakefile`— adequately.

----------------------

 


This open source software has been designed, for you, with much joy, by the hands of: