diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..e0fef58 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 + +[*.{json,yaml,yml}] +indent_size = 2 + +[*.{markdown,sh}] +max_line_length = 80 + +[*.py] +max_line_legth = 120 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b6e4761 --- /dev/null +++ b/.gitignore @@ -0,0 +1,129 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/.gitlint b/.gitlint new file mode 100644 index 0000000..db97d76 --- /dev/null +++ b/.gitlint @@ -0,0 +1,96 @@ +# All these sections are optional, edit this file as you like. +[general] +# Ignore certain rules, you can reference them by their id or by their full +# name +# ignore=title-trailing-punctuation, T3 + +# verbosity should be a value between 1 and 3, the command line -v flags take +# precedence over this +# verbosity = 2 + +# By default gitlint will ignore merge commits. Set to 'false' to disable. +# ignore-merge-commits=true + +# By default gitlint will ignore fixup commits. Set to 'false' to disable. +# ignore-fixup-commits=true + +# By default gitlint will ignore squash commits. Set to 'false' to disable. +# ignore-squash-commits=true + +# Enable debug mode (prints more output). Disabled by default. +# debug=true + +# Set the extra-path where gitlint will search for user defined rules +# See http://jorisroovers.github.io/gitlint/user_defined_rules for details +# extra-path=examples/ + +contrib=contrib-title-conventional-commits,contrib-body-requires-signed-off-by + +# [title-max-length] +# line-length=80 + +# [title-must-not-contain-word] +# Comma-separated list of words that should not occur in the title. Matching is +# case insensitive. It's fine if the keyword occurs as part of a larger word +# (so "WIPING" will not cause a violation, but "WIP: my title" will. +# words=wip + +# [title-match-regex] +# python like regex (https://docs.python.org/2/library/re.html) that the +# commit-msg title must be matched to. +# Note that the regex can contradict with other rules if not used correctly +# (e.g. title-must-not-contain-word). +# regex=^US[0-9]* + +# [B1] +# B1 = body-max-line-length +# line-length=120 + +# [body-min-length] +# min-length=5 + +# [body-is-missing] +# Whether to ignore this rule on merge commits (which typically only have a title) +# default = True +# ignore-merge-commits=false + +# [body-changed-file-mention] +# List of files that need to be explicitly mentioned in the body when they are +# changed This is useful for when developers often erroneously edit certain +# files or git submodules. By specifying this rule, developers can only change +# the file when they explicitly reference it in the commit message. +# files=gitlint/rules.py,README.md + +# [author-valid-email] +# python like regex (https://docs.python.org/2/library/re.html) that the +# commit author email address should be matched to +# For example, use the following regex if you only want to allow email +# addresses from foo.com +# regex=[^@]+@foo.com + +# [ignore-by-title] +# Ignore certain rules for commits of which the title matches a regex +# E.g. Match commit titles that start with "Release" +# regex=^Release(.*) +# +# Ignore certain rules, you can reference them by their id or by their full name +# Use 'all' to ignore all rules +# ignore=T1,body-min-length + +# [ignore-by-body] +# Ignore certain rules for commits of which the body has a line that matches a +# regex +# E.g. Match bodies that have a line that contain "release" +# regex=(.*)release(.*) +# +# Ignore certain rules, you can reference them by their id or by their full name +# Use 'all' to ignore all rules +# ignore=T1,body-min-length + +# Enable Conventional Commit subject line enforcement +# https://www.conventionalcommits.org/en/v1.0.0/ +# +# Since we want all subjects to be well formed, enforce the topics +# to the following (fairly standard) topics and require them to be Mixed Case +[contrib-title-conventional-commits] +types=Fix,Feat,Chore,Docs,Style,Refactor,Perf,Test,Revert,CI,Build diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..3944b70 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,49 @@ +--- +ci: + autofix_commit_msg: "Chore: pre-commit autoupdate" + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: f71fa2c1f9cf5cb705f73dffe4b21f7c61470ba9 # frozen: v4.4.0 + hooks: + - id: trailing-whitespace + - id: check-added-large-files + - id: check-ast + - id: check-json + - id: check-merge-conflict + - id: check-xml + - id: check-yaml + - id: debug-statements + - id: end-of-file-fixer + - id: requirements-txt-fixer + - id: mixed-line-ending + args: ["--fix=lf"] + - id: no-commit-to-branch + args: + - --branch=dev + - --branch=master + - --branch=main + - --branch=rc + - --branch=production + + - repo: https://github.com/jorisroovers/gitlint + rev: acc9d9de6369b76d22cb4167029d2035e8730b98 # frozen: v0.19.1 + hooks: + - id: gitlint + + - repo: https://github.com/pre-commit/mirrors-prettier + rev: 672abe14d309fc28817d45b6be25ea976a92222a # frozen: v3.0.2 + hooks: + - id: prettier + stages: [commit] + + - repo: https://github.com/adrienverge/yamllint.git + rev: b05e028c5881819161d11cb543fd96a30c06cceb # frozen: v1.32.0 + hooks: + - id: yamllint + types: [yaml] + + - repo: https://github.com/shellcheck-py/shellcheck-py + rev: 375289a39f5708101b1f916eb729e8d6da96993f # frozen: v0.9.0.5 + hooks: + - id: shellcheck diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..d4497f8 --- /dev/null +++ b/.yamllint @@ -0,0 +1,11 @@ +--- +extends: default + +rules: + empty-lines: + max-end: 1 + line-length: + max: 120 + comments: + # prettier forces 1 space comment separator + min-spaces-from-content: 1