mirror of
https://github.com/jtesta/ssh-audit.git
synced 2024-12-22 14:05:22 +01:00
Use tox, use codecov, work around pypy3 issues.
This commit is contained in:
parent
65ef250aae
commit
d3ba5a4e6f
4
.gitignore
vendored
4
.gitignore
vendored
@ -2,4 +2,6 @@
|
|||||||
*.pyc
|
*.pyc
|
||||||
html/
|
html/
|
||||||
venv/
|
venv/
|
||||||
.cache/
|
.cache/
|
||||||
|
.tox
|
||||||
|
.coverage
|
||||||
|
62
.travis.yml
62
.travis.yml
@ -1,18 +1,54 @@
|
|||||||
language: python
|
language: python
|
||||||
python:
|
matrix:
|
||||||
- 2.6
|
include:
|
||||||
- 2.7
|
- python: 2.6
|
||||||
- 3.3
|
env: TOXENV=py26
|
||||||
- 3.4
|
- python: 2.7
|
||||||
- 3.5
|
env: TOXENV=py27
|
||||||
- pypy
|
- python: 3.3
|
||||||
- pypy3.3-5.2-alpha1
|
env: TOXENV=py33
|
||||||
|
- python: 3.4
|
||||||
|
env: TOXENV=py34
|
||||||
|
- python: 3.5
|
||||||
|
env: TOXENV=py35
|
||||||
|
- python: 3.6
|
||||||
|
env: TOXENV=py36
|
||||||
|
- python: 3.7-dev
|
||||||
|
env: TOXENV=py37
|
||||||
|
- python: nightly
|
||||||
|
env: TOXENV=py37
|
||||||
|
- python: pypy
|
||||||
|
env: TOXENV=pypy
|
||||||
|
- python: pypy3
|
||||||
|
env: TOXENV=pypy3
|
||||||
|
- python: pypy3.3-5.2-alpha1
|
||||||
|
env: TOXENV=pypy3
|
||||||
|
- python: pypy3.3-5.5-alpha
|
||||||
|
env: TOXENV=pypy3
|
||||||
|
allow_failures:
|
||||||
|
- python: pypy3
|
||||||
|
- python: 3.7-dev
|
||||||
|
- python: nightly
|
||||||
install:
|
install:
|
||||||
- pip install --upgrade pytest
|
- pip install --upgrade tox coveralls codecov
|
||||||
- pip install --upgrade pytest-cov
|
|
||||||
- pip install --upgrade coveralls
|
|
||||||
script:
|
script:
|
||||||
- py.test --cov-report= --cov=ssh-audit -v test
|
- if [ -z "${TOXENV##*py3*}" ]; then
|
||||||
|
export MYPYBASE=python;
|
||||||
|
if [ -z "${TOXENV##*pypy3*}" ]; then
|
||||||
|
_pydir=$(dirname $(which python));
|
||||||
|
ln -s -- "${_pydir}/python" "${_pydir}/pypy3";
|
||||||
|
export TOXENV=${TOXENV},cov,lint;
|
||||||
|
else
|
||||||
|
export TOXENV=${TOXENV},cov,type,lint;
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
export MYPYBASE=python-unknown;
|
||||||
|
export TOXENV=${TOXENV},cov,lint;
|
||||||
|
fi
|
||||||
|
- tox -e $TOXENV
|
||||||
after_success:
|
after_success:
|
||||||
- coveralls
|
- coveralls
|
||||||
|
- codecov
|
||||||
|
after_failure:
|
||||||
|
- cat .tox/log/*
|
||||||
|
- cat .tox/*/log/*
|
||||||
|
161
tox.ini
Normal file
161
tox.ini
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
[tox]
|
||||||
|
envlist = py26,py27,py33,py34,py35,py36,py37,jython,pypy,pypy3,cov,type,lint
|
||||||
|
skipsdist = true
|
||||||
|
skip_missing_interpreters = true
|
||||||
|
|
||||||
|
[testenv]
|
||||||
|
deps =
|
||||||
|
pytest==3.0.7
|
||||||
|
coverage==4.3.4
|
||||||
|
colorama==0.3.7
|
||||||
|
setenv =
|
||||||
|
SSHAUDIT = {toxinidir}/ssh-audit.py
|
||||||
|
COVERAGE_FILE = {toxinidir}/.coverage.{envname}
|
||||||
|
commands =
|
||||||
|
coverage run --source ssh-audit -m -- pytest -v {posargs:test}
|
||||||
|
coverage report --show-missing
|
||||||
|
coverage html -d {toxinidir}/html/coverage.{envname}
|
||||||
|
|
||||||
|
[testenv:cov]
|
||||||
|
deps =
|
||||||
|
coverage==4.3.4
|
||||||
|
setenv =
|
||||||
|
COVERAGE_FILE = {toxinidir}/.coverage
|
||||||
|
commands =
|
||||||
|
coverage erase
|
||||||
|
coverage combine
|
||||||
|
coverage report --show-missing
|
||||||
|
coverage html -d {toxinidir}/html/coverage
|
||||||
|
ignore_outcome = true
|
||||||
|
|
||||||
|
[testenv:mypy]
|
||||||
|
basepython =
|
||||||
|
{env:MYPYBASE:python3.5}
|
||||||
|
deps =
|
||||||
|
colorama==0.3.7
|
||||||
|
mypy==0.501
|
||||||
|
lxml==3.7.3
|
||||||
|
setenv =
|
||||||
|
{[testenv]setenv}
|
||||||
|
MYPYPATH = {toxinidir}/test/stubs
|
||||||
|
MYPYHTML = {toxinidir}/html/mypy
|
||||||
|
commands =
|
||||||
|
mypy \
|
||||||
|
--show-error-context \
|
||||||
|
--config-file {toxinidir}/tox.ini \
|
||||||
|
--html-report {env:MYPYHTML}.py3 \
|
||||||
|
{posargs:{env:SSHAUDIT}}
|
||||||
|
mypy \
|
||||||
|
-2 \
|
||||||
|
--no-warn-incomplete-stub \
|
||||||
|
--show-error-context \
|
||||||
|
--config-file {toxinidir}/tox.ini \
|
||||||
|
--html-report {env:MYPYHTML}.py2 \
|
||||||
|
{posargs:{env:SSHAUDIT}}
|
||||||
|
|
||||||
|
[testenv:pylint]
|
||||||
|
deps =
|
||||||
|
mccabe
|
||||||
|
pylint
|
||||||
|
commands =
|
||||||
|
pylint \
|
||||||
|
--rcfile tox.ini \
|
||||||
|
--load-plugins=pylint.extensions.bad_builtin \
|
||||||
|
--load-plugins=pylint.extensions.check_elif \
|
||||||
|
--load-plugins=pylint.extensions.mccabe \
|
||||||
|
{posargs:{env:SSHAUDIT}}
|
||||||
|
|
||||||
|
[testenv:flake8]
|
||||||
|
deps =
|
||||||
|
flake8
|
||||||
|
commands =
|
||||||
|
flake8 {posargs:{env:SSHAUDIT}}
|
||||||
|
|
||||||
|
[testenv:vulture]
|
||||||
|
deps = vulture
|
||||||
|
commands =
|
||||||
|
python -c "import sys; from subprocess import Popen, PIPE; \
|
||||||
|
a = ['vulture'] + r'{posargs:{env:SSHAUDIT}}'.split(' '); \
|
||||||
|
o = Popen(a, shell=False, stdout=PIPE).communicate()[0]; \
|
||||||
|
l = [x for x in o.split('\n') if x and 'Unused import' not in x]; \
|
||||||
|
print('\n'.join(l)); \
|
||||||
|
sys.exit(1 if len(l) > 0 else 0)"
|
||||||
|
|
||||||
|
[testenv:type]
|
||||||
|
basepython =
|
||||||
|
{[testenv:mypy]basepython}
|
||||||
|
deps =
|
||||||
|
{[testenv:mypy]deps}
|
||||||
|
setenv =
|
||||||
|
{[testenv:mypy]setenv}
|
||||||
|
commands =
|
||||||
|
{[testenv:mypy]commands}
|
||||||
|
ignore_outcome = true
|
||||||
|
|
||||||
|
[testenv:lint]
|
||||||
|
deps =
|
||||||
|
{[testenv:pylint]deps}
|
||||||
|
{[testenv:flake8]deps}
|
||||||
|
{[testenv:vulture]deps}
|
||||||
|
commands =
|
||||||
|
{[testenv:pylint]commands}
|
||||||
|
{[testenv:flake8]commands}
|
||||||
|
{[testenv:vulture]commands}
|
||||||
|
ignore_outcome = true
|
||||||
|
|
||||||
|
|
||||||
|
[mypy]
|
||||||
|
ignore_missing_imports = False
|
||||||
|
follow_imports = error
|
||||||
|
disallow_untyped_calls = True
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
check_untyped_defs = True
|
||||||
|
disallow_subclassing_any = True
|
||||||
|
warn_incomplete_stub = True
|
||||||
|
warn_redundant_casts = True
|
||||||
|
warn_return_any = True
|
||||||
|
warn_unused_ignores = True
|
||||||
|
strict_optional = True
|
||||||
|
#strict_boolean = False
|
||||||
|
|
||||||
|
[pylint]
|
||||||
|
reports = no
|
||||||
|
#output-format = colorized
|
||||||
|
indent-string = \t
|
||||||
|
disable = locally-disabled, bad-continuation, multiple-imports, invalid-name, trailing-whitespace, missing-docstring
|
||||||
|
max-complexity = 15
|
||||||
|
max-args = 8
|
||||||
|
max-locals = 20
|
||||||
|
max-returns = 6
|
||||||
|
max-branches = 15
|
||||||
|
max-statements = 60
|
||||||
|
max-parents = 7
|
||||||
|
max-attributes = 8
|
||||||
|
min-public-methods = 1
|
||||||
|
max-public-methods = 20
|
||||||
|
max-bool-expr = 5
|
||||||
|
max-nested-blocks = 6
|
||||||
|
max-line-length = 80
|
||||||
|
ignore-long-lines = ^\s*(#\s+type:\s+.*|[A-Z0-9_]+\s+=\s+.*|('.*':\s+)?\[.*\],?)$
|
||||||
|
max-module-lines = 2500
|
||||||
|
|
||||||
|
[flake8]
|
||||||
|
ignore =
|
||||||
|
# indentation contains tabs
|
||||||
|
W191,
|
||||||
|
# blank line contains whitespace
|
||||||
|
W293,
|
||||||
|
# indentation contains mixed spaces and tabs
|
||||||
|
E101,
|
||||||
|
# multiple spaces before operator
|
||||||
|
E221,
|
||||||
|
# multiple spaces after operator
|
||||||
|
E241,
|
||||||
|
# multiple imports on one line
|
||||||
|
E401,
|
||||||
|
# line too long
|
||||||
|
E501,
|
||||||
|
# module imported but unused
|
||||||
|
F401,
|
||||||
|
# undefined name
|
||||||
|
F821
|
Loading…
Reference in New Issue
Block a user