Introduction
============
Synopsis
--------
::
NAME:
poule - Mass interact with GitHub issues & pull requests
USAGE:
poule [global options] command [command options] [arguments...]
VERSION:
0.4.0
COMMANDS:
batch Run groups of commands described in files
serve Operate as a daemon listening on GitHub webhooks
validate Validate a Poule repository configuration file
help, h Shows a list of commands or help for one command
Operations:
ci-label-clean Clean CI failure labels
dco-check Check DCO on pull requests
label Apply label(s) to items which title or body matches a pattern
poule-updater Update the poule configuration for the specified repository
prune Prune outdated issues
random-assign Assign items to a random username from the `users` list.
rebuild Rebuild configurations of a given state
version-label Apply version labels to issues
version-milestone Attach merged pull requests to the upcoming version's milestone
GLOBAL OPTIONS:
--debug, -D enable debug logging
--dry-run simulate operations
--repository value GitHub repository
--token value GitHub API token [$POULE_GITHUB_TOKEN]
--token-file value GitHub API token file [$POULE_GITHUB_TOKEN_FILE]
--help, -h show help
--version, -v print the version
Global options
--------------
Specifying a GitHub API token
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A GitHub API token must be provided for poule to execute any modifying action (such as labeling an
issue, or closing a pull request). The token can be specified:
- Directly by providing its value through the ``--token`` flag or the ``$POULE_GITHUB_TOKEN``
environment variable.
- Indirectly by providing the path to a file containing a token through the ``--token-file`` flag
or the ``$POULE_GITHUB_TOKEN_FILE`` environment variable.
Simulating execution
~~~~~~~~~~~~~~~~~~~~
When ``--dry-run`` is specified, poule retrieves GitHub issues and pull requests and calls
operations as it normally would but doesn't actually *apply* the operations. Each operation will log
as it is called, and what it would have done if applied.
Keep in mind that poule in dry run still issues the API calls necessary to retrieve GitHub data, and
as a result contributes to consuming the GitHub's user API limit.
Running operations
------------------
Poule is all about running :doc:`operations` on GitHub issues and pull requests. An operation is a
snippet of GitHub automation, such as adding a label to items which body matches a given string.
Once implemented, an operation can be reused in different contexts:
1. As a one-time invocation, on the entire stock of GitHub items.
2. As part of a batch job alongside multiple other operations.
3. As part of a long-running daemon triggered by GitHub webhooks or scheduled.
One-time invocation
~~~~~~~~~~~~~~~~~~~
Each operation gets surfaced in the command-line as its own subcommand, making the invocation of a
one-off operation straightforward. All operations subcommand support the ``--filter`` flag which
allows to restrict the items on which the operation will be applied. Additionally, each operation
defines its own set of flags and its own input format: refer to the ``--help`` output for
operation-specific information.
Batch execution
~~~~~~~~~~~~~~~
In batch execution, a collection of operations is described in `YAML `_ format.
Similarly to the command-line invocation, each operation can be associated with a set of filters, as
well as operation-specific settings.
Server mode
~~~~~~~~~~~
This is of course the most interesting mode, and deserves as such an entire documentation page:
:doc:`server`.
Configuring execution
---------------------
Filtering
~~~~~~~~~
The following filter types are supported to restrict the set of items on which a given operation
should be applied:
+----------+--------------------------------------------+---------------------------------------+
| Type | Passes if | Values |
+==========+============================================+=======================================+
| age | Creation date > value | E.g.,: ``2d``, ``3w``, ``4m``, ``1Y`` |
+----------+--------------------------------------------+---------------------------------------+
| assigned | Issue is assigned == value | ``true`` or ``false`` |
+----------+--------------------------------------------+---------------------------------------+
| comments | # comments matches predicate | E.g.,: ``"=0"``, ``">10"``, ``"<20"`` |
+----------+--------------------------------------------+---------------------------------------+
| labels | All specified labels are set | E.g.,: ``"label1,label2"`` |
+----------+--------------------------------------------+---------------------------------------+
| ~labels | None of the specified labels are set | E.g.,: ``"label1,label2"`` |
+----------+--------------------------------------------+---------------------------------------+
| is | Type of item == value | ``pr`` or ``issues`` |
+----------+--------------------------------------------+---------------------------------------+
All operations subcommands support the ``--filter`` with the following format::
--filter : [--filter : ...]
When describing operation in YAML format (either for batch or server mode), filtering is defined as
a ``filters`` mapping filter types to their respective values::
filters:
:
:
Note that sequences are used instead of comma separated values for the ``labels`` and ``~labels``
filters, for example::
--filter is:issue --filter label:bug --filter age:2d
Is expressed in YAML as the following::
filters:
age: 2d
is: issue
label: [ bug ]