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/prepare-previous-src/tasks/main.yaml b/roles/prepare-previous-src/tasks/main.yaml
new file mode 100644
index 0000000..250d40d
--- /dev/null
+++ b/roles/prepare-previous-src/tasks/main.yaml
@@ -0,0 +1,9 @@
+- name: Place for previous version of sources
+  file:
+    path: "{{ (previous_source_prefix + '/' + zuul.project.canonical_hostname + '/' + zuul.project.name) | dirname }}"
+    state: directory
+
+- name: Prepare copy of the previous version of sources
+  shell:
+    cmd: git worktree add {{ previous_source_prefix }}/{{ zuul.project.canonical_hostname }}/{{ zuul.project.name }} origin/$(git rev-parse --abbrev-ref HEAD)
+    chdir: "{{ zuul.project.src_dir }}"