[tox] envlist = py{39}-{local,integ}, bandit, doc8, readme, docs, {flake8,pylint}{,-tests}, # prone to false positives vulture # Additional test environments: # # vulture :: Runs vulture. Prone to false-positives. # linters :: Runs all linters over all source code. # linters-tests :: Runs all linters over all tests. # Autoformatter helper environments: # # autoformat : Apply all autoformatters # # black-check : Check for "black" issues # blacken : Fix all "black" issues # # isort-seed : Generate a known_third_party list for isort. # NOTE: make the "known_third_party = " line in setup.cfg before running this # NOTE: currently it incorrectly identifies this library too; make sure you remove it # isort-check : Check for isort issues # isort : Fix isort issues # Operational helper environments: # # docs :: Builds Sphinx documentation. # serve-docs :: Starts local webserver to serve built documentation. # build :: Builds source and wheel dist files. # test-release :: Builds dist files and uploads to testpypi pypirc profile. # release :: Builds dist files and uploads to pypi pypirc profile. [testenv:generate-pipeline] basepython = python3.9 skip_install = true deps = troposphere[policy] boto3 commands = python .chalice/pipeline.py {posargs} [testenv:chalice-prep] basepython = python3.9 skip_install = true recreate = true deps = {[testenv:build]deps} whitelist_externals = pip commands = python -c \ "import shutil;\ shutil.rmtree('{toxinidir}/dist/', ignore_errors=True);\ shutil.rmtree('{toxinidir}/asdf/', ignore_errors=True);" {[testenv:build]commands} python {toxinidir}/.chalice/build-requirements.py [testenv:chalice] basepython = python3.9 recreate = true deps = {[testenv:chalice-prep]deps} chalice commands = {[testenv:chalice-prep]commands} chalice {posargs} [testenv:chalice-deploy] basepython = python3.9 recreate = true deps = {[testenv:chalice]deps} awscli commands = {[testenv:chalice-prep]commands} chalice package {envtmpdir}/packaged aws cloudformation package \ --template-file {envtmpdir}/packaged/sam.json \ --s3-bucket {env:APP_S3_BUCKET} \ --output-template-file transformed.yaml [testenv:base-command] commands = pytest --basetemp={envtmpdir} -l --cov aws_encryption_sdk_decrypt_oracle test/ {posargs} [testenv] passenv = # Pass through AWS credentials AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN \ # Pass through AWS profile name (useful for local testing) AWS_PROFILE \ AWS_DEFAULT_REGION \ # Pass through AWS credentials pointer in ECS/CodeBuild AWS_CONTAINER_CREDENTIALS_RELATIVE_URI \ # AWS Role access in CodeBuild is via the contaner URI AWS_CONTAINER_CREDENTIALS_RELATIVE_URI \ # Used to manage test generators AWS_ENCRYPTION_SDK_PYTHON_DECRYPT_ORACLE_GENERATE_TEST_VECTORS \ AWS_ENCRYPTION_SDK_PYTHON_DECRYPT_ORACLE_REGION \ AWS_ENCRYPTION_SDK_PYTHON_DECRYPT_ORACLE_API_DEPLOYMENT_ID \ # Used by Chalice APP_S3_BUCKET sitepackages = False deps = -rtest/requirements.txt commands = local: {[testenv:base-command]commands} -m local integ: {[testenv:base-command]commands} -m integ generate: {[testenv:base-command]commands} -m generate # mypy [testenv:mypy-coverage] commands = # Make mypy linecoverage report readable by coverage python -c \ "t = open('.coverage', 'w');\ c = open('build/coverage.json').read();\ t.write('!coverage.py: This is a private format, don\'t read it directly!\n');\ t.write(c);\ t.close()" coverage report -m [testenv:mypy-common] basepython = python3 deps = coverage mypy>=0.600 mypy_extensions typing>=3.6.2 [testenv:mypy-py3] basepython = {[testenv:mypy-common]basepython} deps = {[testenv:mypy-common]deps} commands = python -m mypy \ --linecoverage-report build \ src/aws_encryption_sdk_decrypt_oracle/ \ {posargs} {[testenv:mypy-coverage]commands} # Linters [testenv:flake8] basepython = python3 deps = flake8 flake8-docstrings pydocstyle<4.0.0 # https://github.com/JBKahn/flake8-print/pull/30 flake8-print>=3.1.0 commands = flake8 \ src/aws_encryption_sdk_decrypt_oracle/ \ app.py \ setup.py \ .chalice/pipeline.py \ {posargs} [testenv:flake8-tests] basepython = {[testenv:flake8]basepython} deps = flake8 commands = flake8 \ # Ignore F811 redefinition errors in tests (breaks with pytest-mock use) # E203 is not PEP8 compliant https://github.com/ambv/black#slices # W503 is not PEP8 compliant https://github.com/ambv/black#line-breaks--binary-operators --ignore F811,E203,W503 \ test/ \ {posargs} [testenv:pylint] basepython = python3 deps = -rtest/requirements.txt {[testenv:generate-pipeline]deps} pyflakes pylint commands = pylint \ --rcfile=src/pylintrc \ src/aws_encryption_sdk_decrypt_oracle/ \ app.py \ setup.py \ .chalice/pipeline.py \ {posargs} [testenv:pylint-tests] basepython = {[testenv:pylint]basepython} deps = {[testenv:pylint]deps} commands = pylint \ --rcfile=test/pylintrc \ test/unit/ \ test/integration/ \ {posargs} [testenv:blacken-src] basepython = python3 deps = black commands = black --line-length 120 \ src/aws_encryption_sdk_decrypt_oracle/ \ setup.py \ app.py \ test/ \ .chalice/pipeline.py \ {posargs} [testenv:blacken] basepython = python3 deps = {[testenv:blacken-src]deps} commands = {[testenv:blacken-src]commands} [testenv:black-check] basepython = python3 deps = {[testenv:blacken]deps} commands = {[testenv:blacken-src]commands} --diff [testenv:isort-seed] basepython = python3 deps = seed-isort-config commands = seed-isort-config [testenv:isort] basepython = python3 deps = isort commands = isort -rc \ src \ test \ #doc \ setup.py \ .chalice/pipeline.py \ app.py \ {posargs} [testenv:isort-check] basepython = python3 deps = {[testenv:isort]deps} commands = {[testenv:isort]commands} -c [testenv:autoformat] basepython = python3 deps = {[testenv:blacken]deps} {[testenv:isort-seed]deps} {[testenv:isort]deps} commands = {[testenv:blacken]commands} {[testenv:isort-seed]commands} {[testenv:isort]commands} [testenv:doc8] basepython = python3 deps = sphinx doc8 commands = doc8 README.rst [testenv:readme] basepython = python3 deps = readme_renderer commands = python setup.py check -r -s [testenv:bandit] basepython = python3 deps = bandit>=1.5.1 commands = bandit -r src/aws_encryption_sdk_decrypt_oracle/ # Prone to false positives: only run independently [testenv:vulture] basepython = python3 deps = vulture commands = vulture src/aws_encryption_sdk_decrypt_oracle/ [testenv:linters] basepython = python3 deps = {[testenv:flake8]deps} {[testenv:pylint]deps} {[testenv:doc8]deps} {[testenv:readme]deps} {[testenv:bandit]deps} commands = {[testenv:flake8]commands} {[testenv:pylint]commands} {[testenv:doc8]commands} {[testenv:readme]commands} {[testenv:bandit]commands} [testenv:linters-tests] basepython = python3 deps = {[testenv:flake8-tests]deps} {[testenv:pylint-tests]deps} commands = {[testenv:flake8-tests]commands} {[testenv:pylint-tests]commands} # Release tooling [testenv:park] basepython = python3 skip_install = true deps = pypi-parker setuptools commands = python setup.py park [testenv:build] basepython = python3 skip_install = true deps = wheel setuptools commands = python setup.py sdist bdist_wheel [testenv:test-release] basepython = python3 skip_install = true deps = {[testenv:build]deps} twine commands = {[testenv:build]commands} twine upload --skip-existing --repository testpypi dist/* [testenv:release] basepython = python3 skip_install = true deps = {[testenv:build]deps} twine commands = {[testenv:build]commands} twine upload --skip-existing --repository pypi dist/*