diff --git a/.github/workflows/docs_test_action.yml b/.github/workflows/docs_test_action.yml index 331606e..81c4025 100644 --- a/.github/workflows/docs_test_action.yml +++ b/.github/workflows/docs_test_action.yml @@ -29,7 +29,7 @@ jobs: - '!tests/**' - name: Install and Build 🔧 - uses: sphinx-toolbox/sphinx-action@sphinx-3.3.1 + uses: sphinx-toolbox/sphinx-action@sphinx-3.3.1-py39 if: steps.changes.outputs.code == 'true' with: pre-build-command: python -m pip install tox diff --git a/.github/workflows/flake8.yml b/.github/workflows/flake8.yml index af1b394..5e67c5c 100644 --- a/.github/workflows/flake8.yml +++ b/.github/workflows/flake8.yml @@ -35,7 +35,7 @@ jobs: if: steps.changes.outputs.code == 'true' uses: "actions/setup-python@v5" with: - python-version: "3.8" + python-version: "3.9" - name: Install dependencies 🔧 if: steps.changes.outputs.code == 'true' diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml index bd74787..4c22a52 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -20,7 +20,7 @@ jobs: strategy: matrix: - os: ['ubuntu-22.04', 'windows-2019'] + os: ['ubuntu-22.04', 'windows-2022'] fail-fast: false steps: @@ -40,7 +40,7 @@ jobs: if: steps.changes.outputs.code == 'true' uses: "actions/setup-python@v5" with: - python-version: "3.8" + python-version: "3.9" - name: Install dependencies 🔧 run: | diff --git a/.github/workflows/octocheese.yml b/.github/workflows/octocheese.yml index 312918a..c6d0ec8 100644 --- a/.github/workflows/octocheese.yml +++ b/.github/workflows/octocheese.yml @@ -6,6 +6,9 @@ on: schedule: - cron: 0 12 * * * +permissions: + contents: write + jobs: Run: runs-on: ubuntu-latest diff --git a/.github/workflows/python_ci.yml b/.github/workflows/python_ci.yml index 494a94d..c167039 100644 --- a/.github/workflows/python_ci.yml +++ b/.github/workflows/python_ci.yml @@ -18,8 +18,8 @@ permissions: jobs: tests: - name: "windows-2019 / Python ${{ matrix.config.python-version }}" - runs-on: "windows-2019" + name: "windows-2022 / Python ${{ matrix.config.python-version }}" + runs-on: "windows-2022" continue-on-error: ${{ matrix.config.experimental }} env: USING_COVERAGE: '3.7,3.8,3.9,3.10,3.11,3.12,3.13,pypy-3.7,pypy-3.8,pypy-3.9' diff --git a/.github/workflows/python_ci_linux.yml b/.github/workflows/python_ci_linux.yml index 4a7313b..8f04707 100644 --- a/.github/workflows/python_ci_linux.yml +++ b/.github/workflows/python_ci_linux.yml @@ -38,7 +38,7 @@ jobs: - {python-version: "3.13", testenvs: "py313-attrs{21.3,21.4,22.2,23.1,23.2,24.2,25.1,25.3,latest},py313-mypy{1.0.1,1.2.0,1.4.1,1.6.1,latest},py313-sphinx{6,7},build", experimental: False} - {python-version: "pypy-3.7", testenvs: "pypy37-attrs{21.3,21.4,22.2,23.1,23.2,24.2,latest},pypy37-sphinx{4,5},build", experimental: False} - {python-version: "pypy-3.8", testenvs: "pypy38-attrs{21.3,21.4,22.2,23.1,23.2,24.2,latest},pypy38-sphinx{4,5,6,7},build", experimental: True} - - {python-version: "pypy-3.9", testenvs: "pypy39-attrs{21.3,21.4,22.2,23.1,23.2,24.2,25.1,25.3,latest},pypy39-sphinx{4,5,6,7},build", experimental: True} + - {python-version: "pypy-3.9", testenvs: "pypy39-attrs{21.3,21.4,22.2,23.1,23.2,24.2,latest},pypy39-sphinx{4,5,6,7},build", experimental: True} steps: - name: Checkout 🛎️ @@ -161,7 +161,7 @@ jobs: - name: Upload distribution to PyPI 🚀 if: startsWith(github.ref, 'refs/tags/') - uses: pypa/gh-action-pypi-publish@v1.4.2 + uses: pypa/gh-action-pypi-publish@v1.13.0 with: user: __token__ password: ${{ secrets.PYPI_TOKEN }} diff --git a/.github/workflows/python_ci_macos.yml b/.github/workflows/python_ci_macos.yml index cfb6db6..887dbce 100644 --- a/.github/workflows/python_ci_macos.yml +++ b/.github/workflows/python_ci_macos.yml @@ -28,14 +28,14 @@ jobs: fail-fast: False matrix: config: - - {python-version: "3.7", os-ver: "13", testenvs: "py37-attrs{21.3,21.4,22.2,23.1,23.2,24.2,latest},py37-mypy{0.900,0.910,0.921,0.931,1.0.1,1.2.0,1.4.1},py37-sphinx{4,5},build", experimental: False} + - {python-version: "3.7", os-ver: "15-intel", testenvs: "py37-attrs{21.3,21.4,22.2,23.1,23.2,24.2,latest},py37-mypy{0.900,0.910,0.921,0.931,1.0.1,1.2.0,1.4.1},py37-sphinx{4,5},build", experimental: False} - {python-version: "3.8", os-ver: "14", testenvs: "py38-attrs{21.3,21.4,22.2,23.1,23.2,24.2,25.1,25.3,latest},py38-mypy{0.900,0.910,0.921,0.931,1.0.1,1.2.0,1.4.1,1.6.1,latest},py38-sphinx{4,5,6,7},build", experimental: False} - {python-version: "3.9", os-ver: "14", testenvs: "py39-attrs{21.3,21.4,22.2,23.1,23.2,24.2,25.1,25.3,latest},py39-mypy{0.900,0.910,0.921,0.931,1.0.1,1.2.0,1.4.1,1.6.1,latest},py39-sphinx{4,5,6,7},build", experimental: False} - {python-version: "3.10", os-ver: "14", testenvs: "py310-attrs{21.3,21.4,22.2,23.1,23.2,24.2,25.1,25.3,latest},py310-mypy{0.900,0.910,0.921,0.931,1.0.1,1.2.0,1.4.1,1.6.1,latest},py310-sphinx{4,5,6,7},build", experimental: False} - {python-version: "3.11", os-ver: "14", testenvs: "py311-attrs{21.3,21.4,22.2,23.1,23.2,24.2,25.1,25.3,latest},py311-mypy{0.900,0.910,0.921,0.931,1.0.1,1.2.0,1.4.1,1.6.1,latest},py311-sphinx{4,5,6,7},build", experimental: False} - {python-version: "3.12", os-ver: "14", testenvs: "py312-attrs{21.3,21.4,22.2,23.1,23.2,24.2,25.1,25.3,latest},py312-mypy{1.0.1,1.2.0,1.4.1,1.6.1,latest},py312-sphinx{4,5,6,7},build", experimental: True} - {python-version: "3.13", os-ver: "14", testenvs: "py313-attrs{21.3,21.4,22.2,23.1,23.2,24.2,25.1,25.3,latest},py313-mypy{1.0.1,1.2.0,1.4.1,1.6.1,latest},py313-sphinx{6,7},build", experimental: False} - - {python-version: "pypy-3.7", os-ver: "13", testenvs: "pypy37-attrs{21.3,21.4,22.2,23.1,23.2,24.2,latest},pypy37-sphinx{4,5},build", experimental: False} + - {python-version: "pypy-3.7", os-ver: "15-intel", testenvs: "pypy37-attrs{21.3,21.4,22.2,23.1,23.2,24.2,latest},pypy37-sphinx{4,5},build", experimental: False} - {python-version: "pypy-3.8", os-ver: "14", testenvs: "pypy38-attrs{21.3,21.4,22.2,23.1,23.2,24.2,latest},pypy38-sphinx{4,5,6,7},build", experimental: True} - {python-version: "pypy-3.9", os-ver: "14", testenvs: "pypy39-attrs{21.3,21.4,22.2,23.1,23.2,24.2,latest},pypy39-sphinx{4,5,6,7},build", experimental: True} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a67ca0c..618ab18 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -43,7 +43,7 @@ repos: - id: bind-requirements - repo: https://github.com/python-formate/flake8-dunder-all - rev: v0.4.1 + rev: v0.5.0 hooks: - id: ensure-dunder-all files: ^attr_utils/.*\.py$ @@ -62,11 +62,11 @@ repos: - id: rst-inline-touching-normal - repo: https://github.com/asottile/pyupgrade - rev: v2.12.0 + rev: v3.3.0 hooks: - id: pyupgrade args: - - --py36-plus + - --py37-plus - --keep-runtime-typing - repo: https://github.com/Lucas-C/pre-commit-hooks diff --git a/doc-source/requirements.txt b/doc-source/requirements.txt index 0b9cbf6..1707c8b 100644 --- a/doc-source/requirements.txt +++ b/doc-source/requirements.txt @@ -1,10 +1,12 @@ git+https://github.com/sphinx-toolbox/sphinx-toolbox-experimental default-values>=0.6.0 +docutils<0.22 domdf-sphinx-theme>=0.3.0 extras-require>=0.5.0 html-section>=0.3.0 mypy>=0.782 pyyaml>=5.3.1 +roman>=4.0 seed-intersphinx-mapping>=1.2.2 sphinx>=3.0.3 sphinx-copybutton>=0.2.12 diff --git a/pyproject.toml b/pyproject.toml index d511c89..7beedc3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -128,7 +128,7 @@ platforms = [ "Windows", "macOS", "Linux",] license-key = "MIT" [tool.mypy] -python_version = "3.8" +python_version = "3.9" namespace_packages = true check_untyped_defs = true warn_unused_ignores = true diff --git a/tox.ini b/tox.ini index 203bb05..f17a9e0 100644 --- a/tox.ini +++ b/tox.ini @@ -89,7 +89,7 @@ test = pypy38-sphinx{4,5,6,7} pypy39-sphinx{4,5,6,7} qa = mypy, lint -cov = py38-attrs21.3, coverage +cov = py39-attrs21.3, coverage [testenv] setenv = @@ -135,7 +135,6 @@ download = True setenv = PYTHONDEVMODE=1 PIP_DISABLE_PIP_VERSION_CHECK=1 - UNSAFE_PYO3_SKIP_VERSION_CHECK=1 [testenv:py312] download = True @@ -146,7 +145,7 @@ setenv = [testenv:docs] setenv = SHOW_TODOS = 1 passenv = SPHINX_BUILDER -basepython = python3.8 +basepython = python3.9 changedir = {toxinidir}/doc-source extras = all deps = -r{toxinidir}/doc-source/requirements.txt @@ -171,7 +170,7 @@ commands = check-wheel-contents dist/ [testenv:lint] -basepython = python3.8 +basepython = python3.9 changedir = {toxinidir} ignore_errors = True skip_install = True @@ -191,17 +190,18 @@ deps = flake8-sphinx-links>=0.0.4 flake8-strftime>=0.1.1 flake8-typing-imports>=1.10.0 + git+https://github.com/domdfcoding/restructuredtext-lint.git@fix-deprecations git+https://github.com/domdfcoding/flake8-rst-docstrings-sphinx.git git+https://github.com/domdfcoding/flake8-rst-docstrings.git git+https://github.com/python-formate/flake8-unused-arguments.git@magic-methods git+https://github.com/python-formate/flake8-missing-annotations.git - pydocstyle>=6.0.0 + git+https://github.com/domdfcoding/pydocstyle.git@stub-functions pygments>=2.7.1 importlib_metadata<4.5.0; python_version<'3.8' commands = python3 -m flake8_rst_docstrings_sphinx attr_utils tests --allow-toolbox {posargs} [testenv:perflint] -basepython = python3.8 +basepython = python3.9 changedir = {toxinidir} ignore_errors = True skip_install = True @@ -209,7 +209,7 @@ deps = perflint commands = python3 -m perflint attr_utils {posargs} [testenv:mypy] -basepython = python3.8 +basepython = python3.9 ignore_errors = True changedir = {toxinidir} extras = all @@ -219,7 +219,7 @@ deps = commands = mypy attr_utils tests {posargs} [testenv:pyup] -basepython = python3.8 +basepython = python3.9 skip_install = True ignore_errors = True changedir = {toxinidir} @@ -228,7 +228,7 @@ extras = all commands = pyup_dirs attr_utils tests --py36-plus --recursive [testenv:coverage] -basepython = python3.8 +basepython = python3.9 skip_install = True ignore_errors = True whitelist_externals = /bin/bash @@ -315,21 +315,18 @@ download = True setenv = PYTHONDEVMODE=1 PIP_DISABLE_PIP_VERSION_CHECK=1 - UNSAFE_PYO3_SKIP_VERSION_CHECK=1 [testenv:py313-mypy{0.900,0.910,0.921,0.931,1.0.1,1.2.0,1.4.1,1.6.1,latest}] download = True setenv = PYTHONDEVMODE=1 PIP_DISABLE_PIP_VERSION_CHECK=1 - UNSAFE_PYO3_SKIP_VERSION_CHECK=1 [testenv:py313-sphinx{4,5,6,7}] download = True setenv = PYTHONDEVMODE=1 PIP_DISABLE_PIP_VERSION_CHECK=1 - UNSAFE_PYO3_SKIP_VERSION_CHECK=1 [testenv:py{37,38,39,310,311}-mypy{0.900,0.910,0.921,0.931}] setenv =