===============
Debian pipeline
===============
See the currently-implemented parts of :workflow:`debian_pipeline`.
.. task:: CheckInstallability
CheckInstallability task
========================
This is a server-side task that checks whether the uninstallability count in
a suite increases as a result of adding packages to it, along the lines of
the installability regression tests performed by `britney
`_.
The ``task_data`` for this task may contain the following keys:
* ``suite`` (:ref:`lookup-single`, required): the :collection:`debian:suite`
collection to check installability against
* ``binary_artifacts`` (:ref:`lookup-multiple`, required): a list of
:artifact:`debian:binary-package`, :artifact:`debian:binary-packages`, or
:artifact:`debian:upload` artifacts to check
.. todo::
Check whether it's feasible to implement this in Debusine itself as a
server-side task. If not, we'll need to make it a worker task and
consider what environment it should run in.
.. todo::
Define the output. It should probably be a new artifact category,
produced only if the task fails, containing the list of
newly-uninstallable packages.
.. task:: Confirm
Confirm task
============
This :ref:`wait task ` blocks a workflow until a user confirms that the
workflow can continue. Users who can confirm are either the creator
of the work request/parent workflow, or owners of the workspace.
This task is equivalent to a confirmation prompt in a traditional user
interface.
Task data
---------
* ``auto_confirm_if_no_failure`` (boolean, defaults to False): when this
parameter is set, the wait task is immediately marked as successful
if all its dependencies are successful. It is useful to generate a
confirmation prompt only when something has gone wrong and we want to
offer the possibility to recover from it, instead of aborting the rest
of the dependency chain.
* ``do_not_confirm_action`` (string, defaults to 'abort-workflow'): allowed
values are 'failure', 'abort', 'abort-workflow'. For 'failure', the
wait work request is completed with result set to FAILURE. For 'abort', the
wait work request is "terminated" with status set to ABORTED. For
'abort-workflow', the root workflow is aborted.
* ``confirm_label`` (string, defaults to 'Continue the workflow'): the label
to show in the "Confirm" button
* ``do_not_confirm_label`` (string, defaults to "Abort the workflow"): the
label to show in the "Do not confirm" button.
.. tip::
Maybe the ``auto_confirm_if_no_failure`` behaviour can be implemented
with an automatically generated ``on_unblock`` event reaction.
UI changes
----------
When showing a running :task:`Confirm` work request, the web UI shows
two buttons with the labels provided in the task data. It also shows
a "Comment" field where the user can input some text justifying the
choice made.
When one of the buttons is clicked, it is equivalent to calling
the ``confirm`` API view described below, with either ``confirm: True``
or ``confirm: False`` depending on the button clicked.
When showing a completed/aborted work request, the web UI displays:
* the user who took the decision
* the actual decision taken (show the label of the button "clicked"?)
* the timestamp of the confirmation
* the action performed as a result
API changes
-----------
A new ``/api/1.0/work-request//confirm/`` POST view
allows handling the new :task:`Confirm` wait task. The view takes two
parameters:
* ``confirm`` (boolean, defaults to True): True indicates a confirmation,
False a refusal to confirm
* ``comment`` (string, defaults to empty string): a textual message
justifying the decision
The view works as follows:
* it checks that the work request is ``WAIT/Confirm`` and is running, and
otherwise returns HTTP 400
* it checks that the requesting user has the permissions to confirm (creator
or workspace owner), and otherwise returns HTTP 403
* when ``confirm`` is True, it terminates the work request with
status=COMPLETED and result=SUCCESS
* when ``confirm`` is False, the behaviour is dictated by the
``do_not_confirm_action`` task data (see above)
* the ``output_data`` field of the work request is updated (so that
the web UI can show information about who confirmed what & when, etc.)
* it returns HTTP 200