66 lines
2.5 KiB
YAML
66 lines
2.5 KiB
YAML
---
|
|
- hosts: all
|
|
name: Coverage change
|
|
roles:
|
|
- ensure-virtualenv
|
|
- ensure-pip
|
|
- role: ensure-tox
|
|
vars:
|
|
ensure_global_symlinks: true
|
|
tasks:
|
|
- name: Environment setup
|
|
shell:
|
|
cmd: |
|
|
set -e
|
|
virtualenv --system-site-packages {{ ansible_user_dir }}/.venv
|
|
args:
|
|
chdir: "{{ ansible_user_dir }}/{{ zuul.project.src_dir }}"
|
|
- name: Measure coverage with the submitted change
|
|
shell:
|
|
cmd: |
|
|
set -e
|
|
source {{ ansible_user_dir }}/.venv/bin/activate
|
|
tox -e cover | awk '/^[[:alpha:]].*\.py/{if ($3 > 0){ print "-key:"$1 "\n value:" 1-$3/$2; }}
|
|
args:
|
|
chdir: "{{ ansible_user_dir }}/{{ zuul.project.src_dir }}"
|
|
register: coverage_after
|
|
set_fact:
|
|
coverage_after_dict: "{{ coverage_after.stdout | items2dict }}"
|
|
- name: Checkout previous commit
|
|
shell:
|
|
cmd: |
|
|
set -e
|
|
source {{ ansible_user_dir }}/.venv/bin/activate
|
|
git checkout HEAD^
|
|
args:
|
|
chdir: "{{ ansible_user_dir }}/{{ zuul.project.src_dir }}"
|
|
- name: Measure coverage before submitted change
|
|
shell:
|
|
cmd: |
|
|
set -e
|
|
source {{ ansible_user_dir }}/.venv/bin/activate
|
|
tox -e cover | awk '/^[[:alpha:]].*\.py/{if ($3 > 0){ print "-key:"$1 "\n value:" 1-$3/$2; }}
|
|
args:
|
|
chdir: "{{ ansible_user_dir }}/{{ zuul.project.src_dir }}"
|
|
register: coverage_before
|
|
set_fact:
|
|
coverage_before_dict: "{{ coverage_before.stdout | items2dict }}"
|
|
- name: Coverage comparison per file - Check
|
|
assert:
|
|
that: "{{coverage_before_dict[item] | float}} <= {{ coverage_after_dict[item] | float}}"
|
|
fail_msg: |
|
|
Before the change {{ (coverage_before_dict[item] | float)*100 }}% of the lines were covered.
|
|
Now it's {{ (coverage_after_dict[item] | float )*100 }}%. Did you write your unit tests?
|
|
success_msg: |
|
|
File by file code coverage check successful.
|
|
loop: "{{ coverage_after_dict.keys() | sort }}"
|
|
|
|
- name: Coverage comparison Total - Check
|
|
assert:
|
|
that: "{{ (coverage_after.stdout | float) }} >= {{ (coverage_before.stdout | float) }}"
|
|
fail_msg: |
|
|
Before the change {{ (coverage_before.stdout | float)*100 }}% of the lines were covered.
|
|
Now it's {{ (coverage_after.stdout | float )*100 }}%. Did you write your unit tests?
|
|
success_msg: |
|
|
Code coverage check successful, {{ (coverage_before.stdout | float) * 100 }}% of code is now covered.
|