abuild


Nameabuild JSON
Version 0.3.0 PyPI version JSON
download
home_pageNone
SummaryA simple, language agnostic build tool
upload_time2024-08-29 19:46:56
maintainerNone
docs_urlNone
authorNone
requires_pythonNone
licenseBSD-3-Clause
keywords language agnostic build tool monorepo
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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&mdash;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"
}
        
Elapsed time: 0.97107s