Metadata-Version: 2.1
Name: rkd
Version: 0.1.1.dev14
Summary: Task executor - balance between Makefile and Gradle.
Home-page: https://riotkit.org
Author: RiotKit non-profit organization
Author-email: riotkit@riseup.net
License: Apache-2
Keywords: setup,distutils
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Description-Content-Type: text/x-rst; charset=UTF-8
Requires-Dist: twine (==3.1.1)
Requires-Dist: pbr (==5.4.5)

RKD - RiotKit DO
================

Task executor - balance between Makefile and Gradle.

THIS PROJECT IS A WORK IN PROGRESS.

**Goals:** - Define tasks as simple as in Makefile - Reuse code as
simple as in Gradle (using extensions that provides tasks. Extensions
are installable from PIP) - Simple configuration in Python

Rules
-----

-  No hooks eg. task.executeAfter(otherTask), no complex dependencies
-  No dynamic tasks names eg. by turning on Publish component it should
   not create tasks eg. :publishIWAToDockerRegistry (where IWA is the
   project name)

Usage in shell
--------------

Tasks are prefixed always with ":". Each task can handle it's own
arguments.

Tasks arguments usage
~~~~~~~~~~~~~~~~~~~~~

*makefile.py*

.. code:: python


    from rkd.syntax import TaskDeclaration, TaskAliasDeclaration
    from rkd.standardlib.python import PublishTask

    IMPORTS = [
        TaskDeclaration(PublishTask())
    ]

    TASKS = [
        TaskAliasDeclaration(':my:test', [':py:publish', '--username=...', '--password=...'])
    ]

**Example of calling same task twice, but with different input**

Notes for this example: The "username" parameter is a default defined in
``makefile.py`` in this case.

.. code:: bash

    $ rkd :my:test --password=first :my:test --password=second
     >> Executing :py:publish
    Publishing
    {'username': '...', 'password': 'first'}

     >> Executing :py:publish
    Publishing
    {'username': '...', 'password': 'second'}

**Example of calling same task twice, with no extra arguments**

In this example the argument values "..." are taken from ``makefile.py``

.. code:: bash

    $ rkd :my:test :my:test
     >> Executing :py:publish
    Publishing
    {'username': '...', 'password': '...'}

     >> Executing :py:publish
    Publishing
    {'username': '...', 'password': '...'}

**Example of --help per command:**

.. code:: bash

    $ rkd :my:test :my:test --help
    usage: :py:publish [-h] [--username USERNAME] [--password PASSWORD]

    optional arguments:
      -h, --help           show this help message and exit
      --username USERNAME  Username
      --password PASSWORD  Password

Paths and inheritance
~~~~~~~~~~~~~~~~~~~~~

RKD by default search for .rkd directory in current execution directory - `./.rkd`.


**The search order is following (from lower to higher load priority):**

1. RKD's internals (we provide a standard tasks like `:tasks`, `:init`, `:sh`, `:exec` and more)
2. `/usr/lib/rkd`
3. User's home `~/.rkd`
4. Current directory `./.rkd`
5. `RKD_PATH`

**Custom path defined via environment variable**

RKD_PATH allows to define multiple paths that would be considered in priority.

`RKD_PATH="/some/path:/some/other/path:/home/user/riotkit/.rkd-second"`

**How the makefile.py are loaded?**

Each makefile.py is loaded in order, next makefile.py can override tasks of previous.
That's why we at first load internals, then your tasks.



