[project]
name="spack"
description="The spack package manager"
dependencies=[
"clingo",
"setuptools",
]
dynamic = ["version"]
[project.scripts]
spack = "lib.spack.spack_installable.main:main"
[tool.hatch.version]
path = "lib/spack/spack/__init__.py"
[project.optional-dependencies]
dev = [
"pip>=21.3",
"pytest",
"pytest-xdist",
"setuptools",
"click",
'black',
"mypy",
"isort",
"flake8",
"vermin",
]
ci = [
"pytest-cov",
"codecov[toml]",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
include = [
"/bin",
"/etc",
"/lib",
"/share",
"/var",
"CITATION.cff",
"COPYRIGHT",
"LICENSE-APACHE",
"LICENSE-MIT",
"NOTICE",
"README.md",
"SECURITY.md",
]
[tool.hatch.envs.default]
features = [
"dev",
]
[tool.hatch.envs.default.scripts]
spack = "./bin/spack"
style = "./bin/spack style"
test = "./bin/spack unit-test"
[tool.hatch.envs.ci]
features = [
"dev",
"ci",
]
[tool.black]
line-length = 99
target-version = ['py36', 'py37', 'py38', 'py39', 'py310']
include = '(lib/spack|var/spack/repos)/.*\.pyi?$|bin/spack$'
extend-exclude = 'lib/spack/external'
skip_magic_trailing_comma = true
[tool.isort]
line_length = 99
profile = "black"
sections = [
"FUTURE",
"STDLIB",
"THIRDPARTY",
"ARCHSPEC", "LLNL", "FIRSTPARTY",
"LOCALFOLDER",
]
known_first_party = "spack"
known_archspec = "archspec"
known_llnl = "llnl"
known_third_party = ["ruamel", "six"]
src_paths = "lib"
honor_noqa = true
[tool.mypy]
python_version = 3.7
files = ['lib/spack/llnl/**/*.py', 'lib/spack/spack/**/*.py', './var/spack/repos/builtin/packages/*/package.py']
mypy_path = ['bin', 'lib/spack', 'lib/spack/external', 'var/spack/repos/builtin']
allow_redefinition = true
# This and a generated import file allows supporting packages
namespace_packages = true
# To avoid re-factoring all the externals, ignore errors and missing imports
# globally, then turn back on in spack and spack submodules
ignore_errors = true
ignore_missing_imports = true
[[tool.mypy.overrides]]
module = 'spack.*'
ignore_errors = false
ignore_missing_imports = false
[[tool.mypy.overrides]]
module = 'packages.*'
ignore_errors = false
ignore_missing_imports = false
# we can't do this here, not a module scope option, in spack style instead
# disable_error_code = 'no-redef'
[[tool.mypy.overrides]]
module = 'llnl.*'
ignore_errors = false
ignore_missing_imports = false
[[tool.mypy.overrides]]
module = 'spack.test.packages'
ignore_errors = true
# ignore errors in fake import path for packages
[[tool.mypy.overrides]]
module = 'spack.pkg.*'
ignore_errors = true
ignore_missing_imports = true
# Spack imports a number of external packages, and they *may* require Python 3.8 or
# higher in recent versions. This can cause mypy to fail because we check for 3.7
# compatibility. We could restrict mypy to run for the oldest supported version (3.7),
# but that means most developers won't be able to run mypy, which means it'll fail
# more in CI. Instead, we exclude these imported packages from mypy checking.
[[tool.mypy.overrides]]
module = [
'IPython',
'altgraph',
'attr',
'boto3',
'botocore',
'distro',
'importlib.metadata',
'jinja2',
'jsonschema',
'macholib',
'markupsafe',
'numpy',
'pkg_resources',
'pyristent',
'pytest',
'ruamel.yaml',
'six',
]
follow_imports = 'skip'
follow_imports_for_stubs = true
[tool.pyright]
useLibraryCodeForTypes = true
reportMissingImports = true
reportWildcardImportFromLibrary = false
include = ['lib/spack', 'var/spack/repos']
ignore = ['lib/spack/external']
extraPaths = ['lib/spack', 'lib/spack/external']
[tool.coverage.run]
parallel = true
concurrency = ["multiprocessing"]
branch = true
source = ["bin", "lib"]
data_file = "./tests-coverage/.coverage"
omit = [
'lib/spack/spack/test/*',
'lib/spack/docs/*',
'lib/spack/external/*',
'share/spack/qa/*',
]
[tool.coverage.report]
# Regexes for lines to exclude from consideration
exclude_lines = [
# Have to re-enable the standard pragma
'pragma: no cover',
# Don't complain about missing debug-only code:
'def __repr__',
'if self\.debug',
# Don't complain if tests don't hit defensive assertion code:
'raise AssertionError',
'raise NotImplementedError',
# Don't complain if non-runnable code isn't run:
'if 0:',
'if False:',
'if __name__ == .__main__.:',
]
ignore_errors = true
[tool.coverage.paths]
source = [
".",
"/Users/runner/work/spack/spack",
"/System/Volumes/Data/home/runner/work/spack/spack",
"D:\\a\\spack\\spack",
]
[tool.coverage.html]
directory = "htmlcov"
[tool.vendoring]
destination = "lib/spack/external/_vendoring"
requirements = "lib/spack/external/vendor.txt"
namespace = ""
protected-files = ["__init__.py", "README.rst", "vendor.txt"]
patches-dir = "lib/spack/external/patches"
[tool.vendoring.transformations]
substitute = [
]
drop = [
# contains unnecessary scripts
"bin/",
# interpreter and OS specific msgpack libs
"msgpack/*.so",
# unneeded parts of setuptools
"easy_install.py",
"setuptools",
"pkg_resources/_vendor/",
"pkg_resources/extern/",
# trim vendored pygments styles and lexers
"pygments/styles/[!_]*.py",
'^pygments/lexers/(?!python|__init__|_mapping).*\.py$',
# trim rich's markdown support
"rich/markdown.py",
# ruamel.yaml installs unneded files
"ruamel.*.pth",
"pvectorc.*.so"
]
[tool.vendoring.typing-stubs]
six = ["six.__init__", "six.moves.__init__", "six.moves.configparser"]
distro = []
[tool.vendoring.license.directories]
setuptools = "pkg_resources"
[tool.vendoring.license.fallback-urls]
CacheControl = "https://raw.githubusercontent.com/ionrock/cachecontrol/v0.12.6/LICENSE.txt"
distlib = "https://bitbucket.org/pypa/distlib/raw/master/LICENSE.txt"
webencodings = "https://github.com/SimonSapin/python-webencodings/raw/master/LICENSE"