Writing Plugins#

Warning

The plugin API is still preliminary: expect changes!

Additional task types can be added to Yabs by the way of plugins.

For example let’s assume we need a new task cowsay that is used like so:

- task: cowsay
  message: |
    Dear fellow cattle,
    We just released version {version}.
    (This message was brought to you by the 'yabs-cowsay' extension.)

and produces this output:

 _________________________________________
/ Dear fellow cattle,                     \
| We just released version 0.0.19-a2.     |
| (This message was brought to you by the |
\ 'yabs-cowsay' extension.)               /
 -----------------------------------------
    \   ^__^
     \  (oo)\_______
        (__)\       )\/\
            ||----w |
            ||     ||

This can be implemented by a separate installable Python module, that exposes a special entry point:

[options.entry_points]
# Plugins are found by the 'yabs.tasks' namespace.
# The 'register()' function is then called by the plugin loader.
# The 'cowsay' name is used as yabs task type name.
yabs.tasks =
    cowsay = yabs_cowsay:register

See the sample implementation for implemntation details and the sample project for a usage example.

Note

Please let’s reserve the namespace yabs-TASKNAME for ‘official’ extensions.
If you publish your own custom extension on PyPI, choose a name like yabs-USER-TASKNAME or similar.

Also add ‘yabs-plugin’ to the keywords, to make it more discoverable.