
* Bump the package API of the `builtin` repo to `v2.0` * Move `var/spack/repos/builtin` -> `var/spack/repos/spack_repo/builtin` * Move test repos `var/spack/repos/{builtin.mock,tutorial,...}` -> `var/spack/test_repos/` * Update package dir names to v2 format (`-` -> `_` etc) * Change absolute imports `from spack.pkg.builtin.my_pkg ...` to relative imports `from ..my_pkg.package ...` Users who have a repo on top of builtin should change imports from ```python from spack.pkg.builtin.my_pkg import MyPkg ``` to ```python from spack_repo.builtin.packages.my_pkg.package import MyPkg ``` and can configure their editors with ``` PYTHONPATH=$spack/lib/spack:$spack/var/spack/repos ``` [skip-verify-checksums]
300 lines
6.6 KiB
TOML
300 lines
6.6 KiB
TOML
[project]
|
|
name="spack"
|
|
description="The spack package manager"
|
|
requires-python=">=3.6"
|
|
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.ruff]
|
|
line-length = 99
|
|
extend-include = ["bin/spack"]
|
|
extend-exclude = ["lib/spack/external", "*.pyi"]
|
|
|
|
[tool.ruff.format]
|
|
skip-magic-trailing-comma = true
|
|
|
|
[tool.ruff.lint]
|
|
extend-select = ["I"]
|
|
ignore = ["E731", "E203"]
|
|
|
|
[tool.ruff.lint.isort]
|
|
split-on-trailing-comma = false
|
|
section-order = [
|
|
"future",
|
|
"standard-library",
|
|
"third-party",
|
|
"archspec",
|
|
"llnl",
|
|
"spack",
|
|
"first-party",
|
|
"local-folder",
|
|
]
|
|
|
|
[tool.ruff.lint.isort.sections]
|
|
spack = ["spack"]
|
|
archspec = ["archspec"]
|
|
llnl = ["llnl"]
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
"var/spack/*/package.py" = ["F403", "F405", "F811", "F821"]
|
|
"*-ci-package.py" = ["F403", "F405", "F821"]
|
|
|
|
[tool.black]
|
|
line-length = 99
|
|
include = '(lib/spack|var/spack/repos|var/spack/test_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]
|
|
files = [
|
|
"lib/spack/llnl/**/*.py",
|
|
"lib/spack/spack/**/*.py",
|
|
"var/spack/repos/spack_repo/builtin/packages/*/package.py"
|
|
]
|
|
mypy_path = [
|
|
"lib/spack",
|
|
"lib/spack/external",
|
|
"var/spack/repos",
|
|
]
|
|
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 = 'spack_repo.*'
|
|
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', 'var/spack/test_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"
|