Modular build framework
Project description
Builddrone
|
|
Project | GitHub · PyPI |
| Environment |
|
Builddrone is a JSON-driven build orchestration framework and command-line interface for Python projects. A pipeline is made up of named stages, and each stage executes an ordered list of registered modules.
Installation
Install the latest released version from PyPI:
python -m pip install builddrone
For local development, install the project in editable mode together with its development tools from the repository root:
python -m pip install -e ".[dev]"
Builddrone requires Python 3.10 or newer.
Blueprint format
Builddrone loads blueprint.json from the current working directory. The
top-level keys are stage names, and each stage contains module steps:
{
"build": [
{
"module": "python.venv",
"args": {"source": ".venv"}
},
{
"module": "python.install",
"args": {"requirements": "requirements.txt"}
},
{
"module": "python.run",
"args": {"source": "main.py"}
}
]
}
Relative paths are resolved from the directory containing blueprint.json.
Each step runs only after the preceding step succeeds.
Command-line usage
Run a stage from the directory containing its blueprint:
cd example/python
python -m builddrone build
python -m builddrone cleanup
The Python example creates .venv automatically, installs its requirements,
lints and runs main.py, and builds a wheel and source distribution with
python -m build. The separate cleanup stage removes the temporary
environment and generated build artifacts.
The Robot Framework example runs similarly:
cd example/robotframework
python -m builddrone test
python -m builddrone cleanup
Its robotframework.test step writes results/output.xml, and
robotframework.rebot converts that result into reports under
results/rebot.
Built-in modules
Filesystem
| Module | Arguments | Purpose |
|---|---|---|
filesystem.copy |
source, destination |
Copy a directory tree. |
filesystem.cleanup |
files, folders |
Remove listed files and folders. |
Python
| Module | Arguments | Purpose |
|---|---|---|
python.venv |
source |
Select an environment, creating it with pip if needed. An empty source resets the runner. |
python.install |
requirements or source |
Install requirements or a package with pip. |
python.run |
source |
Run a Python source file. |
python.build |
none | Run python -m build. |
python.pylint |
paths, files, ignore |
Run Pylint against paths or individual files. |
Robot Framework
Both Robot Framework modules accept an ordered arguments list and an
optional cwd:
| Module | Purpose |
|---|---|
robotframework.test |
Run python -m robot. |
robotframework.rebot |
Run python -m robot.rebot to post-process results. |
Each string in the list is emitted as a standalone command-line argument. Each
single-entry object is emitted as a key followed by its value; list values
emit the key followed by multiple values, and boolean true emits only the
key. This keeps positional arguments explicit and avoids using null as a
sentinel:
{
"module": "robotframework.test",
"args": {
"arguments": [
{"--outputdir": "results"},
"tests"
]
}
}
Using Builddrone as a framework
Built-in modules are registered by ExecutionEngine. Custom modules can be
added by passing them to the constructor:
from builddrone.base_module import BaseModule
from builddrone.execution_engine import ExecutionEngine
class GreetingModule(BaseModule):
def run(self, runner, args):
runner.logger.info("Hello from %s", args.get("name", "Builddrone"))
engine = ExecutionEngine({"custom.greeting": GreetingModule()})
engine.run("build")
The custom module can then be used in blueprint.json:
{
"build": [
{
"module": "custom.greeting",
"args": {"name": "Builddrone"}
}
]
}
Every module receives a Runner and a dictionary of arguments. The runner
executes commands with the currently selected Python interpreter and exposes
the blueprint's base directory for relative paths.
Execution flow
python -m builddrone <stage>
|
v
load blueprint.json -> select stage -> execute steps -> report failures
Any non-zero command exit code raises DroneException and stops the stage.
License
MIT License
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file builddrone-0.2.0.tar.gz.
File metadata
- Download URL: builddrone-0.2.0.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e7f43955e1b4245da1df9675c9eb3aff711bf804a32c021032aee44b24dac82
|
|
| MD5 |
f9657b7540bac53d9292da25ec9d2a53
|
|
| BLAKE2b-256 |
f90896c18fee36d32d3579fc62462b7551c1b2e9a90fb436f41fbcab92c2f26c
|
File details
Details for the file builddrone-0.2.0-py3-none-any.whl.
File metadata
- Download URL: builddrone-0.2.0-py3-none-any.whl
- Upload date:
- Size: 15.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ddcce0348b9c59b409cc95fa6cd58381641f311ed90483e07360e8cce430a969
|
|
| MD5 |
eb5d019ca11850a90c4bc38e9948547a
|
|
| BLAKE2b-256 |
6268a7dfbf5aef19059a623dc7e91c2abe65fd049d754ccc4ce0b27b5d1c4871
|