bootstrapit updates

This commit is contained in:
Manuel Barkhau 2020-07-19 13:58:33 +00:00
parent e70c45403c
commit f1e17562b8
5 changed files with 251 additions and 26 deletions

144
.gitignore vendored
View file

@ -73,3 +73,147 @@ envs.txt
test_build_logs/*.log test_build_logs/*.log
build/miniconda3.sh build/miniconda3.sh
compat_test/ compat_test/
# https://github.com/github/gitignore/blob/master/Global/Linux.gitignore
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# https://raw.githubusercontent.com/github/gitignore/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# https://raw.githubusercontent.com/github/gitignore/master/Global/JetBrains.gitignore
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser

View file

@ -13,9 +13,13 @@ unit:
- make test_compat - make test_compat
coverage: '/^(TOTAL|src).*?(\d+\%)$/' coverage: '/^(TOTAL|src).*?(\d+\%)$/'
artifacts: artifacts:
reports:
junit:
- reports/flake8.xml
- reports/pytest.xml
paths: paths:
- htmlcov/ - reports/htmlcov/
- mypycov/ - reports/mypycov/
allow_failure: false allow_failure: false
@ -24,8 +28,8 @@ pages:
script: script:
- mkdir -p public/cov - mkdir -p public/cov
- mkdir -p public/mypycov - mkdir -p public/mypycov
- cp -r htmlcov/* public/cov/ - cp -r reports/htmlcov/* public/cov/
- cp -r mypycov/* public/mypycov/ - cp -r reports/mypycov/* public/mypycov/
artifacts: artifacts:
paths: paths:
- public - public

View file

@ -300,9 +300,9 @@ git_hooks:
## -- Integration -- ## -- Integration --
## Run flake8 linter and check for fmt ## Run isort with --check-only
.PHONY: lint .PHONY: lint_isort
lint: lint_isort:
@printf "isort ..\n" @printf "isort ..\n"
@$(DEV_ENV)/bin/isort \ @$(DEV_ENV)/bin/isort \
--check-only \ --check-only \
@ -314,6 +314,10 @@ lint:
src/ test/ src/ test/
@printf "\e[1F\e[9C ok\n" @printf "\e[1F\e[9C ok\n"
## Run sjfmt with --check
.PHONY: lint_sjfmt
lint_sjfmt:
@printf "sjfmt ..\n" @printf "sjfmt ..\n"
@$(DEV_ENV)/bin/sjfmt \ @$(DEV_ENV)/bin/sjfmt \
--target-version=py36 \ --target-version=py36 \
@ -323,19 +327,36 @@ lint:
src/ test/ 2>&1 | sed "/All done/d" | sed "/left unchanged/d" src/ test/ 2>&1 | sed "/All done/d" | sed "/left unchanged/d"
@printf "\e[1F\e[9C ok\n" @printf "\e[1F\e[9C ok\n"
## Run flake8
.PHONY: lint_flake8
lint_flake8:
@rm -f reports/flake8*;
@mkdir -p "reports/";
@printf "flake8 ..\n" @printf "flake8 ..\n"
@$(DEV_ENV)/bin/flake8 src/ @$(DEV_ENV)/bin/flake8 src/ --tee --output-file reports/flake8.txt || exit 0;
@$(DEV_ENV)/bin/flake8_junit reports/flake8.txt reports/flake8.xml >> /dev/null;
@$(DEV_ENV_PY) scripts/exit_0_if_empty.py reports/flake8.txt;
@printf "\e[1F\e[9C ok\n" @printf "\e[1F\e[9C ok\n"
## Run flake8 linter and check for fmt
.PHONY: lint
lint: lint_isort lint_sjfmt lint_flake8
## Run mypy type checker ## Run mypy type checker
.PHONY: mypy .PHONY: mypy
mypy: mypy:
@rm -rf ".mypy_cache"; @rm -rf ".mypy_cache";
@rm -rf "reports/mypycov";
@mkdir -p "reports/";
@printf "mypy ....\n" @printf "mypy ....\n"
@MYPYPATH=stubs/:vendor/ $(DEV_ENV_PY) -m mypy \ @MYPYPATH=stubs/:vendor/ $(DEV_ENV_PY) -m mypy \
--html-report mypycov \ --html-report reports/mypycov \
--no-error-summary \ --no-error-summary \
src/ | sed "/Generated HTML report/d" src/ | sed "/Generated HTML report/d"
@printf "\e[1F\e[9C ok\n" @printf "\e[1F\e[9C ok\n"
@ -344,16 +365,10 @@ mypy:
## Run pylint. Should not break the build yet ## Run pylint. Should not break the build yet
.PHONY: pylint .PHONY: pylint
pylint: pylint:
@printf "pylint ..\n"; @mkdir -p "reports/";
@$(DEV_ENV)/bin/pylint --jobs=4 --output-format=colorized --score=no \
--disable=C0103,C0301,C0330,C0326,C0330,C0411,R0903,W1619,W1618,W1203 \
--extension-pkg-whitelist=ujson,lxml,PIL,numpy,pandas,sklearn,pyblake2 \
src/
@$(DEV_ENV)/bin/pylint --jobs=4 --output-format=colorized --score=no \
--disable=C0103,C0111,C0301,C0330,C0326,C0330,C0411,R0903,W1619,W1618,W1203 \
--extension-pkg-whitelist=ujson,lxml,PIL,numpy,pandas,sklearn,pyblake2 \
test/
@printf "pylint ..\n";
@$(DEV_ENV)/bin/pylint --rcfile=setup.cfg src/ test/
@printf "\e[1F\e[9C ok\n" @printf "\e[1F\e[9C ok\n"
@ -363,6 +378,9 @@ test:
@rm -rf ".pytest_cache"; @rm -rf ".pytest_cache";
@rm -rf "src/__pycache__"; @rm -rf "src/__pycache__";
@rm -rf "test/__pycache__"; @rm -rf "test/__pycache__";
@rm -rf "reports/testcov/";
@rm -f "reports/pytest*";
@mkdir -p "reports/";
# First we test the local source tree using the dev environment # First we test the local source tree using the dev environment
ENV=$${ENV-dev} \ ENV=$${ENV-dev} \
@ -371,8 +389,10 @@ test:
$(DEV_ENV_PY) -m pytest -v \ $(DEV_ENV_PY) -m pytest -v \
--doctest-modules \ --doctest-modules \
--verbose \ --verbose \
--cov-report html \ --cov-report "html:reports/testcov/" \
--cov-report term \ --cov-report term \
--html=reports/pytest/index.html \
--junitxml reports/pytest.xml \
-k "$${PYTEST_FILTER}" \ -k "$${PYTEST_FILTER}" \
$(shell cd src/ && ls -1 */__init__.py | awk '{ sub(/\/__init__.py/, "", $$1); print "--cov "$$1 }') \ $(shell cd src/ && ls -1 */__init__.py | awk '{ sub(/\/__init__.py/, "", $$1); print "--cov "$$1 }') \
test/ src/; test/ src/;
@ -394,9 +414,9 @@ test:
## -- Helpers -- ## -- Helpers --
## Run code formatter on src/ and test/ ## Run import sorting on src/ and test/
.PHONY: fmt .PHONY: fmt_isort
fmt: fmt_isort:
@$(DEV_ENV)/bin/isort \ @$(DEV_ENV)/bin/isort \
--force-single-line-imports \ --force-single-line-imports \
--length-sort \ --length-sort \
@ -405,6 +425,10 @@ fmt:
--project $(PKG_NAME) \ --project $(PKG_NAME) \
src/ test/; src/ test/;
## Run code formatter on src/ and test/
.PHONY: fmt_sjfmt
fmt_sjfmt:
@$(DEV_ENV)/bin/sjfmt \ @$(DEV_ENV)/bin/sjfmt \
--target-version=py36 \ --target-version=py36 \
--skip-string-normalization \ --skip-string-normalization \
@ -412,10 +436,14 @@ fmt:
src/ test/; src/ test/;
## Run code formatters
.PHONY: fmt
fmt: fmt_isort fmt_sjfmt
## Shortcut for make fmt lint mypy test
## Shortcut for make fmt lint mypy devtest test
.PHONY: check .PHONY: check
check: fmt lint mypy test check: fmt lint mypy devtest test
## Start subshell with environ variables set. ## Start subshell with environ variables set.

