Skip to main content

A simple automation framework

Project description

Kuristo

qa build codecov License Scc Count Badge PyPI

Kuristo is a flexible, plugin-enabled automation framework designed for scientific and HPC workflows. It supports sequential and parallel job execution, workflow definition via YAML, resource-aware scheduling, custom step and action definitions, and rich output with optional headless mode.

Demo

Features

  • YAML-based workflows (GitHub Actions style)
  • Custom steps and actions via Python plugins
  • Job dependency graph with parallel execution
  • Resource-aware scheduling with core-aware limits
  • Step & job timeouts
  • ANSI-rich output or plain mode for CI
  • Environment variable passing and output capture
  • Output validation (regex, float comparisons, CSV diffing)
  • Composite steps for reusable action pipelines
  • Built-in log directory and run tracking
  • Test coverage with pytest
  • MPI support via configurable launcher (mpirun, mpiexec, etc.)

Install

Kuristo is not yet on PyPI. Clone the repo and install locally:

git clone https://github.com/andrsd/kuristo.git
cd kuristo
pip install -e .

Usage

Run all tests in a directory:

kuristo run -l tests/assets/

Run a specific test set:

kuristo run -l tests/assets/tests1

Check your environment:

kuristo doctor

Headless/CI-safe mode

kuristo run -l tests --no-ansi

Workflow YAML Example

jobs:
  test-matrix:
    strategy:
      matrix:
        include:
          - os: ubuntu
            version: 20.04
          - os: ubuntu
            version: 22.04

    steps:
      - name: Run simulation
        id: simulation
        run: ./simulate --config=${{ matrix.version }}

      - name: Check output
        uses: checks/regex
        with:
          input: ${{ steps.simulation.output }}
          pattern: "SUCCESS"

Writing Custom Actions

Create a plugin in .kuristo/steps.py:

import kuristo

@kuristo.action("my/special-step")
class MyStep(kuristo.ProcessStep):
    def __init__(self, name, context: kuristo.Context, **kwargs):
        super().__init__(name, context, **kwargs)
        self.input = kwargs["input"]

    def create_command(self):
        return f"echo Hello {self.input}"

Then, use in the workflow as:

jobs:
  test:
    steps:
      - name: My special test
        uses: my/special-step
        with:
          input: "world"

Kuristo will auto-discover .py files in .kuristo/.

Logging & Output

All logs and run data are saved in:

.kuristo-out/
├── runs/
│   ├── latest  20250620_101500/
│   └── 20250620_101500/

Set logging retention and cleanup in config.yaml:

log:
  dir_name: .kuristo-out
  history: 5
  cleanup: on_success

Job Timing Report

To output a CSV of job timings:

kuristo run -l tests --report timing.csv

Configuration

You can define a global config at .kuristo/config.yaml:

resources:
  num_cores: 8

runner:
  mpi_launcher: mpiexec

Or override via environment variable:

KURISTO_MPI_LAUNCHER=mpiexec2 kuristo run -l tests/

Testing & Coverage

Run tests:

pytest -v

With coverage:

pytest --cov=kuristo --cov-report=term-missing

Philosophy

Kuristo is inspired by the structure of GitHub Actions but tailored for local and HPC workflows. It aims to be lightweight, extensible, and scriptable — with strong support for reproducibility and numerical simulation validation.

License

MIT

Fun Fact

"Kuristo" means "runner" in Esperanto. Because that’s what it does — it runs your stuff.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kuristo-0.1.3.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kuristo-0.1.3-py3-none-any.whl (29.1 kB view details)

Uploaded Python 3

File details

Details for the file kuristo-0.1.3.tar.gz.

File metadata

  • Download URL: kuristo-0.1.3.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for kuristo-0.1.3.tar.gz
Algorithm Hash digest
SHA256 9f2c07e45fedfdf77bb0d1ec8e14ce95a8f9b3e81634eda0c6a7304db3e1d843
MD5 e899d848ed368b54b70618bc58b93557
BLAKE2b-256 c2f37cba1114579607ce8af3b46920fa49218bdd0a547f2fe29b85e0567ccfae

See more details on using hashes here.

File details

Details for the file kuristo-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: kuristo-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 29.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for kuristo-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9157125aef767fb7885c361e2f70141034dde61916d597f96faa1606d0e1bce3
MD5 6cd298b45ca339333c013e2f944f9661
BLAKE2b-256 be4f69af93b5686a1fdccbca74e57fc4b6f789f882502c1196da7d2f526fa8dc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page