diff --git a/Dockerfile b/Dockerfile index 0cb2a3920..09b74fea2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,8 +35,7 @@ COPY material material COPY package.json package.json COPY README.md README.md COPY requirements.txt requirements.txt -COPY MANIFEST.in MANIFEST.in -COPY setup.py setup.py +COPY pyproject.toml pyproject.toml # Perform build and cleanup artifacts and caches RUN \ diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 89203b35d..000000000 --- a/MANIFEST.in +++ /dev/null @@ -1,11 +0,0 @@ -recursive-include material *.js *.css *.map *.html *.svg *.png *.yml -recursive-include material *.ttf *.woff *.woff2 LICENSE* -recursive-exclude material/.overrides * -recursive-exclude site * -recursive-exclude src * -recursive-exclude * __pycache__ -recursive-exclude * *.py[co] -include LICENSE -include package.json -include README.md -include requirements.txt diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..987a11bbd --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,84 @@ +# Copyright (c) 2016-2022 Martin Donath + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +[build-system] +requires = [ + "hatchling", + "hatch-requirements-txt", + "hatch-nodejs-version>=0.3.0" +] +build-backend = "hatchling.build" + +[project] +name = "mkdocs-material" +dynamic = [ + "version", + "dependencies", + "license", + "description", + "authors", + "keywords", + "urls", +] +readme = "README.md" +requires-python = ">=3.7" +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "License :: OSI Approved :: MIT License", + "Programming Language :: JavaScript", + "Programming Language :: Python", + "Topic :: Documentation", + "Topic :: Software Development :: Documentation", + "Topic :: Text Processing :: Markup :: HTML", +] + +[project.urls] +Documentation = "https://squidfunk.github.io/mkdocs-material/" +Source = "https://github.com/squidfunk/mkdocs-material" +Changelog = "https://squidfunk.github.io/mkdocs-material/changelog/" +Issues = "https://github.com/squidfunk/mkdocs-material/issues" +Funding = "https://github.com/sponsors/squidfunk" + +[project.entry-points."mkdocs.plugins"] +"material/info" = "material.plugins.info.plugin:InfoPlugin" +"material/offline" = "material.plugins.offline.plugin:OfflinePlugin" +"material/search" = "material.plugins.search.plugin:SearchPlugin" +"material/social" = "material.plugins.social.plugin:SocialPlugin" +"material/tags" = "material.plugins.tags.plugin:TagsPlugin" + +[project.entry-points."mkdocs.themes"] +material = "material" + +[tool.hatch.version] +source = "nodejs" + +[tool.hatch.metadata.hooks.nodejs] +fields = ["license", "description", "authors", "keywords", "urls"] + +[tool.hatch.metadata.hooks.requirements_txt] +filename = "requirements.txt" + +[tool.hatch.build.targets.wheel] +include = ["/material"] + +[tool.hatch.build.targets.sdist] +include = ["/material", "/package.json", "/requirements.txt"] +exclude = ["/material/.overrides"] diff --git a/setup.py b/setup.py index ee03929a4..4a07f8eb8 100644 --- a/setup.py +++ b/setup.py @@ -18,69 +18,36 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. -import json -from setuptools import setup, find_packages +import sys -# Load package.json contents -with open("package.json") as f: - package = json.load(f) +from setuptools import setup -# Load list of dependencies +# ----------------------------------------------------------------------------- +# Do not use – only provided for compatibility +# ----------------------------------------------------------------------------- + +sys.stderr.write( + """ +=============================== +Unsupported installation method +=============================== +This version of mkdocs-material no longer supports +installation with `python setup.py install`. +Please use `python -m pip install .` instead. +""" +) +sys.exit(1) + +# The below code will never execute, however GitHub is particularly +# picky about where it finds Python packaging metadata. +# See: https://github.com/github/feedback/discussions/6456 with open("requirements.txt") as f: install_requires = [ line for line in f.read().split("\n") - if line and not line.startswith("#") + if line and not line.startswith("#") ] -# Load README contents -with open("README.md", encoding = "utf-8") as f: - long_description = f.read() - -# Package description setup( name = "mkdocs-material", - version = package["version"], - url = package["homepage"], - project_urls = { - "Changelog": "https://squidfunk.github.io/mkdocs-material/changelog/", - "Documentation": "https://squidfunk.github.io/mkdocs-material/", - "Source": "https://github.com/squidfunk/mkdocs-material", - "Issues": "https://github.com/squidfunk/mkdocs-material/issues", - "Funding": "https://github.com/sponsors/squidfunk" - }, - license = package["license"], - description = package["description"], - long_description = long_description, - long_description_content_type = "text/markdown", - author = package["author"]["name"], - author_email = package["author"]["email"], - keywords = package["keywords"], - classifiers = [ - "Development Status :: 5 - Production/Stable", - "Environment :: Web Environment", - "License :: OSI Approved :: MIT License", - "Programming Language :: JavaScript", - "Programming Language :: Python", - "Topic :: Documentation", - "Topic :: Software Development :: Documentation", - "Topic :: Text Processing :: Markup :: HTML" - ], - packages = find_packages(exclude = ["src", "src.*"]), - include_package_data = True, install_requires = install_requires, - extras_require = {}, - python_requires='>=3.7', - entry_points = { - "mkdocs.themes": [ - "material = material", - ], - "mkdocs.plugins": [ - "material/info = material.plugins.info.plugin:InfoPlugin", - "material/offline = material.plugins.offline.plugin:OfflinePlugin", - "material/search = material.plugins.search.plugin:SearchPlugin", - "material/social = material.plugins.social.plugin:SocialPlugin", - "material/tags = material.plugins.tags.plugin:TagsPlugin" - ] - }, - zip_safe = False )