Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

abuild-0.3.0.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

abuild-0.3.0-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

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

Hashes for abuild-0.3.0.tar.gz
Algorithm Hash digest
SHA256 0cbba26cd44aef8ab0ede9a7237d271a7160b97883f8955fccea3ddb54989e13
MD5 3fa275f4cd7dab675a426b80a8826b31
BLAKE2b-256 3572990002dfac49f44bcae69d7232d14889ddc4e9d13b9f9e9b782225f25720

See more details on using hashes here.

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

Hashes for abuild-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 069002514bf083d29302c5bd8ed15920102174bd10d8851d19da10499ecce1aa
MD5 6b73eb09922d4eb5eccc1f8fd9257441
BLAKE2b-256 fbf05fba1894d27f6a80a0b7be7e1ba5cf75e79503e95311f6f96c269fcc42e0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page