mirror of
https://github.com/certbot/certbot.git
synced 2026-06-03 22:08:07 -04:00
After #6485 and #6435, it appears that there is no good reason to not fail fast when test, cover or linting scripts are executed. This PR ensures to fail fast by invoking commands throught subprocess.check_call instead of subprocess.call, and by removing the handling of non-zero exit code at the end of theses scripts. As now coverage on Windows is executed with thresholds, I added specific thresholds for this platform. Because some portions of code that are done for Unix platform will not be executed on Windows. Note that coverage reports from Travis and AppVeyor are accumulated on Codecov. So if a file is covered up to 50 % on Linux, and all other parts are covered on Windows, then coverage is 100 % for Codecov. Note: that PR also fixes the ability of coverage tests to fail if thresholds are exceeded. * Use check_call to fail fast in all scripts related to tests/lint/coverage/deploy * Make specific coverage threshold for windows
82 lines
3.1 KiB
Python
Executable file
82 lines
3.1 KiB
Python
Executable file
#!/usr/bin/env python
|
|
import argparse
|
|
import subprocess
|
|
import os
|
|
import sys
|
|
|
|
DEFAULT_PACKAGES = [
|
|
'certbot', 'acme', 'certbot_apache', 'certbot_dns_cloudflare', 'certbot_dns_cloudxns',
|
|
'certbot_dns_digitalocean', 'certbot_dns_dnsimple', 'certbot_dns_dnsmadeeasy',
|
|
'certbot_dns_gehirn', 'certbot_dns_google', 'certbot_dns_linode', 'certbot_dns_luadns',
|
|
'certbot_dns_nsone', 'certbot_dns_ovh', 'certbot_dns_rfc2136', 'certbot_dns_route53',
|
|
'certbot_dns_sakuracloud', 'certbot_nginx', 'certbot_postfix', 'letshelp_certbot']
|
|
|
|
COVER_THRESHOLDS = {
|
|
'certbot': {'linux': 98, 'windows': 94},
|
|
'acme': {'linux': 100, 'windows': 99},
|
|
'certbot_apache': {'linux': 100, 'windows': 100},
|
|
'certbot_dns_cloudflare': {'linux': 98, 'windows': 98},
|
|
'certbot_dns_cloudxns': {'linux': 99, 'windows': 99},
|
|
'certbot_dns_digitalocean': {'linux': 98, 'windows': 98},
|
|
'certbot_dns_dnsimple': {'linux': 98, 'windows': 98},
|
|
'certbot_dns_dnsmadeeasy': {'linux': 99, 'windows': 99},
|
|
'certbot_dns_gehirn': {'linux': 97, 'windows': 97},
|
|
'certbot_dns_google': {'linux': 99, 'windows': 99},
|
|
'certbot_dns_linode': {'linux': 98, 'windows': 98},
|
|
'certbot_dns_luadns': {'linux': 98, 'windows': 98},
|
|
'certbot_dns_nsone': {'linux': 99, 'windows': 99},
|
|
'certbot_dns_ovh': {'linux': 97, 'windows': 97},
|
|
'certbot_dns_rfc2136': {'linux': 99, 'windows': 99},
|
|
'certbot_dns_route53': {'linux': 92, 'windows': 92},
|
|
'certbot_dns_sakuracloud': {'linux': 97, 'windows': 97},
|
|
'certbot_nginx': {'linux': 97, 'windows': 97},
|
|
'certbot_postfix': {'linux': 100, 'windows': 100},
|
|
'letshelp_certbot': {'linux': 100, 'windows': 100}
|
|
}
|
|
|
|
SKIP_PROJECTS_ON_WINDOWS = [
|
|
'certbot-apache', 'certbot-nginx', 'certbot-postfix', 'letshelp-certbot']
|
|
|
|
def cover(package):
|
|
threshold = COVER_THRESHOLDS.get(package)['windows' if os.name == 'nt' else 'linux']
|
|
|
|
pkg_dir = package.replace('_', '-')
|
|
|
|
if os.name == 'nt' and pkg_dir in SKIP_PROJECTS_ON_WINDOWS:
|
|
print((
|
|
'Info: currently {0} is not supported on Windows and will not be tested/covered.'
|
|
.format(pkg_dir)))
|
|
return
|
|
|
|
subprocess.check_call([
|
|
sys.executable, '-m', 'pytest', '--cov', pkg_dir, '--cov-append', '--cov-report=',
|
|
'--numprocesses', 'auto', '--pyargs', package])
|
|
subprocess.check_call([
|
|
sys.executable, '-m', 'coverage', 'report', '--fail-under', str(threshold), '--include',
|
|
'{0}/*'.format(pkg_dir), '--show-missing'])
|
|
|
|
def main():
|
|
description = """
|
|
This script is used by tox.ini (and thus by Travis CI and AppVeyor) in order
|
|
to generate separate stats for each package. It should be removed once those
|
|
packages are moved to a separate repo.
|
|
|
|
Option -e makes sure we fail fast and don't submit to codecov."""
|
|
parser = argparse.ArgumentParser(description=description)
|
|
parser.add_argument('--packages', nargs='+')
|
|
|
|
args = parser.parse_args()
|
|
|
|
packages = args.packages or DEFAULT_PACKAGES
|
|
|
|
# --cov-append is on, make sure stats are correct
|
|
try:
|
|
os.remove('.coverage')
|
|
except OSError:
|
|
pass
|
|
|
|
for package in packages:
|
|
cover(package)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|