diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4704582d2..e5471c10e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -46,10 +46,10 @@ jobs: python-version: ${{ env.PYTHON_VERSION }} - name: Set up Python dependencies - run: pip install --upgrade setuptools wheel twine + run: pip install --upgrade build twine - name: Build Python package - run: python setup.py build sdist bdist_wheel --universal + run: python -m build - name: Publish Python package env: diff --git a/Dockerfile b/Dockerfile index 3efa35134..da87a0012 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,11 +32,10 @@ WORKDIR /tmp # Copy files necessary for build COPY material material -COPY MANIFEST.in MANIFEST.in COPY package.json package.json COPY README.md README.md COPY requirements.txt requirements.txt -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 50ff2bbc9..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..64b0ad958 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,51 @@ +[build-system] +requires = ["hatchling", "hatch-requirements-txt", "hatch-nodejs-version"] +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.entry-points."mkdocs.plugins"] +search = "material.plugins.search.plugin:SearchPlugin" +social = "material.plugins.social.plugin:SocialPlugin" +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 9127aee02..3fd8f6436 100644 --- a/setup.py +++ b/setup.py @@ -1,79 +1,32 @@ -# Copyright (c) 2016-2022 Martin Donath +import sys -# 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: +from setuptools import setup -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. +sys.stderr.write( + """ +=============================== +Unsupported installation method +=============================== +This version of mkdocs-material no longer supports +installation with `python setup.py install`. -# 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. +Please use `python -m pip install .` instead. +""" +) +sys.exit(1) -import json -from setuptools import setup, find_packages -# Load package.json contents -with open("package.json") as f: - package = json.load(f) +# 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 -# Load list of dependencies with open("requirements.txt") as f: install_requires = [ line for line in f.read().split("\n") 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 = { - "Source": "https://github.com/squidfunk/mkdocs-material", - }, - 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, - python_requires='>=3.7', - entry_points = { - "mkdocs.themes": [ - "material = material" - ], - "mkdocs.plugins": [ - "search = material.plugins.search.plugin:SearchPlugin", - "social = material.plugins.social.plugin:SocialPlugin", - "tags = material.plugins.tags.plugin:TagsPlugin" - ] - }, - zip_safe = False + name="mkdocs-material", + install_requires=install_requires, )