--- - 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.