From 21a9f029a34142fe656848d48d9fb8e1950fc8e3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Oct 2026 17:27:46 +0000 Subject: [PATCH 1/5] chore(deps): update dependency black to v26.10.1 [security] --- requirements-lint.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-lint.txt b/requirements-lint.txt index 4694ac221..096e1668b 100644 --- a/requirements-lint.txt +++ b/requirements-lint.txt @@ -1,6 +1,6 @@ -r requirements.txt argcomplete==2.0.0 -black==26.5.1 +black==26.10.1 commitizen==4.18.1 flake8==7.3.0 isort==9.0.1 From 8daa9404126135d1c93e0947e956a1f02b23ade6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Oct 2026 21:23:25 +0000 Subject: [PATCH 2/5] chore(deps): update dependency pylint to v4.0.9 [security] --- requirements-lint.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-lint.txt b/requirements-lint.txt index 096e1668b..5b77f2085 100644 --- a/requirements-lint.txt +++ b/requirements-lint.txt @@ -5,7 +5,7 @@ commitizen==4.18.1 flake8==7.3.0 isort==9.0.1 mypy==2.3.1 -pylint==4.0.8 +pylint==4.0.9 pytest==9.1.1 responses==0.26.3 respx==0.23.1 From 47a411700f339475f1f7976db4743e2da8b73cc5 Mon Sep 17 00:00:00 2001 From: "John L. Villalovos" Date: Mon, 2 Nov 2026 08:56:39 -0800 Subject: [PATCH 3/5] feat!: drop Python 3.10 support and add Python 3.15 Python 3.10 is End-of-Life (EOL) as of 2026-10 as stated in https://devguide.python.org/versions/ and https://peps.python.org/pep-0619/#lifespan By dropping support for Python 3.10 and requiring Python 3.11 or higher it allows python-gitlab to take advantage of new features in Python 3.11, which are documented at: https://docs.python.org/3/whatsnew/3.11.html Also mark Python 3.15 as officially supported as it has been released, and use it for the macOS and Windows tests. BREAKING CHANGE: As of python-gitlab 9.0.0, Python 3.10 is no longer supported. Python 3.11 or higher is required. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/test.yml | 12 ++++++------ README.rst | 2 +- pyproject.toml | 4 ++-- tox.ini | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index af899f198..eca7e60ac 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,8 +26,6 @@ jobs: matrix: os: [ubuntu-latest] python: - - version: "3.10" - toxenv: py310,smoke - version: "3.11" toxenv: py311,smoke - version: "3.12" @@ -36,15 +34,17 @@ jobs: toxenv: py313,smoke - version: "3.14" toxenv: py314,smoke + - version: "3.15" + toxenv: py315,smoke include: - os: macos-latest python: - version: "3.14" - toxenv: py314,smoke + version: "3.15" + toxenv: py315,smoke - os: windows-latest python: - version: "3.14" - toxenv: py314,smoke + version: "3.15" + toxenv: py315,smoke steps: - uses: actions/checkout@v7.0.1 - name: Set up Python ${{ matrix.python.version }} diff --git a/README.rst b/README.rst index 1b7b7ce48..afd596cbc 100644 --- a/README.rst +++ b/README.rst @@ -53,7 +53,7 @@ Features Installation ------------ -As of 7.0.0, ``python-gitlab`` is compatible with Python 3.10+. +As of 9.0.0, ``python-gitlab`` is compatible with Python 3.11+. Use ``pip`` to install the latest stable version of ``python-gitlab``: diff --git a/pyproject.toml b/pyproject.toml index 511e6c366..a483aa235 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ maintainers = [ {name = "Nejc Habjan", email="nejc.habjan@siemens.com"}, {name = "Roger Meier", email="r.meier@siemens.com"} ] -requires-python = ">=3.10.0" +requires-python = ">=3.11.0" dependencies = [ "requests>=2.32.0", "requests-toolbelt>=1.0.0", @@ -30,11 +30,11 @@ classifiers = [ "Operating System :: Microsoft :: Windows", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", ] keywords = ["api", "client", "gitlab", "python", "python-gitlab", "wrapper"] license = {text = "LGPL-3.0-or-later"} diff --git a/tox.ini b/tox.ini index 5e7c01076..9b14e9b8f 100644 --- a/tox.ini +++ b/tox.ini @@ -2,14 +2,14 @@ minversion = 4.0 skipsdist = True skip_missing_interpreters = True -envlist = py314,py313,py312,py311,py310,black,isort,flake8,mypy,twine-check,cz,pylint +envlist = py315,py314,py313,py312,py311,black,isort,flake8,mypy,twine-check,cz,pylint # NOTE(jlvillal): To use a label use the `-m` flag. # For example to run the `func` label group of environments do: # tox -m func labels = lint = black,isort,flake8,mypy,pylint,cz - unit = py314,py313,py312,py311,py310 + unit = py315,py314,py313,py312,py311 # func is the functional tests. This is very time consuming. func = cli_func_v4,api_func_v4 From 1a3fdec5010033cdbf70d6c1fb2752f6eeada14b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2026 09:48:32 -0800 Subject: [PATCH 4/5] chore(deps): update all non-major dependencies --- .github/workflows/docs.yml | 8 ++++---- .github/workflows/lint.yml | 4 ++-- .github/workflows/pre_commit.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- .github/workflows/test.yml | 26 +++++++++++++------------- .pre-commit-config.yaml | 14 +++++++------- gitlab/_backends/graphql.py | 2 +- pyproject.toml | 4 +++- requirements-docker.txt | 2 +- requirements-docs.txt | 2 +- requirements-lint.txt | 14 +++++++------- requirements-precommit.txt | 2 +- requirements-test.txt | 2 +- requirements.txt | 2 +- 14 files changed, 46 insertions(+), 44 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index cb867d654..59e1a333d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -24,9 +24,9 @@ jobs: steps: - uses: actions/checkout@v7.0.1 - name: Set up Python - uses: actions/setup-python@v7.0.0 + uses: actions/setup-python@v7.1.0 with: - python-version: "3.14" + python-version: "3.15" - name: Install dependencies run: pip install tox - name: Build docs @@ -39,9 +39,9 @@ jobs: steps: - uses: actions/checkout@v7.0.1 - name: Set up Python - uses: actions/setup-python@v7.0.0 + uses: actions/setup-python@v7.1.0 with: - python-version: "3.14" + python-version: "3.15" - name: Install dependencies run: pip install tox twine wheel - name: Check twine readme rendering diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 735b80f1e..16d020a90 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -25,9 +25,9 @@ jobs: - uses: actions/checkout@v7.0.1 with: fetch-depth: 0 - - uses: actions/setup-python@v7.0.0 + - uses: actions/setup-python@v7.1.0 with: - python-version: "3.14" + python-version: "3.15" - run: pip install --upgrade tox - name: Run commitizen (https://commitizen-tools.github.io/commitizen/) run: tox -e cz diff --git a/.github/workflows/pre_commit.yml b/.github/workflows/pre_commit.yml index 02aedb20c..eb43fb0e6 100644 --- a/.github/workflows/pre_commit.yml +++ b/.github/workflows/pre_commit.yml @@ -30,9 +30,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7.0.1 - - uses: actions/setup-python@v7.0.0 + - uses: actions/setup-python@v7.1.0 with: - python-version: "3.14" + python-version: "3.15" - name: install tox run: pip install tox==3.26.0 - name: pre-commit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b259490cc..9e5d58ba9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: - name: Python Semantic Release id: release - uses: python-semantic-release/python-semantic-release@v10.6.2 + uses: python-semantic-release/python-semantic-release@v10.7.0 with: github_token: ${{ secrets.RELEASE_GITHUB_TOKEN }} @@ -32,7 +32,7 @@ jobs: if: steps.release.outputs.released == 'true' - name: Publish package distributions to GitHub Releases - uses: python-semantic-release/publish-action@v10.6.2 + uses: python-semantic-release/publish-action@v10.7.0 if: steps.release.outputs.released == 'true' with: github_token: ${{ secrets.RELEASE_GITHUB_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index eca7e60ac..36a33263e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,7 +48,7 @@ jobs: steps: - uses: actions/checkout@v7.0.1 - name: Set up Python ${{ matrix.python.version }} - uses: actions/setup-python@v7.0.0 + uses: actions/setup-python@v7.1.0 with: python-version: ${{ matrix.python.version }} - name: Install dependencies @@ -67,9 +67,9 @@ jobs: steps: - uses: actions/checkout@v7.0.1 - name: Set up Python - uses: actions/setup-python@v7.0.0 + uses: actions/setup-python@v7.1.0 with: - python-version: "3.14" + python-version: "3.15" - name: Install dependencies run: pip install tox - name: Run tests @@ -77,7 +77,7 @@ jobs: TOXENV: ${{ matrix.toxenv }} run: tox -- --override-ini='log_cli=True' - name: Upload codecov coverage - uses: codecov/codecov-action@v7.1.0 + uses: codecov/codecov-action@v7.1.1 with: files: ./coverage.xml flags: ${{ matrix.toxenv }} @@ -89,9 +89,9 @@ jobs: steps: - uses: actions/checkout@v7.0.1 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v7.0.0 + uses: actions/setup-python@v7.1.0 with: - python-version: "3.14" + python-version: "3.15" - name: Install dependencies run: pip install tox - name: Run tests @@ -100,7 +100,7 @@ jobs: TOXENV: cover run: tox - name: Upload codecov coverage - uses: codecov/codecov-action@v7.1.0 + uses: codecov/codecov-action@v7.1.1 with: files: ./coverage.xml flags: unit @@ -112,15 +112,15 @@ jobs: name: Python wheel steps: - uses: actions/checkout@v7.0.1 - - uses: actions/setup-python@v7.0.0 + - uses: actions/setup-python@v7.1.0 with: - python-version: "3.14" + python-version: "3.15" - name: Install dependencies run: | pip install -r requirements-test.txt - name: Build package run: python -m build -o dist/ - - uses: actions/upload-artifact@v7.0.1 + - uses: actions/upload-artifact@v7.0.2 with: name: dist path: dist @@ -131,10 +131,10 @@ jobs: steps: - uses: actions/checkout@v7.0.1 - name: Set up Python - uses: actions/setup-python@v7.0.0 + uses: actions/setup-python@v7.1.0 with: - python-version: '3.14' - - uses: actions/download-artifact@v8.0.1 + python-version: '3.15' + - uses: actions/download-artifact@v8.0.2 with: name: dist path: dist diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e0f96ef28..cbe3c60ee 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,24 +3,24 @@ default_language_version: repos: - repo: https://github.com/psf/black - rev: 26.5.1 + rev: 26.10.1 hooks: - id: black - repo: https://github.com/commitizen-tools/commitizen - rev: v4.18.1 + rev: v4.19.3 hooks: - id: commitizen stages: [commit-msg] - repo: https://github.com/pycqa/flake8 - rev: 7.3.0 + rev: 7.4.1 hooks: - id: flake8 - repo: https://github.com/pycqa/isort - rev: 9.0.1 + rev: 9.0.2 hooks: - id: isort - repo: https://github.com/pycqa/pylint - rev: v4.0.8 + rev: v4.1.3 hooks: - id: pylint additional_dependencies: @@ -32,7 +32,7 @@ repos: - requests-toolbelt==1.0.0 files: 'gitlab/' - repo: https://github.com/pre-commit/mirrors-mypy - rev: v2.3.1 + rev: v2.4.0 hooks: - id: mypy args: [] @@ -51,6 +51,6 @@ repos: - id: rst-directive-colons - id: rst-inline-touching-normal - repo: https://github.com/maxbrunet/pre-commit-renovate - rev: 44.90.3 + rev: 44.184.0 hooks: - id: renovate-config-validator diff --git a/gitlab/_backends/graphql.py b/gitlab/_backends/graphql.py index 5fe97de70..0995c02a1 100644 --- a/gitlab/_backends/graphql.py +++ b/gitlab/_backends/graphql.py @@ -24,7 +24,7 @@ def close(self) -> None: pass -class GitlabAsyncTransport(HTTPXAsyncTransport): +class GitlabAsyncTransport(HTTPXAsyncTransport): # pylint: disable=abstract-method """An async gql httpx transport that reuses an existing httpx.AsyncClient. By default, gql's transports do not have a keep-alive session and do not enable providing your own session that's kept open. diff --git a/pyproject.toml b/pyproject.toml index a483aa235..88833d6e8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -110,7 +110,9 @@ insertion_flag = "All versions below are listed in reverse chronological order." [tool.pylint.messages_control] max-line-length = 88 -jobs = 0 # Use auto-detected number of multiple processes to speed up Pylint. +# TODO: Restore `jobs = 0` once a dill release newer than 0.4.1 is available. Parallel +# mode crashes on Python 3.15: https://github.com/pylint-dev/pylint/issues/11528 +jobs = 1 # TODO(jlvilla): Work on removing these disables over time. disable = [ "arguments-differ", diff --git a/requirements-docker.txt b/requirements-docker.txt index 123a4438a..4856e5875 100644 --- a/requirements-docker.txt +++ b/requirements-docker.txt @@ -1,3 +1,3 @@ -r requirements.txt -r requirements-test.txt -pytest-docker==3.2.5 +pytest-docker==3.2.6 diff --git a/requirements-docs.txt b/requirements-docs.txt index 3118f99e3..6ce0ac560 100644 --- a/requirements-docs.txt +++ b/requirements-docs.txt @@ -2,6 +2,6 @@ furo==2025.12.19 jinja2==3.1.6 myst-parser==5.1.0 -sphinx==9.1.0 +sphinx==9.2.0 sphinxcontrib-autoprogram==0.1.9 sphinx-autobuild==2025.8.25 diff --git a/requirements-lint.txt b/requirements-lint.txt index 5b77f2085..0ed10d7c4 100644 --- a/requirements-lint.txt +++ b/requirements-lint.txt @@ -1,14 +1,14 @@ -r requirements.txt argcomplete==2.0.0 black==26.10.1 -commitizen==4.18.1 -flake8==7.3.0 -isort==9.0.1 -mypy==2.3.1 -pylint==4.0.9 +commitizen==4.19.3 +flake8==7.4.1 +isort==9.0.2 +mypy==2.4.0 +pylint==4.1.3 pytest==9.1.1 responses==0.26.3 respx==0.23.1 types-PyYAML==6.0.12.20260906 -types-requests==2.33.0.20260906 -types-setuptools==84.0.0.20260812 +types-requests==2.33.0.20261006 +types-setuptools==84.0.0.20261006 diff --git a/requirements-precommit.txt b/requirements-precommit.txt index 237054009..789e26d8c 100644 --- a/requirements-precommit.txt +++ b/requirements-precommit.txt @@ -1 +1 @@ -pre-commit==4.6.2 +pre-commit==4.7.0 diff --git a/requirements-test.txt b/requirements-test.txt index c32aef14b..5eeae1560 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -1,7 +1,7 @@ -r requirements.txt anyio==4.15.1 build==1.6.1 -coverage==7.16.1 +coverage==7.17.0 pytest-console-scripts==1.4.1 pytest-cov==7.1.0 pytest-github-actions-annotate-failures==0.4.2 diff --git a/requirements.txt b/requirements.txt index 4cf4bdfb0..54eb47bbd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -gql==4.0.0 +gql==4.4.0 httpx==0.28.1 requests==2.34.2 requests-toolbelt==1.0.0 From bb9ea1b92e8bec99f914044c9e0c5f95628751be Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2026 18:08:37 +0000 Subject: [PATCH 5/5] chore(deps): update dependency ubuntu to v26 --- .github/workflows/docs.yml | 4 ++-- .github/workflows/rerun-test.yml | 2 +- .github/workflows/test.yml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 59e1a333d..590d32507 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -20,7 +20,7 @@ env: jobs: sphinx: - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - uses: actions/checkout@v7.0.1 - name: Set up Python @@ -35,7 +35,7 @@ jobs: run: tox twine-check: - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - uses: actions/checkout@v7.0.1 - name: Set up Python diff --git a/.github/workflows/rerun-test.yml b/.github/workflows/rerun-test.yml index 5d477b09f..c1e9f2ed7 100644 --- a/.github/workflows/rerun-test.yml +++ b/.github/workflows/rerun-test.yml @@ -8,7 +8,7 @@ jobs: rerun_pr_tests: name: rerun_pr_tests if: ${{ github.event.issue.pull_request }} - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - uses: estroz/rerun-actions@main with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 36a33263e..333db49eb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -60,7 +60,7 @@ jobs: functional: timeout-minutes: 30 - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: matrix: toxenv: [api_func_v4, cli_func_v4] @@ -85,7 +85,7 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} coverage: - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - uses: actions/checkout@v7.0.1 - name: Set up Python ${{ matrix.python-version }}