View file

@ -20,7 +20,9 @@ flake8-comprehensions
flake8-junit-report flake8-junit-report
pylint pylint
mypy mypy
isort # pylint doesn't support isort>=5 for now
# https://github.com/PyCQA/pylint/issues/3722
isort<5
# http://doc.pytest.org/en/latest/py27-py34-deprecation.html # http://doc.pytest.org/en/latest/py27-py34-deprecation.html
# The pytest 4.6 series will be the last to support Python 2.7 # The pytest 4.6 series will be the last to support Python 2.7
@ -28,7 +30,9 @@ isort
# pytest 5.0 and onwards will support only Python 3.5+. # pytest 5.0 and onwards will support only Python 3.5+.
pytest<5.0 pytest<5.0
pytest-cov pytest-cov
pytest-html # https://github.com/pytest-dev/pytest-html/blob/master/CHANGES.rst
# pytest-html 2.0+ doesn't support python2.7
pytest-html<2.0
readme_renderer[md] readme_renderer[md]
twine twine

View file

@ -12,6 +12,13 @@ strict_optional = True
ignore_missing_imports = True ignore_missing_imports = True
show_error_codes = True show_error_codes = True
[tool:isort]
known_third_party = pathlib2
force_single_line = True
length_sort = True
line_length = 100
[flake8] [flake8]
max-line-length = 100 max-line-length = 100
max-complexity = 10 max-complexity = 10
@ -48,6 +55,8 @@ ignore =
D102 D102
# Missing docstring in public function # Missing docstring in public function
D103 D103
# Missing docstring in public package
# D104
# Missing docstring in magic method # Missing docstring in magic method
# D105 # D105
# Missing docstring on __init__ # Missing docstring on __init__
@ -97,3 +106,39 @@ README.md =
img.shields.io/static/v1.svg?label=PyCalVer&message={version}&color=blue img.shields.io/static/v1.svg?label=PyCalVer&message={version}&color=blue
Successfully installed pycalver-{pep440_version} Successfully installed pycalver-{pep440_version}
pycalver, version {version} pycalver, version {version}
[tool:pylint]
score = yes
# pylint-ignore only works with jobs = 1
jobs = 1
# Set the output format. Available formats are text, parseable, colorized,
# msvs (visual studio) and html. You can also give a reporter class, eg
# mypackage.mymodule.MyReporterClass.
output-format = colorized
# Maximum number of locals for function / method body
max-locals = 20
# Maximum number of arguments for function / method
max-args = 8
good-names = logger,i,ex
# These are packages that are implemented as c extensions and
# which pylint cannot do introspection on.
extension-pkg-whitelist = numpy,pandas,lxml,PIL,sklearn,pyblake2
notes=TODO,FIXME,XXX,SLOW,BUG
# https://pylint.pycqa.org/en/stable/technical_reference/features.html
disable =
bad-continuation,
bad-whitespace,
logging-fstring-interpolation,
missing-docstring,
missing-module-docstring,
missing-class-docstring,
missing-function-docstring,