# Welcome to abuild
When I was looking for a build tool for a (fairly simple) monorepo, I noticed
that although there are many great ones, they all require considerable setup or
they only work with one particular language. I was rather looking for a basic build tool
that needs almost no setup and can handle a handful services in one repository
with some frontend, some backend and maybe a bit of machine learning code.
My goals for this project are
- Setting up abuild for a simple setup should be (almost) no effort.
- Code that hasn't changed shouldn't be re-build (that's kind of the point of a build tool).
- If I write a service in a different language, I should be able to use the same build tool.
To do this, `abuild` acts as a glue between existing language specific tools—in that
sense calling it a "build tool" might almost be promising too much. It's rather a build tool
manager for monorepos.
<!--
Here is some code to setup the repository so that I can use cram tests
$ mkdir backend
$ touch backend/tox.ini
$ touch backend/Dockerfile
$ mkdir frontend
$ echo '{"scripts": {"test": "fake", "build": "fake"}}' > frontend/package.json
$ mkdir tools
-->
## Getting started
You can install `abuild` from pypi with `pip install abuild`.
This example looks at a very simple monorepo with a python backend that gets build into a docker container and a javascript frontend that gets build with `npm run build`. There is also a tools directory that shouldn't be build:
$ tree
.
|-- backend
| |-- Dockerfile
| `-- tox.ini
|-- frontend
| `-- package.json
`-- tools
3 directories, 3 files
To set up `abuild` in a new monorepo, you can run
$ abuild parse > abuild.yaml
$ cat abuild.yaml
components:
- path: backend
steps:
- cmd: tox
- cmd: docker buildx build .
- path: frontend
steps:
- cmd: npm run test
- cmd: npm run build
As you can see, `abuild` understood the basics of the repository and created the skeleton of a config file. Feel free to update the config file by hand. For example, you could add names for the steps by setting `components.[].steps.[].name`. You could also delete (or add) steps to fit your needs.
To build your services with `abuild`, you simply run `abuild build` in your project root. `abuild` maintains a state file `.abuild_state.json` that tracks your build status. Currently, the state is not synchronized between machines (which can be a bit of a hindrance of CI). However, you can commit the `.abuild_state.json` to your revision control system.
## Changelog
### v0.2.0
# New features
- general:
- Basic support for tags
- support for deselecting tags
### v0.3.0
# New features
- General: directory parsing supports makefiles
Raw data
{
"_id": null,
"home_page": null,
"name": "abuild",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "language agnostic, build tool, monorepo",
"author": null,
"author_email": "Ingo Fruend <github@ingofruend.net>",
"download_url": "https://files.pythonhosted.org/packages/35/72/990002dfac49f44bcae69d7232d14889ddc4e9d13b9f9e9b782225f25720/abuild-0.3.0.tar.gz",
"platform": null,
"description": "# Welcome to abuild\n\nWhen I was looking for a build tool for a (fairly simple) monorepo, I noticed\nthat although there are many great ones, they all require considerable setup or\nthey only work with one particular language. I was rather looking for a basic build tool\nthat needs almost no setup and can handle a handful services in one repository\nwith some frontend, some backend and maybe a bit of machine learning code.\n\nMy goals for this project are\n- Setting up abuild for a simple setup should be (almost) no effort.\n- Code that hasn't changed shouldn't be re-build (that's kind of the point of a build tool).\n- If I write a service in a different language, I should be able to use the same build tool.\n\nTo do this, `abuild` acts as a glue between existing language specific tools—in that\nsense calling it a \"build tool\" might almost be promising too much. It's rather a build tool\nmanager for monorepos.\n\n<!--\nHere is some code to setup the repository so that I can use cram tests\n $ mkdir backend\n $ touch backend/tox.ini\n $ touch backend/Dockerfile\n $ mkdir frontend\n $ echo '{\"scripts\": {\"test\": \"fake\", \"build\": \"fake\"}}' > frontend/package.json\n $ mkdir tools\n-->\n\n## Getting started\n\nYou can install `abuild` from pypi with `pip install abuild`.\n\nThis example looks at a very simple monorepo with a python backend that gets build into a docker container and a javascript frontend that gets build with `npm run build`. There is also a tools directory that shouldn't be build:\n $ tree\n .\n |-- backend\n | |-- Dockerfile\n | `-- tox.ini\n |-- frontend\n | `-- package.json\n `-- tools\n \n 3 directories, 3 files\n\nTo set up `abuild` in a new monorepo, you can run\n\n $ abuild parse > abuild.yaml\n $ cat abuild.yaml\n components:\n - path: backend\n steps:\n - cmd: tox\n - cmd: docker buildx build .\n - path: frontend\n steps:\n - cmd: npm run test\n - cmd: npm run build\n \n\nAs you can see, `abuild` understood the basics of the repository and created the skeleton of a config file. Feel free to update the config file by hand. For example, you could add names for the steps by setting `components.[].steps.[].name`. You could also delete (or add) steps to fit your needs.\n\nTo build your services with `abuild`, you simply run `abuild build` in your project root. `abuild` maintains a state file `.abuild_state.json` that tracks your build status. Currently, the state is not synchronized between machines (which can be a bit of a hindrance of CI). However, you can commit the `.abuild_state.json` to your revision control system.\n\n## Changelog\n\n### v0.2.0\n# New features\n- general:\n - Basic support for tags\n - support for deselecting tags\n### v0.3.0\n# New features\n- General: directory parsing supports makefiles\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "A simple, language agnostic build tool",
"version": "0.3.0",
"project_urls": null,
"split_keywords": [
"language agnostic",
" build tool",
" monorepo"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "fbf05fba1894d27f6a80a0b7be7e1ba5cf75e79503e95311f6f96c269fcc42e0",
"md5": "6b73eb09922d4eb5eccc1f8fd9257441",
"sha256": "069002514bf083d29302c5bd8ed15920102174bd10d8851d19da10499ecce1aa"
},
"downloads": -1,
"filename": "abuild-0.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "6b73eb09922d4eb5eccc1f8fd9257441",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 8363,
"upload_time": "2024-08-29T19:46:54",
"upload_time_iso_8601": "2024-08-29T19:46:54.453511Z",
"url": "https://files.pythonhosted.org/packages/fb/f0/5fba1894d27f6a80a0b7be7e1ba5cf75e79503e95311f6f96c269fcc42e0/abuild-0.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3572990002dfac49f44bcae69d7232d14889ddc4e9d13b9f9e9b782225f25720",
"md5": "3fa275f4cd7dab675a426b80a8826b31",
"sha256": "0cbba26cd44aef8ab0ede9a7237d271a7160b97883f8955fccea3ddb54989e13"
},
"downloads": -1,
"filename": "abuild-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "3fa275f4cd7dab675a426b80a8826b31",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 14225,
"upload_time": "2024-08-29T19:46:56",
"upload_time_iso_8601": "2024-08-29T19:46:56.094158Z",
"url": "https://files.pythonhosted.org/packages/35/72/990002dfac49f44bcae69d7232d14889ddc4e9d13b9f9e9b782225f25720/abuild-0.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-29 19:46:56",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "abuild"
}