{"id":13501553,"url":"https://github.com/kennethreitz/bake","last_synced_at":"2025-05-14T18:07:03.713Z","repository":{"id":35116870,"uuid":"208441172","full_name":"kennethreitz/bake","owner":"kennethreitz","description":"Bake — the strangely familiar workflow utility.","archived":false,"fork":false,"pushed_at":"2024-11-25T05:21:47.000Z","size":21757,"stargazers_count":635,"open_issues_count":15,"forks_count":25,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-05-11T22:03:09.505Z","etag":null,"topics":["bake","bakefile","bash","homebrew-tap","invoke","make","makefile","rake","shell","shell-script","shell-scripting"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kennethreitz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"kennethreitz"}},"created_at":"2019-09-14T13:02:29.000Z","updated_at":"2025-04-27T10:49:53.000Z","dependencies_parsed_at":"2024-03-30T16:26:24.563Z","dependency_job_id":"a790063f-dc6d-4ef0-ac4d-fe432a1a027d","html_url":"https://github.com/kennethreitz/bake","commit_stats":{"total_commits":655,"total_committers":13,"mean_commits":50.38461538461539,"dds":0.04122137404580151,"last_synced_commit":"619a05c0709b51770c633edf3552ff6db18f2680"},"previous_names":["kennethreitz-archive/bake"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennethreitz%2Fbake","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennethreitz%2Fbake/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennethreitz%2Fbake/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennethreitz%2Fbake/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kennethreitz","download_url":"https://codeload.github.com/kennethreitz/bake/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254198515,"owners_count":22030966,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bake","bakefile","bash","homebrew-tap","invoke","make","makefile","rake","shell","shell-script","shell-scripting"],"created_at":"2024-07-31T22:01:41.438Z","updated_at":"2025-05-14T18:06:58.704Z","avatar_url":"https://github.com/kennethreitz.png","language":"Python","readme":"\n\n\u003cspan align=\"center\"\u003e\u003cpre align=\"center\"\u003e\u003cimg src=\"https://github.com/kennethreitz/bake/blob/master/ext/bake.png?raw=true\" /\u003e\u003c/pre\u003e\u003c/span\u003e\n\n\u003cp align=\"center\"\u003e\u003ccode\u003e$ \u003cstrong\u003ebake\u003c/strong\u003e — a s☿rangely familiar workflow utility. \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/code\u003e\u003c/p\u003e\n\u003cpre\u003e\n\n\u003cp align=\"center\"\u003e\u003csmall\u003e~ under development ~\u0026nbsp;\u0026nbsp;\u003c/small\u003e\u003c/p\u003e\n\n\u003cdiv align=\"left\"\u003e\n\u003ccode\u003e$ \u003cstrong\u003ecat Bakefile\u003c/strong\u003e                                                $ \u003cstrong\u003ebake install\u003c/strong\u003e\n\u003cstrong\u003einstall\u003c/strong\u003e: install/node install/python                            + \u003cstrong\u003eExecuting install/node\u003c/strong\u003e:\n    echo 'All ready!'                                           |  yarn install v1.17.3\n\u003cstrong\u003einstall/full\u003c/strong\u003e: install/system install                            |  info No lockfile found.\n\u003cstrong\u003einstall/python\u003c/strong\u003e: @skip:key=Pipfile.lock                          |  [1/4] Resolving packages...\n    pipenv install                                              |  [2/4] Fetching packages...\n\u003cstrong\u003einstall/node\u003c/strong\u003e: @skip:key=yarn.lock                               |  [3/4] Linking dependencies...\n    yarn install                                                |  [4/4] Building fresh packages...\n\u003cstrong\u003einstall/system\u003c/strong\u003e: @confirm                                        |  success Saved lockfile.\n    brew install pipenv yarn                                    |  Done in 0.05s.\n                                                                + \u003cstrong\u003eExecuting install/python\u003c/strong\u003e:\n\u003cstrong\u003epython/format\u003c/strong\u003e:                                                  |  Installing dependencies from …\n    black .                                                     + \u003cstrong\u003eExecuting install\u003c/strong\u003e:\n                                                                |  All ready!\n\u003cstrong\u003eutils/argv\u003c/strong\u003e:                                                     + \u003cstrong\u003eDone\u003c/strong\u003e.\n    set -u \u0026\u0026 echo \"$HELLO: $@\"                                 \n                                                                Rinse and repeat…\n\u003cstrong\u003eutils/deploy\u003c/strong\u003e: @confirm:secure                 \n    exit 0\u003c/code\u003e                                              \n    \u003c/div\u003e                                                     \n\u003c/pre\u003e\n\u003cp align=\"center\"\u003e\u003csmall\u003e~ \u003ca href=\"https://github.com/kennethreitz/bake/blob/master/Bakefile\"\u003esee \u003cstrong\u003ebake\u003c/strong\u003e's own \u003ccode\u003e\u003cstrong\u003eBakefile\u003c/strong\u003e\u003c/code\u003e\u003c/a\u003e ~\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/small\u003e\u003c/p\u003e\n\n## What's in the oven?\n\n\u003cul\u003e\n    \u003cli\u003eA \u003ccode\u003eBakefile\u003c/code\u003e, which \u003cstrong\u003elooks\u003c/strong\u003e and \u003cstrong\u003efeels\u003c/strong\u003e like the good parts of a \u003ccode\u003e\u003cstrong\u003eMakefile\u003c/strong\u003e\u003c/code\u003e.\u003c/li\u003e\n    \u003cli\u003eExcept, you can write real \u003ccode\u003e\u003cstrong\u003ebash\u003c/strong\u003e\u003c/code\u003e code!\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Any and all syntax is accepted — no magic going on here. ;)\u003c/li\u003e\n\u003cli\u003eUnlike \u003ccode\u003e\u003cstrong\u003eMakefile\u003c/strong\u003e\u003c/code\u003e, you may utilize \u003ccode\u003e\u003cstrong\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/strong\u003e\u003c/code\u003e \u003cstrong\u003e[\u003c/strong\u003e\u003ccode\u003e 4 × \u003ca href=\"https://unicode.org/cldr/utility/character.jsp?a=0020\"\u003eU+0020\u003c/a\u003e \u003cem\u003ea.k.a.\u003c/em\u003e “spaces”\u003c/code\u003e\u003cstrong\u003e]\u003c/strong\u003e for indentation.\u003c/li\u003e\n    \u003cli\u003eEnvironment variables are explicitly passed or whitelisted (\u003ccode\u003e\u003cstrong\u003e--allow\u003c/strong\u003e\u003c/code\u003e), not inherited from the parent shell.\u003c/li\u003e\n\u003cli\u003eTasks can be run safely and reliably. Rest assured that scripts are executed from the project root directory.\u003c/li\u003e\n\u003cli\u003eThere are many other benefits to this design, that have yet to be expressed in this document.\u003c/li\u003e\n\u003c/ul\u003e\n\n\n------------------\n\n### Automate Workflows — Bootstrap Development Environments — Commit The Tasks\n\n\nI love using `Makefile` for one-off **tasks** in projects.\n\nThe 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**).\n\n\nproject seeks to bridge all of these worlds into a single entrypoint — ideal for cross–language repositories\n\n-------------------\n\n## Bootstraping `bake` — \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; (for local development workflows)\n\n\n#### **Various `*`nix Distributions** (Python 3.6+):\n\nThe primary installation method of `bake`, today, is via `pip`:\n\n```console\n$ pip3 install bake-cli\nCollecting bake-cli\n…\nSuccessfully installed bake-cli-0.2.0 delegator.py-0.1.1 pexpect-4.7.0 ptyprocess-0.6.0\n```\n\n\nThis will always work, but it will not be the default recommendation.\n\n#### MacOS (Previously known as OS X)\n\nInstallation 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--)!\n\n```console\n$ brew install kennethreitz/-/bake\n==\u003e Installing bake from kennethreitz/-\n…\n🍺  /usr/local/Cellar/bake/19-09-16: 1,563 files, 16.7MB, built in 11 seconds\n```\n\nHomebrew will be the primary installation target of `bake`.\n\n✨🍰✨\n\n## Bootstraping `bake` — \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; (for production workflows)\n\n#### Containers! *e.g.* Docker.\n\nYou 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):\n\n```console\n$ docker run kennethreitz/bake                                                                                                                                                                       Wed Sep 18 10:11:01 2019\nNo Bakefile found!\nUsage:  [OPTIONS] [TASK] [ARGUMENTS]...\n\n $ bake — the strangely familiar task–runner.\n\nOptions:\n  -b, --bakefile PATH      The Bakefile to use.\n  -l, --list               Lists available tasks (and their dependencies).\n  -h, --help               Show this message and exit.\n  --allow TEXT             Whitelist an environment variable for use.\n  --no-deps                Do not run dependent tasks.\n  --yes                    Set medium–security prompts to yes.\n  --continue               Continue, if a task fails.\n  -i, --interactive        Run in interactive mode.\n  --insecure               Inherit parent shell's environment variables.\n  -s, --silent             Reduce output.\n  -e, --environ-json TEXT  Provide environment variables via JSON.\n  -j, --json               Output in JSON format (stdout).\n```\n\n- **`Bakefile`** is expected to live at **`/app/Bakefile`**. \n- If you inherit from this image, **`ONBUILD`** directives will automatically copy your application code (build context) into the container, into **`/app`**.\n\n**Bonus Points**: this image is also [available on the GitHub Package Registry](https://github.com/kennethreitz/bake/packages/24444) (beta).\n\n---------------\n\n\n### Team \u0026 Workflow Management\n\nYou can use `bake` to bootstrap your team's development environments, ensuring a smooth and optimal workflow \u0026 local development experience.\n\nHere's an example, using the `Bakefile` provided above:\n\n```console\n$ bake install\n + Executing install/node:\n |  yarn install v1.17.3\n |  info No lockfile found.\n |  [1/4] Resolving packages...\n |  [2/4] Fetching packages...\n |  [3/4] Linking dependencies...\n |  [4/4] Building fresh packages...\n |  success Saved lockfile.\n |  Done in 0.05s.\n + Executing install/python:\n |  Installing dependencies from Pipfile.lock (f10bb0)…\n + Executing install:\n + Done.\n```\n\n### Skip Steps, Automatically\n\nBecause we configured `yarn.lock` and `Pipfile.lock` as cache keys,\nbake will automatically skip the configured steps— only running them\nwhen the files are changed!\n\nSo, let's run that command again :)\n\n```console\n$ bake install\n + Skipping install/node:\n + Skipping install/python.\n + Executing install:\n + Done.\n```\n\nNeat, eh?\n\n### Arguments \u0026 Parameters: Passing Values In\n\n```console\n$ bake utils/argv KEY=VALUES 1 2 3\n + Executing utils/argv:\n |  VALUES: 1 2 3\n + Done.\n ```\n\n### (Optional) Non-Deterministic Confirmation Dialouges\n\n```console\n$ bake utils/deploy\n   What is 10 times 2?: 7\nAborted.\n```\n\n---------------------\n\n\n### Community / Contrib\n\n- [Visual Studio Code Extension](https://marketplace.visualstudio.com/items?itemName=kennethreitz.bake) — highlights `Bakefile`— adequately.\n\n----------------------\n\n\u003cp\u003e\u0026nbsp;\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    This open source software has been designed, for \u003cstrong\u003eyou\u003c/strong\u003e, with much joy, by the hands of:\n\u003c/p\u003e\n\n\u003cp\u003e\u0026nbsp;\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n        \u003ca href=\"https://kennethreitz.org/\" rel=\"nofollow\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/psf/requests/master/ext/kr.png\" align=\"center\" style=\"max-width:100%;\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\u0026nbsp;\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003clarge\u003e☿\u003c/large\u003e\n\u003c/p\u003e\n","funding_links":["https://github.com/sponsors/kennethreitz"],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkennethreitz%2Fbake","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkennethreitz%2Fbake","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkennethreitz%2Fbake/lists"}