summaryrefslogblamecommitdiff
path: root/pyproject.toml
blob: d33b27a99c20ac018d9907ed1d3041195eff44fa (plain) (tree)
1
2
3
4
5
6





                                       














                                               

          













































                                 

                
                                                          










                        
                                
 
            
                










                                   
                                     

                 


                    
                                                                                                                
                                                                                 
                         








                                                                            








                                

                                                                            








                                
 





                                                  




                                                                                        
                         
















                    
                         
                                 
 








                                                




                                 
                                        

























                                                                 
                    
 

                     


























                                                             


                                      











                                                                                           
                                                                                     
[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 = '''
    \.pyi?$
'''
extend-exclude = '''
/(
    \.git
  | \.mypy_cache
  | ^lib/spack/external/
  | ^opt/
)/
'''
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',
      'jinja2',
      'jsonschema',
      'macholib',
      'markupsafe',
      'numpy',
      'pyristent',
      'pytest',
      'ruamel.yaml',
      'six',
  ]
  follow_imports = 'skip'
  follow_imports_for_stubs = true

[tool.pyright]
useLibraryCodeForTypes = true
reportMissingImports = true
reportWildcardImportFromLibrary = false
include = ['lib/spack']
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.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"