2025-02-13 06:07:32 +01:00
|
|
|
[build-system]
|
|
|
|
requires = ["hatchling", "hatch-vcs"]
|
|
|
|
build-backend = "hatchling.build"
|
|
|
|
|
|
|
|
[project]
|
|
|
|
name = "gitlint"
|
|
|
|
dynamic = ["version", "dependencies", "urls"]
|
|
|
|
description = "Git commit message linter written in python, checks your commit messages for style."
|
|
|
|
readme = "README.md"
|
|
|
|
|
|
|
|
license = "MIT"
|
|
|
|
requires-python = ">=3.7"
|
|
|
|
authors = [{ name = "Joris Roovers" }]
|
|
|
|
keywords = [
|
|
|
|
"git",
|
|
|
|
"gitlint",
|
|
|
|
"lint", #
|
|
|
|
]
|
|
|
|
classifiers = [
|
|
|
|
"Development Status :: 5 - Production/Stable",
|
|
|
|
"Environment :: Console",
|
|
|
|
"Intended Audience :: Developers",
|
|
|
|
"License :: OSI Approved :: MIT License",
|
|
|
|
"Operating System :: OS Independent",
|
|
|
|
"Programming Language :: Python",
|
|
|
|
"Programming Language :: Python :: 3.7",
|
|
|
|
"Programming Language :: Python :: 3.8",
|
|
|
|
"Programming Language :: Python :: 3.9",
|
|
|
|
"Programming Language :: Python :: 3.10",
|
|
|
|
"Programming Language :: Python :: 3.11",
|
|
|
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
|
|
"Programming Language :: Python :: Implementation :: PyPy",
|
|
|
|
"Topic :: Software Development :: Quality Assurance",
|
|
|
|
"Topic :: Software Development :: Testing",
|
|
|
|
]
|
|
|
|
|
|
|
|
[tool.hatch.version]
|
|
|
|
source = "vcs"
|
|
|
|
|
|
|
|
[tool.hatch.build]
|
|
|
|
exclude = ["*"]
|
|
|
|
|
|
|
|
[tool.hatch.metadata.hooks.vcs.urls]
|
|
|
|
Homepage = "https://jorisroovers.github.io/gitlint"
|
|
|
|
Documentation = "https://jorisroovers.github.io/gitlint"
|
|
|
|
Source = "https://github.com/jorisroovers/gitlint"
|
|
|
|
Changelog = "https://github.com/jorisroovers/gitlint/blob/main/CHANGELOG.md"
|
|
|
|
# TODO(jorisroovers): Temporary disable until fixed in hatch-vcs (see #460)
|
|
|
|
# 'Source Archive' = "https://github.com/jorisroovers/gitlint/archive/{commit_hash}.zip"
|
|
|
|
# 'Source Commit' = "https://github.com/jorisroovers/gitlint/tree/{commit_hash}"
|
|
|
|
|
|
|
|
# Use metadata hooks specified in 'hatch_build.py'
|
|
|
|
# (this line is critical when building wheels, when building sdist it seems optional)
|
|
|
|
[tool.hatch.metadata.hooks.custom]
|
|
|
|
|
|
|
|
# Environments #########################################################################################################
|
|
|
|
# NOTE: By default all environments inherit from the 'default' environment
|
|
|
|
|
|
|
|
# DEV
|
|
|
|
# Workaround for editable install:
|
|
|
|
# https://github.com/pypa/hatch/issues/588
|
|
|
|
[tool.hatch.envs.dev]
|
|
|
|
description = """
|
|
|
|
Dev environment (running gitlint itself from source)
|
|
|
|
"""
|
|
|
|
pre-install-commands = [
|
|
|
|
"pip install -e ./gitlint-core", #
|
|
|
|
]
|
|
|
|
|
|
|
|
[tool.hatch.envs.dev.scripts]
|
|
|
|
fullclean = [
|
|
|
|
"rm .coverage .coverage.lcov",
|
|
|
|
"rm -rf site dist .pytest_cache",
|
|
|
|
"rm -rf gitlint-core/dist gitlint-core/build gitlint-core/.pytest_cache",
|
|
|
|
"rm -rf qa/__pycache__ qa/.pytest_cache",
|
|
|
|
]
|
|
|
|
|
|
|
|
# TEST
|
|
|
|
[tool.hatch.envs.test]
|
|
|
|
description = """
|
|
|
|
Test environment (unit tests, formatting, lint)
|
|
|
|
"""
|
|
|
|
skip-install = true
|
|
|
|
dependencies = [
|
|
|
|
"gitlint-core[trusted-deps] @ {root:uri}/gitlint-core",
|
|
|
|
"black==23.1.0",
|
|
|
|
"pytest==7.2.1",
|
|
|
|
"pytest-cov==4.0.0",
|
|
|
|
"python-coveralls==2.9.3",
|
|
|
|
"ruff==0.0.252",
|
|
|
|
"radon==5.1.0",
|
|
|
|
"pdbr==0.8.2; sys_platform != \"win32\"",
|
|
|
|
]
|
|
|
|
|
|
|
|
[tool.hatch.envs.test.scripts]
|
|
|
|
unit-tests = [
|
|
|
|
"pytest --cov=gitlint-core --cov-report=term --cov-report=lcov:.coverage.lcov -rw -s {args:gitlint-core}",
|
|
|
|
]
|
|
|
|
u = "unit-tests"
|
|
|
|
unit-tests-no-cov = "pytest -rw -s {args:gitlint-core}"
|
|
|
|
format = "black --check --diff {args:.}"
|
|
|
|
lint = "ruff {args:gitlint-core/gitlint qa}"
|
|
|
|
autoformat = "black {args:.}"
|
|
|
|
autofix = [
|
|
|
|
"ruff --fix {args:gitlint-core/gitlint qa}",
|
|
|
|
"autoformat", #
|
|
|
|
]
|
|
|
|
|
|
|
|
all = [
|
|
|
|
"unit-tests",
|
|
|
|
"format",
|
|
|
|
"lint", #
|
|
|
|
]
|
|
|
|
stats = ["./tools/stats.sh"]
|
|
|
|
|
|
|
|
# QA
|
|
|
|
[tool.hatch.envs.qa]
|
|
|
|
description = """
|
|
|
|
Integration test environment.
|
|
|
|
Run a set of integration tests against any gitlint binary (not just the one from local source).
|
|
|
|
"""
|
|
|
|
detached = true
|
|
|
|
dependencies = [
|
|
|
|
"pytest==7.2.1",
|
|
|
|
"arrow==1.2.3",
|
|
|
|
"sh==1.14.3; sys_platform != \"win32\"",
|
|
|
|
"pdbr==0.8.2; sys_platform != \"win32\"",
|
|
|
|
]
|
|
|
|
|
|
|
|
[tool.hatch.envs.qa.scripts]
|
|
|
|
# The integration tests can be ran against any gitlint binary, e.g. one installed from pypi (for post-release testing)
|
|
|
|
# This is why by default we don't install the local dev version of gitlint in the qa environment
|
|
|
|
# To run integration tests against the dev version of gitlint, use install-local first
|
|
|
|
install-local = "pip install -e ./gitlint-core[trusted-deps]"
|
|
|
|
integration-tests = "pytest -rw -s {args:qa}"
|
|
|
|
i = "integration-tests"
|
|
|
|
|
|
|
|
|
|
|
|
# DOCS
|
|
|
|
[tool.hatch.envs.docs]
|
|
|
|
description = """
|
|
|
|
Documentation environment. Run docs build and serve commands.
|
|
|
|
"""
|
|
|
|
detached = true
|
|
|
|
dependencies = [
|
|
|
|
"mkdocs==1.4.2", #
|
|
|
|
]
|
|
|
|
|
|
|
|
[tool.hatch.envs.docs.scripts]
|
|
|
|
build = "mkdocs build --clean --strict"
|
|
|
|
serve = "mkdocs serve"
|
|
|
|
|
|
|
|
# Tool config ##########################################################################################################
|
|
|
|
|
2025-02-13 06:06:24 +01:00
|
|
|
[tool.black]
|
2025-02-13 06:07:32 +01:00
|
|
|
target_version = ['py37', 'py38', 'py39', 'py310']
|
2025-02-13 06:06:24 +01:00
|
|
|
line-length = 120
|
|
|
|
# extend-exclude: keep excluding files from .gitignore in addition to the ones specified
|
2025-02-13 06:07:32 +01:00
|
|
|
extend-exclude = "gitlint-core/gitlint/tests/samples/user_rules/import_exception/invalid_python.py"
|
|
|
|
|
|
|
|
[tool.ruff]
|
|
|
|
target-version = "py37"
|
|
|
|
extend-exclude = [
|
|
|
|
"gitlint-core/gitlint/tests/samples/user_rules/import_exception/invalid_python.py",
|
|
|
|
]
|
|
|
|
|
|
|
|
ignore = [
|
|
|
|
"E501", # Never enforce `E501` (line length violations) - taken care of by black
|
|
|
|
"SIM108", # Use ternary operator instead of if-else-block
|
|
|
|
"PLR0913", # Too many arguments to function call
|
|
|
|
]
|
|
|
|
|
|
|
|
select = [
|
|
|
|
"F", # PyFlakes
|
|
|
|
"E", # Pycodestyle
|
|
|
|
"W", # Pycodestyle
|
|
|
|
"I", # isort (import order)
|
|
|
|
"YTT", # flake8-2020 (misuse of sys.version)
|
|
|
|
"S", # flake8-bandit (security)
|
|
|
|
"B", # flake8-bugbear
|
|
|
|
"C4", # flake8-comprehensions (correct use of comprehensions)
|
|
|
|
"T10", # flake8-debugger (no debug statements)
|
|
|
|
"T20", # flake8-print (no print statements)
|
|
|
|
"SIM", # flake8-simplify (use simple code)
|
|
|
|
"TID", # flake8-tidy-imports (correct import syntax)
|
|
|
|
"ARG", # flake8-unused-arguments (no unused function arguments)
|
|
|
|
"DTZ", # flake8-datetimez (correct datetime usage)
|
|
|
|
"ERA", # eradicate (no commented out code)
|
|
|
|
"UP", # pyupgrade (modern python syntax)
|
|
|
|
"PLC", # pylint
|
|
|
|
"PLE", # pylint
|
|
|
|
"PLR", # pylint
|
|
|
|
"PLW", # pylint
|
|
|
|
"PIE", # flake8-pie
|
|
|
|
"RUF", # ruff specific
|
|
|
|
]
|
|
|
|
|
|
|
|
[tool.coverage.run]
|
|
|
|
branch = true # measure branch coverage in addition to statement coverage
|
|
|
|
|
|
|
|
[tool.coverage.report]
|
|
|
|
fail_under = 97
|
|
|
|
show_missing = true
|