serpentine

Crates.ioserpentine
lib.rsserpentine
version0.0.1
created_at2025-09-28 18:16:27.205633+00
updated_at2025-09-28 18:16:27.205633+00
descriptionNode based build system written in rust.
homepage
repositoryhttps://github.com/Serpent-Tools/serpentine
max_upload_size
id1858535
size93,746
Viv (vivax3794)

documentation

README

[!IMPORTANT] Serpentine is a work in progress and not suitable for production yet.

Serpentine

Logo

Serpentine is a workflow runner with a huge focus on simplicity and developer ergonomics. It uses its own custom DSL called snek which lets you define a graph of steps to execute.

Serpentine does not have the concept of jobs, pipelines, etc. it has the concept of the node, and which nodes depend on which, the end. This makes it trivially easy to share setup logic, parallelize workflows, etc.

Image("rust:latest") > Copy(".", "/app") > Workdir("/app") = base;

base > Exec("cargo test") = test;
base > Exec("cargo clippy") = clippy;

base > !(test, clippy) Exec("Cargo build") > build;
return build;

This represents the following graph:

---
config:
  theme: redux
  layout: elk
---
flowchart TD
    A["Image(rust:image)"] --> B["Copy(., /app)"]
    B --> C["Workdir(/app)"]
    C --> D["Exec(cargo test)"] & E["Exec(cargo clippy)"] & F["Exec(cargo build)"]
    D -.-> F
    E -.-> F
    F --> G["Output"]

The serpentine runtime will intelligently spawn a max of 3 containers for this job, and run the test and clippy in parallel.

Commit count: 0

cargo fmt