diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 13242933702..d2bef0046c3 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -164,7 +164,7 @@ jobs: - python-version: '3.7' tox-env: 'alldeps-gtk-withcov-posix' trial-target: 'twisted.internet.test' - platform-deps: 'gtk-platform' + platform-deps: 'gtk_platform' tox-wrapper: 'xvfb-run -a' job-name: 'gtk-tests' @@ -210,7 +210,7 @@ jobs: # Make sure the matrix is defined in such a way that this is triggered # only on Linux. - name: Install GTK system deps - if: matrix.platform-deps == 'gtk-platform' + if: matrix.platform-deps == 'gtk_platform' run: | # *-dev dependencies are for pygobject # https://gitlab.gnome.org/GNOME/pygobject/-/blob/3.42.0/setup.py#L129-L134 diff --git a/.readthedocs.yml b/.readthedocs.yml index 1db818e369e..2fb134bb1e9 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -26,4 +26,4 @@ python: - method: pip path: . extra_requirements: - - dev-release + - dev_release diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 00000000000..99702ad3d3f --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,93 @@ +# This file dictates what goes into a sdist tarball. +# As a release tarball, we want to include: +# - All of the library code. +# - All the useful documentation (but not the super historic stuff) +# - All of the test files, so that the tests can be run on an installed copy. +# We do not want to include: +# - Release management files (e.g. topfiles) +# - Things only useful when running from a source checkout + +# Do not include the old topfiles, or news fragments +recursive-exclude src/twisted *.misc *.bugfix *.doc *.feature *.removal +recursive-exclude src/twisted NEWS README newsfragments +exclude src/twisted/topfiles/CREDITS src/twisted/topfiles/ChangeLog.Old + +# Include NEWS, READMEs, etc +recursive-include docs README +include NEWS.rst README.rst INSTALL.rst CONTRIBUTING.md LICENSE code_of_conduct.md + +# Exclude admin scripts and things only useful when running from a source checkout +exclude codecov.yml +exclude .coveralls.yml +exclude .git-blame-ignore-revs +exclude .readthedocs.yml +exclude .pre-commit-config.yaml +recursive-exclude .circleci * +exclude azure-pipelines +recursive-exclude azure-pipelines * +prune bin +prune admin +prune .github +prune docs/_build + + +# Include marker indicating that we ship type annotations (PEP 561) +include src/twisted/py.typed + +# Include test-running utilities for downstream packagers +include mypy.ini tox.ini .coveragerc + +# Include our docs templates +recursive-include src/twisted/python/_pydoctortemplates *.html + +# Include all modules, even on a Python we're not installing for +recursive-include src/twisted *.py + +# Some tests stuff +recursive-include src/twisted *.pem +recursive-include src/twisted/test *.pem.* +include src/twisted/internet/test/fake_CAs/* +include src/twisted/mail/test/rfc822.message + +# Some extras +recursive-include src/twisted *.glade *.pxi *.h *.c *.bat *.g *.pyx *.zsh *.txt + +# Docs +include docs/fun/lightbulb +recursive-include docs/historic/Quotes * +recursive-include docs *.1 +recursive-include docs *.Quotes +recursive-include docs *.bat +recursive-include docs *.bmp +recursive-include docs *.com +recursive-include docs *.conf +recursive-include docs *.css +recursive-include docs *.dia +recursive-include docs *.gif +recursive-include docs *.glade +recursive-include docs *.html +recursive-include docs *.ico +recursive-include docs *.nib +recursive-include docs *.pem +recursive-include docs *.placeholder +recursive-include docs *.png +recursive-include docs *.py +recursive-include docs *.rpy +recursive-include docs *.rst +recursive-include docs *.rtl +recursive-include docs *.service +recursive-include docs *.socket +recursive-include docs *.svg +recursive-include docs *.tac +recursive-include docs *.tidyrc +recursive-include docs *.tpl +recursive-include docs *.txt +recursive-include docs *.users +recursive-include docs *.xml +recursive-include docs Makefile +recursive-include docs/_static/js *.js +prune docs/_build + +# Don't have the real old historic docs +exclude docs/historic/2003 +recursive-exclude docs/historic/2003 * diff --git a/admin/twisted.spec b/admin/twisted.spec new file mode 100644 index 00000000000..ef0f21e9f89 --- /dev/null +++ b/admin/twisted.spec @@ -0,0 +1,62 @@ +%define name Twisted +%define version SVN-trunk +%define release 1tummy +%define prefix %{_prefix} +%define py_libver 2.3 + +Summary: Twisted is an event-based framework for internet applications. +Name: %{name} +Version: %{version} +Release: %{release} +Source: %{name}-%{version}.tar.bz2 +License: MIT +Group: System/Libraries +URL: http://www.twistedmatrix.com/ +Requires: python >= %{py_libver} +BuildRequires: python-devel +BuildRoot: %{_tmppath}/%{name}-buildroot +Prefix: %{_prefix} + +%description +Twisted is an event-based framework for internet applications. It includes a +web server, a telnet server, a chat server, a news server, a generic client +and server for remote object access, and APIs for creating new protocols and +services. Twisted supports integration of the Tk, GTK+, Qt or wxPython event +loop with its main event loop. The Win32 event loop is also supported, as is +basic support for running servers on top of Jython. + +%package doc +Summary: Twisted documentation and example programs +Group: Development/Python +%description doc +Twisted is an event-based framework for internet applications. +Install Twisted-doc if you need the API documentation and example programs. + +%prep +%setup -n %{name}-%{version} +%build + +%install +[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT" +mkdir -p "$RPM_BUILD_ROOT" + +python setup.py install --optimize=2 --record=installed-files \ + --root="$RPM_BUILD_ROOT" + +# install man pages +mkdir -p "$RPM_BUILD_ROOT"/%{_mandir}/man1/ +cp -a doc/man/*.1 "$RPM_BUILD_ROOT"/%{_mandir}/man1/ + +%clean +[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT" + +%files +%defattr(755,root,root) +%doc CREDITS LICENSE README +%{_bindir}/* +%attr(644,-,-) %{_mandir}/man1/* +%{_libdir}/python%{py_libver}/site-packages/twisted/ + +%files doc +%defattr(-,root,root) +%doc doc/* diff --git a/docs/conf.py b/docs/conf.py index 7bd45ad3431..8e7853e7936 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -28,7 +28,7 @@ # -- General configuration ------------------------------------------------ -# See pyproject.toml for the Sphinx version required to build the documentation. +# See setup.cfg for the Sphinx version required to build the documentation. # needs_sphinx is not use to avoid duplication and getting these values # out of sync. diff --git a/docs/development/coding-standard.rst b/docs/development/coding-standard.rst index 69bf7cdfd61..75b0d51484e 100644 --- a/docs/development/coding-standard.rst +++ b/docs/development/coding-standard.rst @@ -393,14 +393,15 @@ This makes the script more portable but note that it is not a foolproof method. Always make sure that ``/usr/bin/env`` exists or use a softlink/symbolic link to point it to the correct path. Python's distutils will rewrite the shebang line upon installation so this policy only covers the source files in version control. -#. For core scripts, add an entry point to ``[project.scripts]`` in ``pyproject.toml``: +#. For core scripts, add an entry point to ``"console_scripts"`` in ``setup.cfg``: - .. code-block:: toml + .. code-block:: cfg - [project.scripts] - ... - twistd = "twisted.scripts.twistd:run" - yourmodule = "twisted.scripts.yourmodule:run" + [options.entry_points] + console_scripts = + ... + twistd = twisted.scripts.twistd:run + yourmodule = twisted.scripts.yourmodule:run #. And end with: @@ -415,7 +416,7 @@ Python's distutils will rewrite the shebang line upon installation so this polic This will ensure that your program will have a proper ``console_scripts`` entry point, which -``pyproject.toml`` will use to generate a console script which will work correctly for users of +``setup.py`` will use to generate a console script which will work correctly for users of Git, Windows releases and Debian packages. diff --git a/docs/installation/howto/optional.rst b/docs/installation/howto/optional.rst index 1cb7e5ec0fe..cea47b9bb0a 100644 --- a/docs/installation/howto/optional.rst +++ b/docs/installation/howto/optional.rst @@ -36,17 +36,17 @@ The following optional dependencies are supported: * `pyasn1`_ * `cryptography`_ -* **conch-nacl** - **conch** options and `PyNaCl`_ to support Ed25519 keys on systems with OpenSSL < 1.1.1b. +* **conch_nacl** - **conch** options and `PyNaCl`_ to support Ed25519 keys on systems with OpenSSL < 1.1.1b. * **soap** - the `SOAPpy`_ package to work with SOAP. * **serial** - the `pyserial`_ package to work with serial data. -* **all-non-platform** - installs **tls**, **conch**, **soap**, and **serial** options. +* **all_non_platform** - installs **tls**, **conch**, **soap**, and **serial** options. -* **macos-platform** - **all-non-platform** options and `pyobjc`_ to work with Objective-C apis. +* **macos_platform** - **all_non_platform** options and `pyobjc`_ to work with Objective-C apis. -* **windows-platform** - **all-non-platform** options and `pywin32`_ to work with Windows's apis. +* **windows_platform** - **all_non_platform** options and `pywin32`_ to work with Windows's apis. * **http2** - packages needed for http2 support. diff --git a/hatch_build.py b/hatch_build.py deleted file mode 100644 index 29cbce88e46..00000000000 --- a/hatch_build.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. -from hatchling.metadata.plugin.interface import MetadataHookInterface - - -class CustomMetadataHook(MetadataHookInterface): - def update(self, metadata): - optional_dependencies = self.config["optional-dependencies"] - for feature, dependencies in list(optional_dependencies.items()): - if "-" not in feature: - continue - - # We define all the legacy dependency targets using the - # underscore for backward compatibility. - # - # See: https://github.com/twisted/twisted/pull/11656#issuecomment-1282855123 - legacy_feature = feature.replace("-", "_") - optional_dependencies[legacy_feature] = dependencies - - metadata["optional-dependencies"] = optional_dependencies diff --git a/pyproject.toml b/pyproject.toml index 667bc880b31..d81491953a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,228 +1,10 @@ [build-system] requires = [ - "hatchling >= 1.10.0", - "hatch-fancy-pypi-readme >= 22.5.0", + "setuptools >= 35.0.2", + "wheel >= 0.29.0", "incremental >= 21.3.0", ] -build-backend = "hatchling.build" - -[project] -name = "Twisted" -dynamic = [ - "version", - "readme", - # Remove this when the legacy optional dependency names are removed - "optional-dependencies", -] -description = "An asynchronous networking framework written in Python" -license = "MIT" -# When updating this value, make sure our CI matrix includes a matching minimum version. -requires-python = ">=3.7.1" -authors = [ - { name = "Twisted Matrix Laboratories", email = "twisted-python@twistedmatrix.com" }, -] -classifiers = [ - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", -] -dependencies = [ - "zope.interface >= 4.4.2", - "constantly >= 15.1", - "incremental >= 21.3.0", - "Automat >= 0.8.0", - "hyperlink >= 17.1.1", - "attrs >= 19.2.0", - "typing_extensions >= 3.6.5", - "twisted-iocpsupport >= 1.0.2, <2; platform_system == 'Windows'", -] - -# Switch to this when the legacy optional dependency names are removed -# [project.optional-dependencies] -[tool.hatch.metadata.hooks.custom.optional-dependencies] -# This is list of minimum dependencies required to run the tests. -# The plan is to remove the `test` extra requirement and skip tests that -# depend on them -# To prevent trunk failures we should pin all dev dependencies to minor -# versions. -# We trust semantic versioning and auto-upgrading to a bugfix release -# should be OK. -test = [ - "cython-test-exception-raiser >= 1.0.2, <2", - "PyHamcrest >= 1.9.0", - "hypothesis ~= 6.0", -] - -# List of dependencies required to build the documentation and test the -# release scripts and process. -dev-release = [ - "towncrier ~= 22.8", - "pydoctor ~= 22.9.0", - "sphinx-rtd-theme ~= 0.5", - "readthedocs-sphinx-ext ~= 2.1", - "sphinx >= 4.1.2, <6", -] - -# All the extra tools used to help with the development process. -dev = [ - "twisted[dev-release]", - "pyflakes ~= 2.2", - # TODO: support python-subunit in py3.10 https://twistedmatrix.com/trac/ticket/10115 - "python-subunit ~= 1.4; python_version < '3.10'", - "twistedchecker ~= 0.7", - "coverage >= 6b1, <7", -] - -tls = [ - "pyopenssl >= 21.0.0", - # service_identity 18.1.0 added support for validating IP addresses in - # certificate subjectAltNames - "service_identity >= 18.1.0", - "idna >= 2.4", -] - -conch = [ - "pyasn1", - "cryptography >= 2.6", - "appdirs >= 1.4.0", - "bcrypt >= 3.0.0", -] - -conch-nacl = [ - "twisted[conch]", - # Used to support Ed25519 keys on systems with OpenSSL < 1.1.1b - "PyNaCl", -] - -serial = [ - "pyserial >= 3.0", - "pywin32 != 226; platform_system == 'Windows'", -] - -http2 = [ - "h2 >= 3.0, < 5.0", - "priority >= 1.1.0, < 2.0", -] - -contextvars = [ - "contextvars >= 2.4, < 3; python_version < '3.7'", -] - -all-non-platform = [ - "twisted[test,tls,conch,serial,http2,contextvars]", -] - -macos-platform = [ - "twisted[all-non-platform]", - "pyobjc-core", - "pyobjc-framework-CFNetwork", - "pyobjc-framework-Cocoa", -] - -windows-platform = [ - "twisted[all-non-platform]", - "pywin32 != 226", -] - -osx-platform = [ - "twisted[macos-platform]", -] - -gtk-platform = [ - "twisted[all-non-platform]", - "pygobject", -] - -mypy = [ - "twisted[dev,all-non-platform,conch-nacl]", - "mypy==0.930", - "mypy-zope==0.3.4", - "types-setuptools", - "types-pyOpenSSL", -] - -[project.scripts] -cftp = "twisted.conch.scripts.cftp:run" -ckeygen = "twisted.conch.scripts.ckeygen:run" -conch = "twisted.conch.scripts.conch:run" -mailmail = "twisted.mail.scripts.mailmail:run" -pyhtmlizer = "twisted.scripts.htmlizer:run" -tkconch = "twisted.conch.scripts.tkconch:run" -trial = "twisted.scripts.trial:run" -twist = "twisted.application.twist._twist:Twist.main" -twistd = "twisted.scripts.twistd:run" - -[project.urls] -Changelog = "https://github.com/twisted/twisted/blob/HEAD/NEWS.rst" -Documentation = "https://docs.twistedmatrix.com/" -Homepage = "https://twistedmatrix.com/" -Issues = "https://twistedmatrix.com/trac/report" -Source = "https://github.com/twisted/twisted" -Twitter = "https://twitter.com/twistedmatrix" - -[tool.hatch.metadata] -# This is here to enable backward compatible extra dependencies -# that are defined using underscores. -allow-ambiguous-features = true - -[tool.hatch.version] -source = "code" -path = "src/twisted/__init__.py" -search-paths = ["src"] - -[tool.hatch.metadata.hooks.fancy-pypi-readme] -content-type = "text/x-rst" -fragments = [ - { path = "README.rst" }, -] - -[[tool.hatch.metadata.hooks.fancy-pypi-readme.substitutions]] -# Munge links of the form `NEWS `_ to point at the appropriate -# location on GitHub so that they function when the long description is -# displayed on PyPI. -pattern = '`([^`]+)\s+<(?!https?://)([^>]+)>`_' -replacement = '`\1 `_' -ignore-case = true - -[tool.hatch.build.targets.wheel] -packages = [ - "src/twisted", -] -exclude = [ - "*.pxi", - "*.pyx", - "build.bat", -] - -[tool.hatch.build.targets.sdist] -# This dictates what goes into a sdist tarball. -# As a release tarball, we want to include: -# - All of the library code. -# - All the useful documentation (but not the super historic stuff) -# - All of the test files, so that the tests can be run on an installed copy. -# We do not want to include: -# - Release management files (e.g. topfiles) -# - Things only useful when running from a source checkout -include = [ - # Documentation - "/docs", - - # Library code - "/src", - "/CONTRIBUTING.md", - "/INSTALL.rst", - "/NEWS.rst", - "/README.rst", - "/code_of_conduct.md", - - # Test-running utilities for downstream packagers - "/.coveragerc", - "/mypy.ini", - "/tox.ini", -] +build-backend = "setuptools.build_meta" [tool.towncrier] package = "twisted" diff --git a/setup.cfg b/setup.cfg index e544af5deb1..d85e6d4ed60 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,3 +1,163 @@ +[metadata] +name = Twisted +version = attr: twisted.__version__ +description = An asynchronous networking framework written in Python +author = Twisted Matrix Laboratories +author_email = twisted-python@twistedmatrix.com +maintainer = Glyph Lefkowitz +maintainer_email = glyph@twistedmatrix.com +url = https://twistedmatrix.com/ +project_urls = + Documentation=https://docs.twistedmatrix.com/ + Source=https://github.com/twisted/twisted + Issues=https://twistedmatrix.com/trac/report + Twitter=https://twitter.com/twistedmatrix + Changelog=https://github.com/twisted/twisted/blob/HEAD/NEWS.rst +license = MIT +classifiers = + Programming Language :: Python :: 3 + Programming Language :: Python :: 3 :: Only + Programming Language :: Python :: 3.7 + Programming Language :: Python :: 3.8 + Programming Language :: Python :: 3.9 + Programming Language :: Python :: 3.10 +long_description_content_type = text/x-rst + +[options] +# When updating this value, make sure our CI matrix includes a matching minimum version. +python_requires = >=3.7.1 +install_requires = + zope.interface >= 4.4.2 + constantly >= 15.1 + incremental >= 21.3.0 + Automat >= 0.8.0 + hyperlink >= 17.1.1 + attrs >= 19.2.0 + typing_extensions >= 3.6.5 + twisted-iocpsupport >= 1.0.2, <2; platform_system == "Windows" +include_package_data = True +zip_safe = False +package_dir = =src +packages = find: + +[options.extras_require] +; This is list of minimum dependencies required to run the test. +; The plan is to remove the `test` extra requirement and skip tests that +; depend on then +; To prevent trunk failures we should pin all dev dependencies to minor +; versions. +; We trust semantic versioning and auto-upgrading to a bugfix release +; should be OK. +test = + cython-test-exception-raiser >= 1.0.2, <2 + PyHamcrest >= 1.9.0 + hypothesis ~= 6.0 + +; List of dependencies required to build the documentation and test the +; release scripts and process. +dev_release = + towncrier ~= 22.8 + pydoctor ~= 22.9.0 + sphinx_rtd_theme ~= 1.0 + readthedocs-sphinx-ext ~= 2.1 + sphinx >= 5.0, <6 + +; All the extra tools used to help with the development process. +dev = + %(dev_release)s + pyflakes ~= 2.2 + # TODO: support python-subunit in py3.10 https://twistedmatrix.com/trac/ticket/10115 + python-subunit ~= 1.4; python_version < "3.10" + twistedchecker ~= 0.7 + coverage >= 6b1, <7 + +tls = + pyopenssl >= 21.0.0 + # service_identity 18.1.0 added support for validating IP addresses in + # certificate subjectAltNames + service_identity >= 18.1.0 + idna >= 2.4 + +conch = + pyasn1 + cryptography >= 2.6 + appdirs >= 1.4.0 + bcrypt >= 3.0.0 + +conch_nacl = + %(conch)s + # Used to support Ed25519 keys on systems with OpenSSL < 1.1.1b + PyNaCl + +serial = + pyserial >= 3.0 + pywin32 != 226; platform_system == "Windows" + +http2 = + h2 >= 3.0, < 5.0 + priority >= 1.1.0, < 2.0 + +contextvars = + contextvars >= 2.4, < 3; python_version < "3.7" + +all_non_platform = + %(test)s + %(tls)s + %(conch)s + %(serial)s + %(http2)s + %(contextvars)s + +macos_platform = + pyobjc-core + pyobjc-framework-CFNetwork + pyobjc-framework-Cocoa + %(all_non_platform)s + +windows_platform = + pywin32 != 226 + %(all_non_platform)s + +osx_platform = + %(macos_platform)s + +gtk_platform = + pygobject + %(all_non_platform)s + +mypy = + mypy==0.930 + mypy-zope==0.3.4 + types-setuptools + types-pyOpenSSL + %(dev)s + %(all_non_platform)s + %(conch_nacl)s + +[options.packages.find] +where = src + +[options.entry_points] +console_scripts = + ckeygen = twisted.conch.scripts.ckeygen:run + cftp = twisted.conch.scripts.cftp:run + conch = twisted.conch.scripts.conch:run + mailmail = twisted.mail.scripts.mailmail:run + pyhtmlizer = twisted.scripts.htmlizer:run + tkconch = twisted.conch.scripts.tkconch:run + trial = twisted.scripts.trial:run + twist = twisted.application.twist._twist:Twist.main + twistd = twisted.scripts.twistd:run + +[options.exclude_package_data] +* = + *.c + *.h + *.pxi + *.pyx + build.bat + + [flake8] disable-noqa = True max-line-length = 182 diff --git a/setup.py b/setup.py new file mode 100755 index 00000000000..dd52b25db63 --- /dev/null +++ b/setup.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +# Copyright (c) Twisted Matrix Laboratories. +# See LICENSE for details. + +""" +Setuptools installer for Twisted. +""" + +import pathlib +import re + +import setuptools + +setuptools.setup( + # Munge links of the form `NEWS `_ to point at the appropriate + # location on GitHub so that they function when the long description is + # displayed on PyPI. + long_description=re.sub( + r"`([^`]+)\s+<(?!https?://)([^>]+)>`_", + r"`\1 `_", + pathlib.Path("README.rst").read_text(encoding="utf8"), + flags=re.I, + ) +) diff --git a/src/twisted/newsfragments/11655.removal b/src/twisted/newsfragments/11655.removal deleted file mode 100644 index d411b1cd610..00000000000 --- a/src/twisted/newsfragments/11655.removal +++ /dev/null @@ -1 +0,0 @@ -Optional dependency "extras" names like `conch_nacl` now use hyphens rather than underscores to comply with PEP 685. The old names will be supported until the end of 2023. diff --git a/tox.ini b/tox.ini index 223fdd52e45..3d97fd83d67 100644 --- a/tox.ini +++ b/tox.ini @@ -30,7 +30,7 @@ isolated_build=true [default] ; Files and directories that contain Python source for linting. -sources = src/ docs/conch/examples docs/mail/examples docs/names/examples docs/pair/examples docs/web/examples docs/words/examples +sources = setup.py src/ docs/conch/examples docs/mail/examples docs/names/examples docs/pair/examples docs/web/examples docs/words/examples ; These examples fail lint, see https://twistedmatrix.com/trac/ticket/9952 ; docs/core/examples @@ -40,13 +40,13 @@ sources = src/ docs/conch/examples docs/mail/examples docs/names/examples docs/p # process to generate its own wheels. wheel = True parallel_show_output = True -;; dependencies managed by extras in pyproject.toml +;; dependencies managed by extras in setup.cfg extras = ; The "nodeps" build still depends on PyHamcrest. nodeps: test - ; We also need to include `dev-release` so that we can test our - ; release helpers or documentation generation, and `conch-nacl` so that + ; We also need to include `dev_release` so that we can test our + ; release helpers or documentation generation, and `conch_nacl` so that ; we can test conch fallbacks to PyNaCl without requiring most users to ; install it. alldeps: all_non_platform, dev_release, conch_nacl @@ -109,7 +109,7 @@ commands = description = Create the release notes from the current fragment files found in the source tree. ; towncrier needs Twisted install to get the version -; and dev-release requires the towncrier package. +; and dev_release requires the towncrier package. extras = dev_release @@ -185,10 +185,12 @@ commands = deps = pep517 twine + check-manifest>=0.44 whitelist_externals = cp rm commands = + check-manifest --ignore "docs/_build/**,docs/historic/**,admin/**,bin/admin/**" rm -rf {toxinidir}/dist cp -r {distdir} {toxinidir}/dist # copy the wheel built by tox-wheel {envpython} -m pep517.build --source --out-dir={toxinidir}/dist {toxinidir}