Metadata-Version: 2.1
Name: grana
Version: 1.4.0a3
Summary: A convenient task runner
Home-page: https://github.com/reartnew/grana
License: MIT
Author: Artem Novikov
Author-email: artnew@list.ru
Requires-Python: >=3.9,<4.0
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Typing :: Typed
Provides-Extra: all
Provides-Extra: dialog
Provides-Extra: docker
Provides-Extra: tests
Requires-Dist: aiodocker (>=0.24.0,<0.25.0) ; extra == "docker" or extra == "all"
Requires-Dist: bandit (>=1.8.3,<2.0.0) ; extra == "tests"
Requires-Dist: black (>=25.1.0,<26.0.0) ; extra == "tests"
Requires-Dist: click (>=8.1.8,<9.0.0) ; python_version < "3.10"
Requires-Dist: click (>=8.2.0,<9.0.0) ; python_version >= "3.10"
Requires-Dist: coverage (>=7.8.0,<8.0.0) ; extra == "tests"
Requires-Dist: inquirer (>=3.4.0,<4.0.0) ; extra == "dialog" or extra == "all"
Requires-Dist: mypy (>=1.15.0,<2.0.0) ; extra == "tests"
Requires-Dist: pylint (>=3.3.7,<4.0.0) ; extra == "tests"
Requires-Dist: pytest (>=8.3.5,<9.0.0) ; extra == "tests"
Requires-Dist: pytest-asyncio (>=0.26.0,<0.27.0) ; extra == "tests"
Requires-Dist: pytest-bandit (>=0.6.1,<0.7.0) ; extra == "tests"
Requires-Dist: pytest-black (>=0.6.0,<0.7.0) ; extra == "tests"
Requires-Dist: pytest-cov (>=6.1.1,<7.0.0) ; extra == "tests"
Requires-Dist: pytest-data-suites (>=1.0.5,<2.0.0) ; extra == "tests"
Requires-Dist: pytest-mypy (>=1.0.1,<2.0.0) ; extra == "tests"
Requires-Dist: pytest-pylint (>=0.21.0,<0.22.0) ; extra == "tests"
Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
Requires-Dist: types-pyyaml (>=6.0.12.20250516,<7.0.0.0) ; extra == "tests"
Project-URL: Repository, https://github.com/reartnew/grana
Description-Content-Type: text/markdown

# grana

Grana is an open-source command-line task automation tool,
whose purpose is launching pipelines easily in any environment from the local machine to the automation server.

[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/grana)](https://pypi.python.org/pypi/grana/)
[![License](https://img.shields.io/pypi/l/grana.svg)](https://opensource.org/license/mit/)
[![PyPI version](https://badge.fury.io/py/grana.svg)](https://pypi.python.org/pypi/grana/)
[![Tests](https://github.com/reartnew/grana/workflows/main/badge.svg)](https://github.com/reartnew/grana/actions/workflows/main.yml)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
[![Coverage Status](https://coveralls.io/repos/github/reartnew/grana/badge.svg?branch=main)](https://coveralls.io/github/reartnew/grana?branch=main)

## Get started

#### Installation
Grana can be installed using the python package manager of your choice, e.g. `pip`:
```shell
$ pip install grana
```
For more details, see the [Installation guide](https://grana.readthedocs.io/en/latest/user_guide/install.html).

#### Usage examples

```shell
$ grana run workflow.yaml
```

Take a look at the [usage documentation](https://grana.readthedocs.io/en/latest/user_guide/usage) also.
## Documentation

You're welcome to read the documentation at [grana.readthedocs.io](https://grana.readthedocs.io/en/latest/index.html).

## Contributing

#### Development environment setup

Requires *poetry>=1.8.3*, see [official documentation](https://python-poetry.org).

```shell
$ poetry env use python3.11
$ poetry install --sync --all-extras
```

#### Running tests with coverage on current environment

```shell
$ poetry run pytest --cov --cov-report=html:.coverage_report
```

#### Running tests on all available environments

```shell
$ poetry run tox
```

#### Running docs builder development server
```shell
$ poetry run sphinx-autobuild -aEWb html docs/src docs/dist
```

