{"id":37607388,"url":"https://github.com/flyingcircusio/batou","last_synced_at":"2026-01-16T10:13:32.598Z","repository":{"id":42001268,"uuid":"206573151","full_name":"flyingcircusio/batou","owner":"flyingcircusio","description":"batou is a universal, fractal deployment utility using Python.","archived":false,"fork":false,"pushed_at":"2025-11-24T12:14:21.000Z","size":4840,"stargazers_count":52,"open_issues_count":115,"forks_count":11,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-11-28T01:22:31.515Z","etag":null,"topics":["automation","continous-delivery","continous-deployment","deployment","devops"],"latest_commit_sha":null,"homepage":"https://batou.readthedocs.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flyingcircusio.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.d/.gitkeep","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-09-05T13:40:03.000Z","updated_at":"2025-11-24T12:01:42.000Z","dependencies_parsed_at":"2023-11-28T14:29:07.502Z","dependency_job_id":"64485c5c-3a46-4022-b178-eb7b06829e12","html_url":"https://github.com/flyingcircusio/batou","commit_stats":null,"previous_names":[],"tags_count":185,"template":false,"template_full_name":null,"purl":"pkg:github/flyingcircusio/batou","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingcircusio%2Fbatou","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingcircusio%2Fbatou/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingcircusio%2Fbatou/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingcircusio%2Fbatou/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flyingcircusio","download_url":"https://codeload.github.com/flyingcircusio/batou/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingcircusio%2Fbatou/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["automation","continous-delivery","continous-deployment","deployment","devops"],"created_at":"2026-01-16T10:13:32.485Z","updated_at":"2026-01-16T10:13:32.573Z","avatar_url":"https://github.com/flyingcircusio.png","language":"Python","readme":"\u003cimg width=\"150\" src=\"https://batou.readthedocs.io/en/latest/_static/batou.png\"\u003e\n\nbatou helps you to automate your application deployments:\n\n* You create a model of your deployment using a simple but powerful Python API.\n* You configure how the model applies to hosts in different environments.\n* You verify and run the deployment with the batou utility.\n\nGetting started with a new project is easy:\n\n```console\nmkdir myproject\ncd myproject\ngit init\ncurl -sL https://raw.githubusercontent.com/flyingcircusio/batou/main/bootstrap | sh\ngit commit -m \"Start a batou project.\"\n```\n\nHere's a minimal application model:\n\n```console\n$ mkdir -p components/myapp\n$ cat \u003e components/myapp/component.py\nfrom batou.component import Component\nfrom batou.lib.python import VirtualEnv, Package\nfrom batou.lib.supervisor import Program\n\nclass MyApp(Component):\n\n    def configure(self):\n        venv = VirtualEnv('2.7')\n        self += venv\n        venv += Package('myapp')\n        self += Program('myapp',\n            command='bin/myapp')\n```\n\nAnd here's a minimal environment:\n\n```console\n$ mkdir environments\n$ cat \u003e environments/dev/environment.cfg\n[environment]\nconnect_method = local\n\n[hosts]\nlocalhost = myapp\n```\n\nTo deploy this, you run:\n\n```console\n$ ./batou deploy dev\n```\n\nCheck the [detailed documentation](http://batou.readthedocs.org) to get going with a more ambitious project.\n\n\n## Features\n\n* Separate your application model from environments\n* Supports idempotent operation for incremental deployments\n* Deploy to multiple hosts simultaneously\n* Automated dependency resolution for multi-host scenarios\n* No runtime requirements on your application\n* Encrypted secrets with multiple access levels: store your\n  SSL certificates, SSH keys, service secrets and more to get true 1-button deployments.\n* Deploy to local machines, Vagrant, or any SSH host\n* Broad SSH feature support by using OpenSSH through execnet\n* Only few dependencies required on the remote host\n* Ships with a library of components for regularly needed tasks\n* self-bootstrapping and self-updating - no additional scripting needed\n\n## License\n\nThe project is licensed under the 2-clause BSD license.\n\n## Hacking\n\n* Make sure `mercurial` and `subversion` are installed and in `$PATH`.\n* Run `./develop.sh` to create a local virtualenv with everything set up.\n* Run the test suite using: `bin/tox`\n* Build the documentation using: `cd doc; make`\n* Set up GPG for the examples with `export GNUPGHOME=\u003cDIRECTORY OF BATOU HERE\u003e/src/batou/secrets/tests/fixture/gnupg`\n* Make sure [age](https://github.com/FiloSottile/age) is installed and in `$PATH` for age encryption support.\n\n## Development and release process\n\n* Changes should be accompanied with a changelog entry. Use `./changelog.sh` to create one.\n* Releasing will create a tag and publishes the package to pypi. Use `./release-this.sh` to create a release.\n\n## Changelog\n\nSee [CHANGES.md](./CHANGES.md).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflyingcircusio%2Fbatou","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflyingcircusio%2Fbatou","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflyingcircusio%2Fbatou/lists"}