An open API service indexing awesome lists of open source software.

https://github.com/yindia/iapetus

Automate, test, and orchestrate anything that runs in a shell, container, or cloud. No YAML hell. No vendor lock-in. 100% open source.
https://github.com/yindia/iapetus

cicd dag golang integration-testing workflow-engine

Last synced: about 1 month ago
JSON representation

Automate, test, and orchestrate anything that runs in a shell, container, or cloud. No YAML hell. No vendor lock-in. 100% open source.

Awesome Lists containing this project

README

          

# iapetus πŸš€

[![Go Reference](https://pkg.go.dev/badge/github.com/yindia/iapetus.svg)](https://pkg.go.dev/github.com/yindia/iapetus)
[![Go Report Card](https://goreportcard.com/badge/github.com/yindia/iapetus)](https://goreportcard.com/report/github.com/yindia/iapetus)
[![codecov](https://codecov.io/gh/yindia/iapetus/graph/badge.svg?token=6S99FUSPOC)](https://codecov.io/gh/yindia/iapetus)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

πŸš€ **Open-source workflow engine for DevOps, CI/CD, and automation**
⚑️ Automate, test, and orchestrate anythingβ€”shell, container, or cloud

---

## ✨ Why iapetus?

- ⚑️ **Lightning-fast**: Parallel, dependency-aware execution
- πŸ”Œ **Pluggable**: Bash, Docker, and custom backends
- πŸ§ͺ **Assertions**: Output, exit code, JSON, regex, and more
- πŸ“ **YAML or Go**: Use as config or code
- πŸ›‘οΈ **Battle-tested**: For CI/CD, DevOps, and E2E testing

---

## πŸš€ Demo

![demo](https://github.com/user-attachments/assets/521ce88d-609d-44bb-a605-244eb80429f9)

---

## ⚑️ Quickstart

```sh
git clone https://github.com/yindia/iapetus.git
cd iapetus/example/yaml
go run main.go
```

---

## πŸ“ Example: YAML Workflow

```yaml
name: hello-world
steps:
- name: say-hello
command: echo
args: ["Hello, iapetus!"]
raw_asserts:
- output_contains: iapetus
```

---

## πŸ’» Example: Go API

```go
task := iapetus.NewTask("say-hello", 2*time.Second, nil).
AddCommand("echo").
AddArgs("Hello, iapetus!").
AssertOutputContains("iapetus")
workflow := iapetus.NewWorkflow("hello-world", zap.NewNop()).AddTask(*task)
workflow.Run()
```

---

## 🧩 Features

- πŸ”„ **Parallel, dependency-aware execution**
- βœ… **Built-in & custom assertions**
- ⏱️ **Retries, timeouts, env vars, container images**
- πŸ”Œ **Plugin backends**: Bash, Docker, and more
- πŸͺ **Hooks for logging, metrics, and custom logic**
- πŸ“Š **Beautiful logs and error reporting**

---

## 🀝 Contributing

We welcome PRs, issues, and feedback! See [Contributing Guide](https://iapetus.readthedocs.io/en/latest/contributing.html).

---

🌟 **Star iapetus if you love it!**

[![Star History Chart](https://api.star-history.com/svg?repos=yindia/iapetus&type=Date)](https://www.star-history.com/#yindia/iapetus&Date)