diff --git a/.circleci/config.yml b/.circleci/config.yml index fa71df8f8..dde257fd9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -10,7 +10,7 @@ jobs: coverage: executor: name: orb/default - version: "3.6" + version: "3.9" steps: - orb/setup - run: inv ci.make-sudouser @@ -20,7 +20,7 @@ jobs: regression: executor: name: orb/default - version: "3.6" + version: "3.9" steps: - orb/setup - run: inv regression @@ -29,7 +29,7 @@ jobs: doctests: executor: name: orb/default - version: "3.6" + version: "3.9" steps: - orb/setup - run: inv www.doctest @@ -38,7 +38,7 @@ jobs: typecheck: executor: name: orb/default - version: "3.6" + version: "3.9" steps: - orb/setup - run: mypy . @@ -65,7 +65,7 @@ workflows: requires: ["Test"] matrix: parameters: - version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + version: ["3.9", "3.10", "3.11", "3.12", "3.13"] - orb/docs: name: "Docs" requires: ["Test"] diff --git a/pyproject.toml b/pyproject.toml index 8f10b685f..32f813833 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,60 @@ +[project] +name = "invoke" +description = "Pythonic task execution" +readme = "README.rst" + +# Don't forget to also update invoke/_version.py! +version = "2.2.0" + +license = "BSD-3-Clause" +license-files = [ "LICENSE" ] +authors = [ + { name = "Jeff Forcier", email="jeff@bitprophet.org" }, + { name = "Jaroslav Henner", email = "jaroslav.henner@gmail.com" } +] +requires-python = ">=3.6.2" +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Operating System :: POSIX", + "Operating System :: Unix", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: Software Development", + "Topic :: Software Development :: Build Tools", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: System :: Software Distribution", + "Topic :: System :: Systems Administration" +] + +[project.urls] +Homepage = "https://pyinvoke.org/" +Docs = "https://docs.pyinvoke.org/" +Repository = "https://github.com/pyinvoke/invoke" +Issues = "https://github.com/pyinvoke/invoke/issues" +Changelog = "https://www.pyinvoke.org/changelog.html" +CI = "https://app.circleci.com/pipelines/github/pyinvoke/invoke" + +[build-system] +requires = ["setuptools >= 77.0.3"] +build-backend = "setuptools.build_meta" + +[project.scripts] +invoke = "invoke.main:program.run" +inv = "invoke.main:program.run" + [tool.mypy] # check_untyped_defs = true # follow_imports_for_stubs = true @@ -50,3 +107,21 @@ ignore_missing_imports = true [[tool.mypy.overrides]] module = "pytest_relaxed" ignore_missing_imports = true + + +[dependency-groups] +dev = [ + "alabaster==0.7.12", + "black>=22.8,<22.9", + "coverage>=6.2,<7", + "flake8>=4,<5", + "icecream>=2.1", + "invocations>=3.3", + "invoke", + "mypy==0.971", + "pytest-cov>=4", + "pytest-relaxed>=2", + "releases>=2", + "types-pyyaml==6.0.12.4", + "uv" +] diff --git a/setup.py b/setup.py deleted file mode 100644 index 1bfb53fe2..000000000 --- a/setup.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env python - -# Support setuptools only, distutils has a divergent and more annoying API and -# few folks will lack setuptools. -from setuptools import setup, find_packages - -# Version info -- read without importing -_locals = {} -with open("invoke/_version.py") as fp: - exec(fp.read(), None, _locals) -version = _locals["__version__"] - -exclude = [] - -# Frankenstein long_description -long_description = """ -{} - -For a high level introduction, including example code, please see `our main -project website `_; or for detailed API docs, see `the -versioned API website `_. -""".format( - open("README.rst").read() -) - - -setup( - name="invoke", - version=version, - description="Pythonic task execution", - license="BSD", - long_description=long_description, - author="Jeff Forcier", - author_email="jeff@bitprophet.org", - url="https://pyinvoke.org", - project_urls={ - "Docs": "https://docs.pyinvoke.org", - "Source": "https://github.com/pyinvoke/invoke", - "Issues": "https://github.com/pyinvoke/invoke/issues", - "Changelog": "https://www.pyinvoke.org/changelog.html", - "CI": "https://app.circleci.com/pipelines/github/pyinvoke/invoke", - }, - python_requires=">=3.6", - packages=find_packages(exclude=exclude), - include_package_data=True, - entry_points={ - "console_scripts": [ - "invoke = invoke.main:program.run", - "inv = invoke.main:program.run", - ] - }, - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Environment :: Console", - "Intended Audience :: Developers", - "Intended Audience :: System Administrators", - "License :: OSI Approved :: BSD License", - "Operating System :: POSIX", - "Operating System :: Unix", - "Operating System :: MacOS :: MacOS X", - "Operating System :: Microsoft :: Windows", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Topic :: Software Development", - "Topic :: Software Development :: Build Tools", - "Topic :: Software Development :: Libraries", - "Topic :: Software Development :: Libraries :: Python Modules", - "Topic :: System :: Software Distribution", - "Topic :: System :: Systems Administration", - ], -) diff --git a/invoke/__init__.py b/src/invoke/__init__.py similarity index 100% rename from invoke/__init__.py rename to src/invoke/__init__.py diff --git a/invoke/__main__.py b/src/invoke/__main__.py similarity index 100% rename from invoke/__main__.py rename to src/invoke/__main__.py diff --git a/invoke/_version.py b/src/invoke/_version.py similarity index 100% rename from invoke/_version.py rename to src/invoke/_version.py diff --git a/invoke/collection.py b/src/invoke/collection.py similarity index 100% rename from invoke/collection.py rename to src/invoke/collection.py diff --git a/invoke/completion/__init__.py b/src/invoke/completion/__init__.py similarity index 100% rename from invoke/completion/__init__.py rename to src/invoke/completion/__init__.py diff --git a/invoke/completion/bash.completion b/src/invoke/completion/bash.completion similarity index 100% rename from invoke/completion/bash.completion rename to src/invoke/completion/bash.completion diff --git a/invoke/completion/complete.py b/src/invoke/completion/complete.py similarity index 100% rename from invoke/completion/complete.py rename to src/invoke/completion/complete.py diff --git a/invoke/completion/fish.completion b/src/invoke/completion/fish.completion similarity index 100% rename from invoke/completion/fish.completion rename to src/invoke/completion/fish.completion diff --git a/invoke/completion/zsh.completion b/src/invoke/completion/zsh.completion similarity index 100% rename from invoke/completion/zsh.completion rename to src/invoke/completion/zsh.completion diff --git a/invoke/config.py b/src/invoke/config.py similarity index 100% rename from invoke/config.py rename to src/invoke/config.py diff --git a/invoke/context.py b/src/invoke/context.py similarity index 100% rename from invoke/context.py rename to src/invoke/context.py diff --git a/invoke/env.py b/src/invoke/env.py similarity index 100% rename from invoke/env.py rename to src/invoke/env.py diff --git a/invoke/exceptions.py b/src/invoke/exceptions.py similarity index 100% rename from invoke/exceptions.py rename to src/invoke/exceptions.py diff --git a/invoke/executor.py b/src/invoke/executor.py similarity index 100% rename from invoke/executor.py rename to src/invoke/executor.py diff --git a/invoke/loader.py b/src/invoke/loader.py similarity index 100% rename from invoke/loader.py rename to src/invoke/loader.py diff --git a/invoke/main.py b/src/invoke/main.py similarity index 100% rename from invoke/main.py rename to src/invoke/main.py diff --git a/invoke/parser/__init__.py b/src/invoke/parser/__init__.py similarity index 100% rename from invoke/parser/__init__.py rename to src/invoke/parser/__init__.py diff --git a/invoke/parser/argument.py b/src/invoke/parser/argument.py similarity index 100% rename from invoke/parser/argument.py rename to src/invoke/parser/argument.py diff --git a/invoke/parser/context.py b/src/invoke/parser/context.py similarity index 100% rename from invoke/parser/context.py rename to src/invoke/parser/context.py diff --git a/invoke/parser/parser.py b/src/invoke/parser/parser.py similarity index 100% rename from invoke/parser/parser.py rename to src/invoke/parser/parser.py diff --git a/invoke/program.py b/src/invoke/program.py similarity index 100% rename from invoke/program.py rename to src/invoke/program.py diff --git a/invoke/py.typed b/src/invoke/py.typed similarity index 100% rename from invoke/py.typed rename to src/invoke/py.typed diff --git a/invoke/runners.py b/src/invoke/runners.py similarity index 100% rename from invoke/runners.py rename to src/invoke/runners.py diff --git a/invoke/tasks.py b/src/invoke/tasks.py similarity index 100% rename from invoke/tasks.py rename to src/invoke/tasks.py diff --git a/invoke/terminals.py b/src/invoke/terminals.py similarity index 100% rename from invoke/terminals.py rename to src/invoke/terminals.py diff --git a/invoke/util.py b/src/invoke/util.py similarity index 100% rename from invoke/util.py rename to src/invoke/util.py diff --git a/invoke/vendor/__init__.py b/src/invoke/vendor/__init__.py similarity index 100% rename from invoke/vendor/__init__.py rename to src/invoke/vendor/__init__.py diff --git a/invoke/vendor/fluidity/LICENSE b/src/invoke/vendor/fluidity/LICENSE similarity index 100% rename from invoke/vendor/fluidity/LICENSE rename to src/invoke/vendor/fluidity/LICENSE diff --git a/invoke/vendor/fluidity/__init__.py b/src/invoke/vendor/fluidity/__init__.py similarity index 100% rename from invoke/vendor/fluidity/__init__.py rename to src/invoke/vendor/fluidity/__init__.py diff --git a/invoke/vendor/fluidity/backwardscompat.py b/src/invoke/vendor/fluidity/backwardscompat.py similarity index 100% rename from invoke/vendor/fluidity/backwardscompat.py rename to src/invoke/vendor/fluidity/backwardscompat.py diff --git a/invoke/vendor/fluidity/machine.py b/src/invoke/vendor/fluidity/machine.py similarity index 100% rename from invoke/vendor/fluidity/machine.py rename to src/invoke/vendor/fluidity/machine.py diff --git a/invoke/vendor/lexicon/LICENSE b/src/invoke/vendor/lexicon/LICENSE similarity index 100% rename from invoke/vendor/lexicon/LICENSE rename to src/invoke/vendor/lexicon/LICENSE diff --git a/invoke/vendor/lexicon/__init__.py b/src/invoke/vendor/lexicon/__init__.py similarity index 100% rename from invoke/vendor/lexicon/__init__.py rename to src/invoke/vendor/lexicon/__init__.py diff --git a/invoke/vendor/lexicon/_version.py b/src/invoke/vendor/lexicon/_version.py similarity index 100% rename from invoke/vendor/lexicon/_version.py rename to src/invoke/vendor/lexicon/_version.py diff --git a/invoke/vendor/lexicon/alias_dict.py b/src/invoke/vendor/lexicon/alias_dict.py similarity index 100% rename from invoke/vendor/lexicon/alias_dict.py rename to src/invoke/vendor/lexicon/alias_dict.py diff --git a/invoke/vendor/lexicon/attribute_dict.py b/src/invoke/vendor/lexicon/attribute_dict.py similarity index 100% rename from invoke/vendor/lexicon/attribute_dict.py rename to src/invoke/vendor/lexicon/attribute_dict.py diff --git a/invoke/vendor/yaml/__init__.py b/src/invoke/vendor/yaml/__init__.py similarity index 100% rename from invoke/vendor/yaml/__init__.py rename to src/invoke/vendor/yaml/__init__.py diff --git a/invoke/vendor/yaml/composer.py b/src/invoke/vendor/yaml/composer.py similarity index 100% rename from invoke/vendor/yaml/composer.py rename to src/invoke/vendor/yaml/composer.py diff --git a/invoke/vendor/yaml/constructor.py b/src/invoke/vendor/yaml/constructor.py similarity index 100% rename from invoke/vendor/yaml/constructor.py rename to src/invoke/vendor/yaml/constructor.py diff --git a/invoke/vendor/yaml/cyaml.py b/src/invoke/vendor/yaml/cyaml.py similarity index 100% rename from invoke/vendor/yaml/cyaml.py rename to src/invoke/vendor/yaml/cyaml.py diff --git a/invoke/vendor/yaml/dumper.py b/src/invoke/vendor/yaml/dumper.py similarity index 100% rename from invoke/vendor/yaml/dumper.py rename to src/invoke/vendor/yaml/dumper.py diff --git a/invoke/vendor/yaml/emitter.py b/src/invoke/vendor/yaml/emitter.py similarity index 100% rename from invoke/vendor/yaml/emitter.py rename to src/invoke/vendor/yaml/emitter.py diff --git a/invoke/vendor/yaml/error.py b/src/invoke/vendor/yaml/error.py similarity index 100% rename from invoke/vendor/yaml/error.py rename to src/invoke/vendor/yaml/error.py diff --git a/invoke/vendor/yaml/events.py b/src/invoke/vendor/yaml/events.py similarity index 100% rename from invoke/vendor/yaml/events.py rename to src/invoke/vendor/yaml/events.py diff --git a/invoke/vendor/yaml/loader.py b/src/invoke/vendor/yaml/loader.py similarity index 100% rename from invoke/vendor/yaml/loader.py rename to src/invoke/vendor/yaml/loader.py diff --git a/invoke/vendor/yaml/nodes.py b/src/invoke/vendor/yaml/nodes.py similarity index 100% rename from invoke/vendor/yaml/nodes.py rename to src/invoke/vendor/yaml/nodes.py diff --git a/invoke/vendor/yaml/parser.py b/src/invoke/vendor/yaml/parser.py similarity index 100% rename from invoke/vendor/yaml/parser.py rename to src/invoke/vendor/yaml/parser.py diff --git a/invoke/vendor/yaml/reader.py b/src/invoke/vendor/yaml/reader.py similarity index 100% rename from invoke/vendor/yaml/reader.py rename to src/invoke/vendor/yaml/reader.py diff --git a/invoke/vendor/yaml/representer.py b/src/invoke/vendor/yaml/representer.py similarity index 100% rename from invoke/vendor/yaml/representer.py rename to src/invoke/vendor/yaml/representer.py diff --git a/invoke/vendor/yaml/resolver.py b/src/invoke/vendor/yaml/resolver.py similarity index 100% rename from invoke/vendor/yaml/resolver.py rename to src/invoke/vendor/yaml/resolver.py diff --git a/invoke/vendor/yaml/scanner.py b/src/invoke/vendor/yaml/scanner.py similarity index 100% rename from invoke/vendor/yaml/scanner.py rename to src/invoke/vendor/yaml/scanner.py diff --git a/invoke/vendor/yaml/serializer.py b/src/invoke/vendor/yaml/serializer.py similarity index 100% rename from invoke/vendor/yaml/serializer.py rename to src/invoke/vendor/yaml/serializer.py diff --git a/invoke/vendor/yaml/tokens.py b/src/invoke/vendor/yaml/tokens.py similarity index 100% rename from invoke/vendor/yaml/tokens.py rename to src/invoke/vendor/yaml/tokens.py diff --git a/invoke/watchers.py b/src/invoke/watchers.py similarity index 100% rename from invoke/watchers.py rename to src/invoke/watchers.py diff --git a/tox.ini b/tox.ini index 0cdda0531..c31c91ae3 100644 --- a/tox.ini +++ b/tox.ini @@ -4,9 +4,9 @@ # and then run "tox" from this directory. [tox] -envlist = py36, py37, py38, py39, 'py310', py311 +envlist = py39, 'py310', py311, py312, py313 [testenv] commands = - pip install -r dev-requirements.txt + pip install -e .[dev] spec