2018-11-07 20:16:16 -05:00
|
|
|
#!/usr/bin/env python
|
Remove codecov (#7811)
After getting a +1 from everyone on the team, this PR removes the use of `codecov` from the Certbot repo because we keep having problems with it.
Two noteworthy things about this PR are:
1. I left the text at https://github.com/certbot/certbot/blob/4ea98d830bcc3d1b980a4055243c6a6a25d8dc54/.azure-pipelines/INSTALL.md#add-a-secret-variable-to-a-pipeline-like-codecov_token because I think it's useful to document how to set up a secret variable in general.
2. I'm not sure what the text "Option -e makes sure we fail fast and don't submit to codecov." in `tox.cover.py` refers to but it seems incorrect since `-e` isn't accepted or used by the script so I just deleted the line.
As part of this, I said I'd open an issue to track setting up coveralls (which seems to be the only real alternative to codecov) which is at https://github.com/certbot/certbot/issues/7810.
With my change, failure output looks something like:
```
$ tox -e py27-cover
...
Name Stmts Miss Cover Missing
------------------------------------------------------------------------------------------
certbot/certbot/__init__.py 1 0 100%
certbot/certbot/_internal/__init__.py 0 0 100%
certbot/certbot/_internal/account.py 191 4 98% 62-63, 206, 337
...
certbot/tests/storage_test.py 530 0 100%
certbot/tests/util_test.py 374 29 92% 211-213, 480-484, 489-499, 504-511, 545-547, 552-554
------------------------------------------------------------------------------------------
TOTAL 14451 647 96%
Command '['/path/to/certbot/dir/.tox/py27-cover/bin/python', '-m', 'coverage', 'report', '--fail-under', '100', '--include', 'certbot/*', '--show-missing']' returned non-zero exit status 2
Test coverage on certbot did not meet threshold of 100%.
ERROR: InvocationError for command /Users/bmw/Development/certbot/certbot/.tox/py27-cover/bin/python tox.cover.py (exited with code 1)
_________________________________________________________________________________________________________________________________________________________ summary _________________________________________________________________________________________________________________________________________________________
ERROR: py27-cover: commands failed
```
I printed the exception just so we're not throwing away information.
I think it's also possible we fail for a reason other than the threshold not meeting the percentage, but I've personally never seen this, `coverage report` output is not being captured so hopefully that would inform devs if something else is going on, and saying something like "Test coverage probably did not..." seems like overkill to me personally.
* remove codecov
* remove unused variable group
* remove codecov.yml
* Improve tox.cover.py failure output.
2020-02-27 17:44:39 -05:00
|
|
|
from __future__ import print_function
|
|
|
|
|
|
2018-11-07 20:16:16 -05:00
|
|
|
import argparse
|
|
|
|
|
import os
|
2019-12-09 15:50:20 -05:00
|
|
|
import subprocess
|
2018-11-07 20:16:16 -05:00
|
|
|
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',
|
2020-02-14 20:19:19 -05:00
|
|
|
'certbot_dns_sakuracloud', 'certbot_nginx']
|
2018-11-07 20:16:16 -05:00
|
|
|
|
|
|
|
|
COVER_THRESHOLDS = {
|
drop min certbot coverage (#7972)
`tox -e cover` fails for me on macOS. This is due to the differences in the code that is run when on Linux vs. other platforms in `certbot.util` and its tests. Diffing my local coverage with Travis, the only difference in lines missing test coverage is:
```
$ diff travis.txt local.txt
< certbot/certbot/util.py 238 24 90% 132-134, 210, 275-281, 318, 330-340, 347, 381-382
> certbot/certbot/util.py 239 34 86% 30, 132-134, 210, 275-281, 301, 305, 316-318, 330-340, 347, 367-373, 381-382
< certbot/tests/util_test.py 392 0 100%
> certbot/tests/util_test.py 375 26 93% 483-487, 492-502, 507-514, 548-550, 555-557
```
I think tests on `master` should not be failing locally for people.
While there would be other ways to fix this by adding `# pragma: no cover` lines or writing mocked out tests for other platforms, I personally just think dropping the minimum coverage one percentage point is fine at least for now.
2020-05-05 12:38:20 -04:00
|
|
|
'certbot': {'linux': 95, 'windows': 96},
|
2018-11-14 16:57:40 -05:00
|
|
|
'acme': {'linux': 100, 'windows': 99},
|
2019-03-27 13:10:52 -04:00
|
|
|
'certbot_apache': {'linux': 100, 'windows': 100},
|
2018-11-14 16:57:40 -05:00
|
|
|
'certbot_dns_cloudflare': {'linux': 98, 'windows': 98},
|
2019-12-09 15:50:20 -05:00
|
|
|
'certbot_dns_cloudxns': {'linux': 98, 'windows': 98},
|
2018-11-14 16:57:40 -05:00
|
|
|
'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},
|
2018-11-07 20:16:16 -05:00
|
|
|
}
|
|
|
|
|
|
2020-02-14 20:19:19 -05:00
|
|
|
SKIP_PROJECTS_ON_WINDOWS = ['certbot-apache']
|
2019-02-20 19:20:16 -05:00
|
|
|
|
2018-11-07 20:16:16 -05:00
|
|
|
|
|
|
|
|
def cover(package):
|
2018-11-14 16:57:40 -05:00
|
|
|
threshold = COVER_THRESHOLDS.get(package)['windows' if os.name == 'nt' else 'linux']
|
2018-11-07 20:16:16 -05:00
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
Refactor certbot/ and certbot/tests/ to use the same structure as the other packages (#7544)
Summary of changes in this PR:
- Refactor files involved in the `certbot` module to be of a similar structure to every other package; that is, inside a directory inside the main repo root (see below).
- Make repo root README symlink to `certbot` README.
- Pull tests outside of the distributed module.
- Make `certbot/tests` not be a module so that `certbot` isn't added to Python's path for module discovery.
- Remove `--pyargs` from test calls, and make sure to call tests from repo root since without `--pyargs`, `pytest` takes directory names rather than package names as arguments.
- Replace mentions of `.` with `certbot` when referring to packages to install, usually editably.
- Clean up some unused code around executing tests in a different directory.
- Create public shim around main and make that the entry point.
New directory structure summary:
```
repo root ("certbot", probably, but for clarity all files I mention are relative to here)
├── certbot
│ ├── setup.py
│ ├── certbot
│ │ ├── __init__.py
│ │ ├── achallenges.py
│ │ ├── _internal
│ │ │ ├── __init__.py
│ │ │ ├── account.py
│ │ │ ├── ...
│ │ ├── ...
│ ├── tests
│ │ ├── account_test.py
│ │ ├── display
│ │ │ ├── __init__.py
│ │ │ ├── ...
│ │ ├── ... # note no __init__.py at this level
│ ├── ...
├── acme
│ ├── ...
├── certbot-apache
│ ├── ...
├── ...
```
* refactor certbot/ and certbot/tests/ to use the same structure as the other packages
* git grep -lE "\-e(\s+)\." | xargs sed -i -E "s/\-e(\s+)\./-e certbot/g"
* git grep -lE "\.\[dev\]" | xargs sed -i -E "s/\.\[dev\]/certbot[dev]/g"
* git grep -lE "\.\[dev3\]" | xargs sed -i -E "s/\.\[dev3\]/certbot[dev3]/g"
* Remove replacement of certbot into . in install_and_test.py
* copy license back out to main folder
* remove linter_plugin.py and CONTRIBUTING.md from certbot/MANIFEST.in because these files are not under certbot/
* Move README back into main folder, and make the version inside certbot/ a symlink
* symlink certbot READMEs the other way around
* move testdata into the public api certbot zone
* update source_paths in tox.ini to certbot/certbot to find the right subfolder for tests
* certbot version has been bumped down a directory level
* make certbot tests directory not a package and import sibling as module
* Remove unused script cruft
* change . to certbot in test_sdists
* remove outdated comment referencing a command that doesn't work
* Install instructions should reference an existing file
* update file paths in Dockerfile
* some package named in tox.ini were manually specified, change those to certbot
* new directory format doesn't work easily with pyargs according to http://doc.pytest.org/en/latest/goodpractices.html#tests-as-part-of-application-code
* remove other instance of pyargs
* fix up some references in _release.sh by searching for ' . ' and manual check
* another stray . in tox.ini
* fix paths in tools/_release.sh
* Remove final --pyargs call, and now-unnecessary call to modules instead of local files, since that's fixed by certbot's code being one layer deeper
* Create public shim around main and make that the entry point
* without pyargs, tests cannot be run from an empty directory
* Remove cruft for running certbot directly from main
* Have main shim take real arg
* add docs/api file for main, and fix up main comment
* Update certbot/docs/install.rst
Co-Authored-By: Brad Warren <bmw@users.noreply.github.com>
* Fix comments in readthedocs requirements files to refer to current package
* Update .[docs] reference in contributing.rst
* Move plugins tests to certbot tests directory
* add certbot tests to MANIFEST.in so packagers can run python setup.py test
* move examples directory inside certbot/
* Move CHANGELOG into certbot, and create a top-level symlink
* Remove unused sys and logging from main shim
* nginx http01 test no longer relies on certbot plugins common test
2019-11-25 17:28:06 -05:00
|
|
|
subprocess.check_call([sys.executable, '-m', 'pytest',
|
|
|
|
|
'--cov', pkg_dir, '--cov-append', '--cov-report=', pkg_dir])
|
Remove codecov (#7811)
After getting a +1 from everyone on the team, this PR removes the use of `codecov` from the Certbot repo because we keep having problems with it.
Two noteworthy things about this PR are:
1. I left the text at https://github.com/certbot/certbot/blob/4ea98d830bcc3d1b980a4055243c6a6a25d8dc54/.azure-pipelines/INSTALL.md#add-a-secret-variable-to-a-pipeline-like-codecov_token because I think it's useful to document how to set up a secret variable in general.
2. I'm not sure what the text "Option -e makes sure we fail fast and don't submit to codecov." in `tox.cover.py` refers to but it seems incorrect since `-e` isn't accepted or used by the script so I just deleted the line.
As part of this, I said I'd open an issue to track setting up coveralls (which seems to be the only real alternative to codecov) which is at https://github.com/certbot/certbot/issues/7810.
With my change, failure output looks something like:
```
$ tox -e py27-cover
...
Name Stmts Miss Cover Missing
------------------------------------------------------------------------------------------
certbot/certbot/__init__.py 1 0 100%
certbot/certbot/_internal/__init__.py 0 0 100%
certbot/certbot/_internal/account.py 191 4 98% 62-63, 206, 337
...
certbot/tests/storage_test.py 530 0 100%
certbot/tests/util_test.py 374 29 92% 211-213, 480-484, 489-499, 504-511, 545-547, 552-554
------------------------------------------------------------------------------------------
TOTAL 14451 647 96%
Command '['/path/to/certbot/dir/.tox/py27-cover/bin/python', '-m', 'coverage', 'report', '--fail-under', '100', '--include', 'certbot/*', '--show-missing']' returned non-zero exit status 2
Test coverage on certbot did not meet threshold of 100%.
ERROR: InvocationError for command /Users/bmw/Development/certbot/certbot/.tox/py27-cover/bin/python tox.cover.py (exited with code 1)
_________________________________________________________________________________________________________________________________________________________ summary _________________________________________________________________________________________________________________________________________________________
ERROR: py27-cover: commands failed
```
I printed the exception just so we're not throwing away information.
I think it's also possible we fail for a reason other than the threshold not meeting the percentage, but I've personally never seen this, `coverage report` output is not being captured so hopefully that would inform devs if something else is going on, and saying something like "Test coverage probably did not..." seems like overkill to me personally.
* remove codecov
* remove unused variable group
* remove codecov.yml
* Improve tox.cover.py failure output.
2020-02-27 17:44:39 -05:00
|
|
|
try:
|
|
|
|
|
subprocess.check_call([
|
|
|
|
|
sys.executable, '-m', 'coverage', 'report', '--fail-under',
|
|
|
|
|
str(threshold), '--include', '{0}/*'.format(pkg_dir),
|
|
|
|
|
'--show-missing'])
|
|
|
|
|
except subprocess.CalledProcessError as err:
|
|
|
|
|
print(err)
|
|
|
|
|
print('Test coverage on', pkg_dir,
|
|
|
|
|
'did not meet threshold of {0}%.'.format(threshold))
|
|
|
|
|
sys.exit(1)
|
2018-11-07 20:16:16 -05:00
|
|
|
|
2019-02-20 19:20:16 -05:00
|
|
|
|
2018-11-07 20:16:16 -05:00
|
|
|
def main():
|
|
|
|
|
description = """
|
2019-10-24 06:48:01 -04:00
|
|
|
This script is used by tox.ini (and thus by Travis CI and Azure Pipelines) in
|
|
|
|
|
order to generate separate stats for each package. It should be removed once
|
Remove codecov (#7811)
After getting a +1 from everyone on the team, this PR removes the use of `codecov` from the Certbot repo because we keep having problems with it.
Two noteworthy things about this PR are:
1. I left the text at https://github.com/certbot/certbot/blob/4ea98d830bcc3d1b980a4055243c6a6a25d8dc54/.azure-pipelines/INSTALL.md#add-a-secret-variable-to-a-pipeline-like-codecov_token because I think it's useful to document how to set up a secret variable in general.
2. I'm not sure what the text "Option -e makes sure we fail fast and don't submit to codecov." in `tox.cover.py` refers to but it seems incorrect since `-e` isn't accepted or used by the script so I just deleted the line.
As part of this, I said I'd open an issue to track setting up coveralls (which seems to be the only real alternative to codecov) which is at https://github.com/certbot/certbot/issues/7810.
With my change, failure output looks something like:
```
$ tox -e py27-cover
...
Name Stmts Miss Cover Missing
------------------------------------------------------------------------------------------
certbot/certbot/__init__.py 1 0 100%
certbot/certbot/_internal/__init__.py 0 0 100%
certbot/certbot/_internal/account.py 191 4 98% 62-63, 206, 337
...
certbot/tests/storage_test.py 530 0 100%
certbot/tests/util_test.py 374 29 92% 211-213, 480-484, 489-499, 504-511, 545-547, 552-554
------------------------------------------------------------------------------------------
TOTAL 14451 647 96%
Command '['/path/to/certbot/dir/.tox/py27-cover/bin/python', '-m', 'coverage', 'report', '--fail-under', '100', '--include', 'certbot/*', '--show-missing']' returned non-zero exit status 2
Test coverage on certbot did not meet threshold of 100%.
ERROR: InvocationError for command /Users/bmw/Development/certbot/certbot/.tox/py27-cover/bin/python tox.cover.py (exited with code 1)
_________________________________________________________________________________________________________________________________________________________ summary _________________________________________________________________________________________________________________________________________________________
ERROR: py27-cover: commands failed
```
I printed the exception just so we're not throwing away information.
I think it's also possible we fail for a reason other than the threshold not meeting the percentage, but I've personally never seen this, `coverage report` output is not being captured so hopefully that would inform devs if something else is going on, and saying something like "Test coverage probably did not..." seems like overkill to me personally.
* remove codecov
* remove unused variable group
* remove codecov.yml
* Improve tox.cover.py failure output.
2020-02-27 17:44:39 -05:00
|
|
|
those packages are moved to a separate repo."""
|
2018-11-07 20:16:16 -05:00
|
|
|
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)
|
|
|
|
|
|
2019-02-20 19:20:16 -05:00
|
|
|
|
2018-11-07 20:16:16 -05:00
|
|
|
if __name__ == '__main__':
|
|
|
|
|
main()
|