Use three separate jobs for code coverage diffing

Reusable roles and playbooks are quite important upstream (I have
zuul-jobs inclusion in mind). Besides that, in Zuul's Ansible a playbook
is supposed to come from the same repo as the one where the job
definition is placed, and one can only override a job's `run` playbook.
This makes it rather annoying to modify, say, `tox-coverage` definition.

My previous approach with a job which performed two things (build the
old source *and* then generate coverage report) also would not scale
that well if the build+test phase is long.

Switch to three jobs:

- build the current, proposed state, and gather coverage info,
- build the past state, gather coverage info,
- download two artifacts from previous runs, reproduce the source trees,
and generate the final coverage diff report.

See-also: https://review.gerrithub.io/c/Telecominfraproject/oopt-zuul-jobs/+/489964
Change-Id: I6eb61669c6f28440a55ba08569a4f2683513a9fa
diff --git a/roles/download-coverage/tasks/download.yaml b/roles/download-coverage/tasks/download.yaml
new file mode 100644
index 0000000..576aeb7
--- /dev/null
+++ b/roles/download-coverage/tasks/download.yaml
@@ -0,0 +1,8 @@
+- name: Show artifact info
+  debug:
+    msg: "Artifact: {{ artifact.change }},{{ artifact.patchset }} {{ artifact.job }} -> {{ artifact.url }}"
+
+- name: Download one artifact
+  get_url:
+    url: "{{ artifact.url }}"
+    dest: "{{ coverage_destination }}"
diff --git a/roles/download-coverage/tasks/main.yaml b/roles/download-coverage/tasks/main.yaml
new file mode 100644
index 0000000..8ae4695
--- /dev/null
+++ b/roles/download-coverage/tasks/main.yaml
@@ -0,0 +1,7 @@
+- name: Retrieve coverage from parent jobs
+  include_tasks: download.yaml
+  loop: "{{ zuul.artifacts | json_query(artifact_selector) }}"
+  vars:
+    artifact_selector: "[([?metadata.type == 'cobertura_xml' && project == '{{ zuul.project.name }}' && job == '{{ job_name }}'])[-1]]"
+  loop_control:
+    loop_var: artifact