Metadata-Version: 2.3
Name: nanci
Version: 0.1.5
Summary: The Python library that powers Nanci CI pipelines
Author: Elia Perantoni
Author-email: Elia Perantoni <perantonielia0@gmail.com>
Requires-Dist: aiodocker>=0.21.0,<0.22.0
Requires-Dist: rich>=13.7.1,<14.0.0
Requires-Dist: textual>=0.63.6,<0.64.0
Requires-Dist: proxyvars>=0.10.0,<0.11.0
Requires-Python: >=3.12, <3.15
Project-URL: Homepage, https://nanci.dev
Project-URL: Repository, https://github.com/eliaperantoni/nanci
Description-Content-Type: text/markdown

<div align="center">

<img src="https://nanci.dev/nanci.svg#svgView(viewBox(100,100,824,824))" width="160" alt="Nanci" />

# nanci

**The Python library that powers Nanci CI pipelines.**

[**nanci.dev**](https://nanci.dev) · [Docs](https://nanci.dev/#docs) · [Quickstart](#quickstart)

</div>

---

`nanci` is the engine behind [Nanci](https://nanci.dev) — a CI system where pipelines are plain Python files. Install this package to run Nanci pipelines locally or to build tooling on top of the same runtime the cloud uses.

```python
from nanci import job, ci
import asyncio

@job(image="python:3.12-slim")
async def test():
    await ci.upload("src/", "/app/src")
    await ci.upload("tests/", "/app/tests")
    "cd /app && pip install -e . -q && pytest"

asyncio.run(test())
```

Each `@job`-decorated function runs inside an isolated Docker container. String literals in the function body are shell commands. Parallelism is plain `asyncio.gather`.

## Quickstart

```bash
pip install nanci
```

```python
# nanci_ci.py
from nanci import job
import asyncio

@job
async def hello():
    "echo Hello, world!"

asyncio.run(hello())
```

```bash
python nanci_ci.py
```

Full documentation at **[nanci.dev](https://nanci.dev)**.
