buildsys

This repository is under active development ⚠️ Please check back regularly for updates.

A CI/CD which works everywhere, even on your local environment.

buildsys is a customizable, extensible CI/CD system which multiple backends. It has a plugin based system which allows developers to write their custom code for deploying

Building from source

You will require Go 1.18+ to build this project.

cd cmd/togomak
go build .

Running the binary

./togomak ./config.yaml

Concepts

Providers

Providers are plugins, which can help in

  • Gathering information
  • Checking if all the preconditions of task are met
  • Running a task

The data from the providers from the “Gather information” step can be used in other stages

A provider can be defined in the config file as follows:

providers:
  - id: git
    path: plugins/git/git

Remote plugins are still a WIP.

Stages

Stages are jobs which happen concurrently by default. They can be run in parallel or sequentially. If you need stages to execute sequentially, you can specify the stages[].depends-on parameters

A sample stage can be defined like this

stages:
    id: myuniqueid # id needs to be unique
    container: python
    args: 
        - "-c"
        - "print('Hello World')"

The above stage snipped uses Docker (or Podman) to pull the python image from container registry, and executes the snippet as mentioned in the args.

You can also run a shell script within a container.

stages:
    id: helloworld
    container: python
    # the above container will run the following script in 'sh'
    script: |
        echo "Hello World"

To specify dependencies between stages, you can use the depends-on parameter. buildsys will wait for the stages to finish before running the next stage.

stages:
    id: myuniqueid
    container: python
    args: 
        - "-c"
        - "print('Hello World')"
    depends-on:
        - helloworld

Configuration

Configuration is in yaml. Some fields currently supported are, some fields support pongo syntax, which is very similar to django’s template syntax.

Currently supported fields are:

  • .steps[].condition
  • .steps[].script
  • .steps[].args

GitHub

View Github