A simple, language agnostic build tool
Project description
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.
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file abuild-0.3.0.tar.gz
.
File metadata
- Download URL: abuild-0.3.0.tar.gz
- Upload date:
- Size: 14.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0cbba26cd44aef8ab0ede9a7237d271a7160b97883f8955fccea3ddb54989e13 |
|
MD5 | 3fa275f4cd7dab675a426b80a8826b31 |
|
BLAKE2b-256 | 3572990002dfac49f44bcae69d7232d14889ddc4e9d13b9f9e9b782225f25720 |
File details
Details for the file abuild-0.3.0-py3-none-any.whl
.
File metadata
- Download URL: abuild-0.3.0-py3-none-any.whl
- Upload date:
- Size: 8.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 069002514bf083d29302c5bd8ed15920102174bd10d8851d19da10499ecce1aa |
|
MD5 | 6b73eb09922d4eb5eccc1f8fd9257441 |
|
BLAKE2b-256 | fbf05fba1894d27f6a80a0b7be7e1ba5cf75e79503e95311f6f96c269fcc42e0 |