Conveyor CI

website·Indexed 31 days ago

https://conveyor.open.ug

A headless workflow orchestration engine designed for building custom CI/CD, automation, and deployment tools. It features a resource-driven architecture with pluggable drivers, a Go-based API server that can be embedded into applications, and Prometheus-style metrics for monitoring and tracing.

Tokens
13.6K
Snippets
46
Records
97
Agent score
53%

What's inside Conveyor CI

  1. Overview of Conveyor CI Framework

    Conveyor CI is a software framework designed to simplify the development of scalable and reliable CI/CD platforms. It aims to eliminate common pain points encountered when building custom CI/CD tools by providing a streamlined, developer-friendly paradigm for creating robust automation infrastructure.
  2. Overview of Conveyor CI workflow orchestration

    Conveyor CI is a headless, embeddable workflow orchestration runtime for platform developers. It manages the control plane logic—including workflow state, job lifecycles, state transitions, events, and logs—while delegating the actual execution of workloads to infrastructure-specific drivers. It is designed to be embedded into internal developer platforms, custom CI/CD systems, and automation layers, allowing developers to decouple orchestration from the underlying execution environment (such as Kubernetes, VMs, or edge devices).
  3. Overview of Conveyor CI Pipeline Architecture

    Conveyor CI uses a conveyor-belt paradigm to manage CI/CD processes. The core components include:

    • Resource: An internal object representing the item being acted upon (e.g., source code, an application, or a program).
    • Drivers: Software components that perform specific actions on a Resource based on its state.
    • Pipelines: Configuration objects that define the specific order of execution for drivers. Pipelines prevent the race conditions that occur when drivers execute simultaneously and allow for dependency management (e.g., ensuring a 'compile' driver finishes before an 'upload' driver starts).
    • Pipeline Engine: A concurrent process in the core runtime that routes resources to drivers in the predefined order and manages the pipeline's state based on driver results.
  4. Overview of Conveyor CI orchestration engine

    Conveyor CI is a headless workflow orchestration engine and lightweight control plane used to build custom CI/CD systems, deployment platforms, internal developer platforms, or automation backends. Unlike all-in-one CI/CD products, it does not provide a built-in dashboard, hosted runners, or an opinionated execution environment. Instead, it provides the orchestration layer—including workflow state, job lifecycle management, event-driven execution, log streaming, and APIs—which can be embedded into a custom platform. The user provides the execution logic via drivers.
  5. Implement dynamic Variables in resources and pipelines

    The project is introducing 'Variables', which are dynamic variables applied within resources and pipelines. These variables are designed to allow developers to customize workflow behavior dynamically.
  6. Select a Conveyor CI SDK for API interaction

    Conveyor CI provides language-specific SDKs to simplify interactions with its API. The available SDKs are:

    • Go: Stable release. Source code is available at github.com/open-ug/conveyor and documentation is hosted on Go Doc.
    • Python: Currently in active development. Source code is located in the sdk/python directory of the main repository.
    • Rust: Currently in active development. Source code is located in the sdk/rust directory of the main repository.
  7. Implement the Conveyor CI Driver Runtime Architecture

    To implement a language-specific SDK for Conveyor CI, the following core components must be developed:

    • Driver Manager (Orchestrator): Manages NATS/JetStream connections, creates consumers, and executes the 'Try-Catch-Ack' loop.
    • Driver (User Logic): Defines resource filters and implements the domain-specific Reconcile logic.
    • Driver Logger (Contextual Logger): Enforces structured logging and automatically attaches run_id, driver_name, and timestamps to logs.
    • API Client (Stateless HTTP Client): Provides typed methods for REST API interactions regarding Secrets, Status updates, and Metadata.
  8. Understand the Conveyor CI architecture

    Conveyor CI separates the control plane (orchestration) from the drivers (execution).

    • Control Plane (Provided by Conveyor CI): Responsible for job lifecycle management, state persistence, queuing, retries, log aggregation, and APIs.
    • SDK (Provided by Conveyor CI): Provides a typed interface for interacting with the engine.
    • Drivers (Provided by the User): The custom code responsible for actually running the workloads.

    This separation allows for infrastructure independence, custom security models, hardware flexibility, and multi-environment support (e.g., edge devices, air-gapped networks, or custom hardware).

  9. Implement custom execution via the Conveyor Driver Model

    Conveyor CI uses a driver-based architecture to remain infrastructure-agnostic. The core control plane manages job lifecycles, retries, and cancellations, but delegates the actual workload execution to user-defined drivers. This allows workloads to be executed across diverse environments including:

    • Kubernetes
    • Physical servers
    • Virtual Machines (VMs)
    • Edge devices
    • Custom infrastructure

    Drivers are responsible for executing the workload and streaming logs and status updates back to the Conveyor control plane.

  10. Understand Conveyor CI's Resource-Driven Architecture

    Conveyor CI uses a modular, event-driven architecture where system state is stored as Resources and processed by Drivers. Instead of static pipelines, the system reacts to Resource mutations (creation, updates, or deletions). The architecture consists of three primary conceptual pillars:

    • Resources: Store the current state of CI/CD processes.
    • Resource Definitions: Define the schema and validation rules for Resources.
    • Drivers: Watch for Resource changes and transform that state into actual CI/CD executions.
  11. Conveyor CI Driver Architecture Overview

    Conveyor CI utilizes an event-driven architecture based on NATS JetStream for low latency, replayability, and scalability. The system employs a language-agnostic runtime model where a shared conceptual runtime is implemented via language-specific SDKs.

    Data Persistence:

    • Events are stored in JetStream.
    • Logs and Resources are stored by Conveyor CI.

    Driver Lifecycle:

    1. Initialization
    2. Event subscription
    3. Reconciliation
    4. Logging and reporting
    5. Termination or scale-out
  12. Integrate Conveyor CI as an external microservice

    Conveyor CI can be integrated into a system as an external microservice. Communication is handled via its API, which can be accessed directly or through Client SDKs that abstract the API into utility functions.