From 595da41c9662e98bb8f048a9e0aaa03335b50104 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 01:50:32 +0000 Subject: [PATCH 01/12] chore(deps): update all non-major dependencies --- .github/workflows/docs.yml | 4 ++-- .github/workflows/lint.yml | 2 +- .github/workflows/pre_commit.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 10 +++++----- .pre-commit-config.yaml | 2 +- requirements-precommit.txt | 2 +- requirements-test.txt | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 001aca5e2..d6bfe26ce 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -22,7 +22,7 @@ jobs: sphinx: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v5.0.0 + - uses: actions/checkout@v5.0.1 - name: Set up Python uses: actions/setup-python@v6.0.0 with: @@ -37,7 +37,7 @@ jobs: twine-check: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v5.0.0 + - uses: actions/checkout@v5.0.1 - name: Set up Python uses: actions/setup-python@v6.0.0 with: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4148fcaeb..c097b8d30 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -22,7 +22,7 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5.0.0 + - uses: actions/checkout@v5.0.1 with: fetch-depth: 0 - uses: actions/setup-python@v6.0.0 diff --git a/.github/workflows/pre_commit.yml b/.github/workflows/pre_commit.yml index 9bc366f6d..52b5fba96 100644 --- a/.github/workflows/pre_commit.yml +++ b/.github/workflows/pre_commit.yml @@ -29,7 +29,7 @@ jobs: pre_commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5.0.0 + - uses: actions/checkout@v5.0.1 - uses: actions/setup-python@v6.0.0 with: python-version: "3.14" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3b9630fd9..7b219c218 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,7 +14,7 @@ jobs: id-token: write environment: pypi.org steps: - - uses: actions/checkout@v5.0.0 + - uses: actions/checkout@v5.0.1 with: fetch-depth: 0 token: ${{ secrets.RELEASE_GITHUB_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7f1b877ca..2ae02db98 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -46,7 +46,7 @@ jobs: version: "3.14" toxenv: py314,smoke steps: - - uses: actions/checkout@v5.0.0 + - uses: actions/checkout@v5.0.1 - name: Set up Python ${{ matrix.python.version }} uses: actions/setup-python@v6.0.0 with: @@ -65,7 +65,7 @@ jobs: matrix: toxenv: [api_func_v4, cli_func_v4] steps: - - uses: actions/checkout@v5.0.0 + - uses: actions/checkout@v5.0.1 - name: Set up Python uses: actions/setup-python@v6.0.0 with: @@ -87,7 +87,7 @@ jobs: coverage: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v5.0.0 + - uses: actions/checkout@v5.0.1 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6.0.0 with: @@ -111,7 +111,7 @@ jobs: runs-on: ubuntu-latest name: Python wheel steps: - - uses: actions/checkout@v5.0.0 + - uses: actions/checkout@v5.0.1 - uses: actions/setup-python@v6.0.0 with: python-version: "3.14" @@ -129,7 +129,7 @@ jobs: runs-on: ubuntu-latest needs: [dist] steps: - - uses: actions/checkout@v5.0.0 + - uses: actions/checkout@v5.0.1 - name: Set up Python uses: actions/setup-python@v6.0.0 with: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5a6adb1be..2fca6428d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -51,6 +51,6 @@ repos: - id: rst-directive-colons - id: rst-inline-touching-normal - repo: https://github.com/maxbrunet/pre-commit-renovate - rev: 42.11.0 + rev: 42.19.3 hooks: - id: renovate-config-validator diff --git a/requirements-precommit.txt b/requirements-precommit.txt index b6927360e..917f1957e 100644 --- a/requirements-precommit.txt +++ b/requirements-precommit.txt @@ -1 +1 @@ -pre-commit==4.4.0 +pre-commit==4.5.0 diff --git a/requirements-test.txt b/requirements-test.txt index 5271bfa51..2bd17b92e 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -1,7 +1,7 @@ -r requirements.txt anyio==4.11.0 build==1.3.0 -coverage==7.11.3 +coverage==7.12.0 pytest-console-scripts==1.4.1 pytest-cov==7.0.0 pytest-github-actions-annotate-failures==0.3.0 From d071dcfaf2a0de37dd3044c4c8bf4ff3ee1d90f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 02:56:33 +0000 Subject: [PATCH 02/12] chore(deps): update actions/checkout action to v6 --- .github/workflows/docs.yml | 4 ++-- .github/workflows/lint.yml | 2 +- .github/workflows/pre_commit.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 10 +++++----- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index d6bfe26ce..d9eba338d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -22,7 +22,7 @@ jobs: sphinx: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v5.0.1 + - uses: actions/checkout@v6.0.0 - name: Set up Python uses: actions/setup-python@v6.0.0 with: @@ -37,7 +37,7 @@ jobs: twine-check: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v5.0.1 + - uses: actions/checkout@v6.0.0 - name: Set up Python uses: actions/setup-python@v6.0.0 with: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index c097b8d30..30dc1e6ce 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -22,7 +22,7 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5.0.1 + - uses: actions/checkout@v6.0.0 with: fetch-depth: 0 - uses: actions/setup-python@v6.0.0 diff --git a/.github/workflows/pre_commit.yml b/.github/workflows/pre_commit.yml index 52b5fba96..bf29fd478 100644 --- a/.github/workflows/pre_commit.yml +++ b/.github/workflows/pre_commit.yml @@ -29,7 +29,7 @@ jobs: pre_commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5.0.1 + - uses: actions/checkout@v6.0.0 - uses: actions/setup-python@v6.0.0 with: python-version: "3.14" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7b219c218..413bdae23 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,7 +14,7 @@ jobs: id-token: write environment: pypi.org steps: - - uses: actions/checkout@v5.0.1 + - uses: actions/checkout@v6.0.0 with: fetch-depth: 0 token: ${{ secrets.RELEASE_GITHUB_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2ae02db98..78ebbd626 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -46,7 +46,7 @@ jobs: version: "3.14" toxenv: py314,smoke steps: - - uses: actions/checkout@v5.0.1 + - uses: actions/checkout@v6.0.0 - name: Set up Python ${{ matrix.python.version }} uses: actions/setup-python@v6.0.0 with: @@ -65,7 +65,7 @@ jobs: matrix: toxenv: [api_func_v4, cli_func_v4] steps: - - uses: actions/checkout@v5.0.1 + - uses: actions/checkout@v6.0.0 - name: Set up Python uses: actions/setup-python@v6.0.0 with: @@ -87,7 +87,7 @@ jobs: coverage: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v5.0.1 + - uses: actions/checkout@v6.0.0 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6.0.0 with: @@ -111,7 +111,7 @@ jobs: runs-on: ubuntu-latest name: Python wheel steps: - - uses: actions/checkout@v5.0.1 + - uses: actions/checkout@v6.0.0 - uses: actions/setup-python@v6.0.0 with: python-version: "3.14" @@ -129,7 +129,7 @@ jobs: runs-on: ubuntu-latest needs: [dist] steps: - - uses: actions/checkout@v5.0.1 + - uses: actions/checkout@v6.0.0 - name: Set up Python uses: actions/setup-python@v6.0.0 with: From 16fa4b8e648d2fcdf98fabd8d6cd565ce14a3155 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 02:01:29 +0000 Subject: [PATCH 03/12] chore(deps): update all non-major dependencies --- .github/workflows/docs.yml | 4 ++-- .github/workflows/lint.yml | 2 +- .github/workflows/pre_commit.yml | 2 +- .github/workflows/test.yml | 10 +++++----- .pre-commit-config.yaml | 6 +++--- requirements-lint.txt | 4 ++-- requirements-test.txt | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index d9eba338d..696abe747 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -24,7 +24,7 @@ jobs: steps: - uses: actions/checkout@v6.0.0 - name: Set up Python - uses: actions/setup-python@v6.0.0 + uses: actions/setup-python@v6.1.0 with: python-version: "3.14" - name: Install dependencies @@ -39,7 +39,7 @@ jobs: steps: - uses: actions/checkout@v6.0.0 - name: Set up Python - uses: actions/setup-python@v6.0.0 + uses: actions/setup-python@v6.1.0 with: python-version: "3.14" - name: Install dependencies diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 30dc1e6ce..aa022f474 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -25,7 +25,7 @@ jobs: - uses: actions/checkout@v6.0.0 with: fetch-depth: 0 - - uses: actions/setup-python@v6.0.0 + - uses: actions/setup-python@v6.1.0 with: python-version: "3.14" - run: pip install --upgrade tox diff --git a/.github/workflows/pre_commit.yml b/.github/workflows/pre_commit.yml index bf29fd478..ad22f2a6e 100644 --- a/.github/workflows/pre_commit.yml +++ b/.github/workflows/pre_commit.yml @@ -30,7 +30,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6.0.0 - - uses: actions/setup-python@v6.0.0 + - uses: actions/setup-python@v6.1.0 with: python-version: "3.14" - name: install tox diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 78ebbd626..58b843c77 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,7 +48,7 @@ jobs: steps: - uses: actions/checkout@v6.0.0 - name: Set up Python ${{ matrix.python.version }} - uses: actions/setup-python@v6.0.0 + uses: actions/setup-python@v6.1.0 with: python-version: ${{ matrix.python.version }} - name: Install dependencies @@ -67,7 +67,7 @@ jobs: steps: - uses: actions/checkout@v6.0.0 - name: Set up Python - uses: actions/setup-python@v6.0.0 + uses: actions/setup-python@v6.1.0 with: python-version: "3.14" - name: Install dependencies @@ -89,7 +89,7 @@ jobs: steps: - uses: actions/checkout@v6.0.0 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6.0.0 + uses: actions/setup-python@v6.1.0 with: python-version: "3.14" - name: Install dependencies @@ -112,7 +112,7 @@ jobs: name: Python wheel steps: - uses: actions/checkout@v6.0.0 - - uses: actions/setup-python@v6.0.0 + - uses: actions/setup-python@v6.1.0 with: python-version: "3.14" - name: Install dependencies @@ -131,7 +131,7 @@ jobs: steps: - uses: actions/checkout@v6.0.0 - name: Set up Python - uses: actions/setup-python@v6.0.0 + uses: actions/setup-python@v6.1.0 with: python-version: '3.14' - uses: actions/download-artifact@v6.0.0 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2fca6428d..08ddcb73a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,7 +20,7 @@ repos: hooks: - id: isort - repo: https://github.com/pycqa/pylint - rev: v4.0.3 + rev: v4.0.4 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: v1.18.2 + rev: v1.19.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: 42.19.3 + rev: 42.27.0 hooks: - id: renovate-config-validator diff --git a/requirements-lint.txt b/requirements-lint.txt index 241dd9042..bcf13fe69 100644 --- a/requirements-lint.txt +++ b/requirements-lint.txt @@ -4,8 +4,8 @@ black==25.11.0 commitizen==4.10.0 flake8==7.3.0 isort==7.0.0 -mypy==1.18.2 -pylint==4.0.3 +mypy==1.19.0 +pylint==4.0.4 pytest==9.0.1 responses==0.25.8 respx==0.22.0 diff --git a/requirements-test.txt b/requirements-test.txt index 2bd17b92e..c42011354 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -1,5 +1,5 @@ -r requirements.txt -anyio==4.11.0 +anyio==4.12.0 build==1.3.0 coverage==7.12.0 pytest-console-scripts==1.4.1 From 9f11323c60468d8fdccb4b08aac857f9c485f9d9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Dec 2025 08:39:41 +0000 Subject: [PATCH 04/12] chore(deps): update all non-major dependencies --- .github/workflows/docs.yml | 4 ++-- .github/workflows/lint.yml | 2 +- .github/workflows/pre_commit.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/stale.yml | 2 +- .github/workflows/test.yml | 10 +++++----- .pre-commit-config.yaml | 4 ++-- requirements-lint.txt | 4 ++-- requirements-test.txt | 2 +- 9 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 696abe747..90f7d3fd5 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -22,7 +22,7 @@ jobs: sphinx: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 - name: Set up Python uses: actions/setup-python@v6.1.0 with: @@ -37,7 +37,7 @@ jobs: twine-check: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 - name: Set up Python uses: actions/setup-python@v6.1.0 with: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index aa022f474..01bee8a33 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -22,7 +22,7 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: fetch-depth: 0 - uses: actions/setup-python@v6.1.0 diff --git a/.github/workflows/pre_commit.yml b/.github/workflows/pre_commit.yml index ad22f2a6e..4be228d66 100644 --- a/.github/workflows/pre_commit.yml +++ b/.github/workflows/pre_commit.yml @@ -29,7 +29,7 @@ jobs: pre_commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 - uses: actions/setup-python@v6.1.0 with: python-version: "3.14" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 413bdae23..c48d32445 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,7 +14,7 @@ jobs: id-token: write environment: pypi.org steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: fetch-depth: 0 token: ${{ secrets.RELEASE_GITHUB_TOKEN }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index e75866b21..e4fd014a5 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -17,7 +17,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@v10.1.0 + - uses: actions/stale@v10.1.1 with: operations-per-run: 500 stale-issue-label: "stale" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 58b843c77..b10f50c21 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -46,7 +46,7 @@ jobs: version: "3.14" toxenv: py314,smoke steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 - name: Set up Python ${{ matrix.python.version }} uses: actions/setup-python@v6.1.0 with: @@ -65,7 +65,7 @@ jobs: matrix: toxenv: [api_func_v4, cli_func_v4] steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 - name: Set up Python uses: actions/setup-python@v6.1.0 with: @@ -87,7 +87,7 @@ jobs: coverage: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6.1.0 with: @@ -111,7 +111,7 @@ jobs: runs-on: ubuntu-latest name: Python wheel steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 - uses: actions/setup-python@v6.1.0 with: python-version: "3.14" @@ -129,7 +129,7 @@ jobs: runs-on: ubuntu-latest needs: [dist] steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 - name: Set up Python uses: actions/setup-python@v6.1.0 with: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 08ddcb73a..c9e61446b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ default_language_version: repos: - repo: https://github.com/psf/black - rev: 25.11.0 + rev: 25.12.0 hooks: - id: black - repo: https://github.com/commitizen-tools/commitizen @@ -51,6 +51,6 @@ repos: - id: rst-directive-colons - id: rst-inline-touching-normal - repo: https://github.com/maxbrunet/pre-commit-renovate - rev: 42.27.0 + rev: 42.39.4 hooks: - id: renovate-config-validator diff --git a/requirements-lint.txt b/requirements-lint.txt index bcf13fe69..4eb6779f8 100644 --- a/requirements-lint.txt +++ b/requirements-lint.txt @@ -1,12 +1,12 @@ -r requirements.txt argcomplete==2.0.0 -black==25.11.0 +black==25.12.0 commitizen==4.10.0 flake8==7.3.0 isort==7.0.0 mypy==1.19.0 pylint==4.0.4 -pytest==9.0.1 +pytest==9.0.2 responses==0.25.8 respx==0.22.0 types-PyYAML==6.0.12.20250915 diff --git a/requirements-test.txt b/requirements-test.txt index c42011354..e8843be94 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -5,7 +5,7 @@ coverage==7.12.0 pytest-console-scripts==1.4.1 pytest-cov==7.0.0 pytest-github-actions-annotate-failures==0.3.0 -pytest==9.0.1 +pytest==9.0.2 PyYaml==6.0.3 responses==0.25.8 respx==0.22.0 From 422119576287de30e1b70411c7ab0bbe39231af7 Mon Sep 17 00:00:00 2001 From: Alexandre Laroche Date: Thu, 4 Dec 2025 06:01:29 -0500 Subject: [PATCH 05/12] fix(utils): prevent negative sleep time in rate limit retry --- gitlab/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitlab/utils.py b/gitlab/utils.py index bf37e09a5..cf1b5b7b0 100644 --- a/gitlab/utils.py +++ b/gitlab/utils.py @@ -133,7 +133,7 @@ def handle_retry_on_status( if "Retry-After" in headers: wait_time = int(headers["Retry-After"]) elif "RateLimit-Reset" in headers: - wait_time = int(headers["RateLimit-Reset"]) - time.time() + wait_time = max(0, int(headers["RateLimit-Reset"]) - time.time()) self.cur_retries += 1 time.sleep(wait_time) return True From 3c72fd1e0d74ebd82c257ba1b810252c5a7295f7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Dec 2025 18:42:30 +0000 Subject: [PATCH 06/12] chore(deps): update all non-major dependencies --- .github/workflows/release.yml | 4 ++-- .github/workflows/test.yml | 4 ++-- .pre-commit-config.yaml | 6 +++--- requirements-lint.txt | 4 ++-- requirements-precommit.txt | 2 +- requirements-test.txt | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c48d32445..ff04716dd 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.5.2 + uses: python-semantic-release/python-semantic-release@v10.5.3 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.5.2 + uses: python-semantic-release/publish-action@v10.5.3 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 b10f50c21..eec3e1599 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -77,7 +77,7 @@ jobs: TOXENV: ${{ matrix.toxenv }} run: tox -- --override-ini='log_cli=True' - name: Upload codecov coverage - uses: codecov/codecov-action@v5.5.1 + uses: codecov/codecov-action@v5.5.2 with: files: ./coverage.xml flags: ${{ matrix.toxenv }} @@ -100,7 +100,7 @@ jobs: TOXENV: cover run: tox - name: Upload codecov coverage - uses: codecov/codecov-action@v5.5.1 + uses: codecov/codecov-action@v5.5.2 with: files: ./coverage.xml flags: unit diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c9e61446b..41e732604 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,7 +7,7 @@ repos: hooks: - id: black - repo: https://github.com/commitizen-tools/commitizen - rev: v4.10.0 + rev: v4.10.1 hooks: - id: commitizen stages: [commit-msg] @@ -32,7 +32,7 @@ repos: - requests-toolbelt==1.0.0 files: 'gitlab/' - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.19.0 + rev: v1.19.1 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: 42.39.4 + rev: 42.64.0 hooks: - id: renovate-config-validator diff --git a/requirements-lint.txt b/requirements-lint.txt index 4eb6779f8..31ec607b9 100644 --- a/requirements-lint.txt +++ b/requirements-lint.txt @@ -1,10 +1,10 @@ -r requirements.txt argcomplete==2.0.0 black==25.12.0 -commitizen==4.10.0 +commitizen==4.10.1 flake8==7.3.0 isort==7.0.0 -mypy==1.19.0 +mypy==1.19.1 pylint==4.0.4 pytest==9.0.2 responses==0.25.8 diff --git a/requirements-precommit.txt b/requirements-precommit.txt index 917f1957e..fc2379223 100644 --- a/requirements-precommit.txt +++ b/requirements-precommit.txt @@ -1 +1 @@ -pre-commit==4.5.0 +pre-commit==4.5.1 diff --git a/requirements-test.txt b/requirements-test.txt index e8843be94..b06434452 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -1,7 +1,7 @@ -r requirements.txt anyio==4.12.0 build==1.3.0 -coverage==7.12.0 +coverage==7.13.0 pytest-console-scripts==1.4.1 pytest-cov==7.0.0 pytest-github-actions-annotate-failures==0.3.0 From 91793733df8de2bd371e2297c80b429a2fcaace1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Dec 2025 19:00:55 +0000 Subject: [PATCH 07/12] chore(deps): update dessant/lock-threads action to v6 --- .github/workflows/lock.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index 05e21065c..f6f1c6229 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -15,6 +15,6 @@ jobs: action: runs-on: ubuntu-latest steps: - - uses: dessant/lock-threads@v5.0.1 + - uses: dessant/lock-threads@v6.0.0 with: process-only: 'issues' From 40827f419020d84aa777fa42a289fb07dc2b3fa7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 00:30:50 +0000 Subject: [PATCH 08/12] chore(deps): update all non-major dependencies --- .pre-commit-config.yaml | 2 +- requirements-docs.txt | 2 +- requirements-lint.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 41e732604..3b93e8655 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -51,6 +51,6 @@ repos: - id: rst-directive-colons - id: rst-inline-touching-normal - repo: https://github.com/maxbrunet/pre-commit-renovate - rev: 42.64.0 + rev: 42.64.1 hooks: - id: renovate-config-validator diff --git a/requirements-docs.txt b/requirements-docs.txt index b83ef6dac..8d756d4f1 100644 --- a/requirements-docs.txt +++ b/requirements-docs.txt @@ -1,5 +1,5 @@ -r requirements.txt -furo==2025.9.25 +furo==2025.12.19 jinja2==3.1.6 myst-parser==4.0.1 sphinx==8.2.3 diff --git a/requirements-lint.txt b/requirements-lint.txt index 31ec607b9..5006460d1 100644 --- a/requirements-lint.txt +++ b/requirements-lint.txt @@ -11,4 +11,4 @@ responses==0.25.8 respx==0.22.0 types-PyYAML==6.0.12.20250915 types-requests==2.32.4.20250913 -types-setuptools==80.9.0.20250822 +types-setuptools==80.9.0.20251221 From c7c139b9e7823ec1800a819233aee469355ee8d1 Mon Sep 17 00:00:00 2001 From: "John L. Villalovos" Date: Wed, 24 Dec 2025 13:17:55 -0800 Subject: [PATCH 09/12] test(functional): update to GitLab 18.6 and resolve issues found --- tests/functional/api/test_epics.py | 8 ++++--- tests/functional/api/test_keys.py | 10 ++++++++- .../api/test_project_job_token_scope.py | 4 ++++ tests/functional/api/test_projects.py | 4 ++-- tests/functional/fixtures/.env | 2 +- tests/functional/fixtures/docker-compose.yml | 2 +- tests/functional/helpers.py | 22 +++++++++---------- 7 files changed, 33 insertions(+), 19 deletions(-) diff --git a/tests/functional/api/test_epics.py b/tests/functional/api/test_epics.py index a4f6765da..b61e23776 100644 --- a/tests/functional/api/test_epics.py +++ b/tests/functional/api/test_epics.py @@ -15,18 +15,20 @@ def test_epics(group): assert group.epics.list() -@pytest.mark.xfail(reason="404 on issue.id") def test_epic_issues(epic, issue): assert not epic.issues.list() + # FYI: Creating an issue causes a note to be created epic_issue = epic.issues.create({"issue_id": issue.id}) assert epic.issues.list() + # FYI: Deleting an issue causes a note to be created epic_issue.delete() def test_epic_notes(epic): - assert not epic.notes.list() + notes = epic.notes.list(get_all=True) epic.notes.create({"body": "Test note"}) - assert epic.notes.list() + new_notes = epic.notes.list(get_all=True) + assert len(new_notes) == (len(notes) + 1), f"{new_notes} {notes}" diff --git a/tests/functional/api/test_keys.py b/tests/functional/api/test_keys.py index 359649bef..6a2d660ed 100644 --- a/tests/functional/api/test_keys.py +++ b/tests/functional/api/test_keys.py @@ -38,6 +38,14 @@ def test_keys_deploy(gl, project, DEPLOY_KEY): key_by_fingerprint = gl.keys.get(fingerprint=fingerprint) assert key_by_fingerprint.title == key.title assert key_by_fingerprint.key == key.key - assert len(key_by_fingerprint.deploy_keys_projects) == 1 + + if not any( + key_project.get("project_id") == project.id + for key_project in key_by_fingerprint.deploy_keys_projects + ): + raise AssertionError( + f"Project {project} not found in 'deploy_keys_projects' " + f"{key_by_fingerprint.pformat()}" + ) key.delete() diff --git a/tests/functional/api/test_project_job_token_scope.py b/tests/functional/api/test_project_job_token_scope.py index 0d0466182..b1de0a7b2 100644 --- a/tests/functional/api/test_project_job_token_scope.py +++ b/tests/functional/api/test_project_job_token_scope.py @@ -1,3 +1,6 @@ +import pytest + + # https://docs.gitlab.com/ee/ci/jobs/ci_job_token.html#allow-any-project-to-access-your-project def test_enable_limit_access_to_this_project(gl, project): scope = project.job_token_scope.get() @@ -10,6 +13,7 @@ def test_enable_limit_access_to_this_project(gl, project): assert scope.inbound_enabled +@pytest.mark.xfail(reason="https://gitlab.com/gitlab-org/gitlab/-/issues/582271") def test_disable_limit_access_to_this_project(gl, project): scope = project.job_token_scope.get() diff --git a/tests/functional/api/test_projects.py b/tests/functional/api/test_projects.py index 760f95336..c56b23ec7 100644 --- a/tests/functional/api/test_projects.py +++ b/tests/functional/api/test_projects.py @@ -26,9 +26,9 @@ def test_create_project(gl, user): sudo_project = gl.projects.create({"name": "sudo_project"}, sudo=user.id) - created = gl.projects.list() + created = gl.projects.list(get_all=True) created_gen = gl.projects.list(iterator=True) - owned = gl.projects.list(owned=True) + owned = gl.projects.list(owned=True, get_all=True) assert admin_project in created and sudo_project in created assert admin_project in owned and sudo_project not in owned diff --git a/tests/functional/fixtures/.env b/tests/functional/fixtures/.env index e85f85e6f..a96b42f42 100644 --- a/tests/functional/fixtures/.env +++ b/tests/functional/fixtures/.env @@ -1,4 +1,4 @@ GITLAB_IMAGE=gitlab/gitlab-ee -GITLAB_TAG=17.8.2-ee.0 +GITLAB_TAG=18.6.1-ee.0 GITLAB_RUNNER_IMAGE=gitlab/gitlab-runner GITLAB_RUNNER_TAG=96856197 diff --git a/tests/functional/fixtures/docker-compose.yml b/tests/functional/fixtures/docker-compose.yml index f36f3d2fd..17562d5be 100644 --- a/tests/functional/fixtures/docker-compose.yml +++ b/tests/functional/fixtures/docker-compose.yml @@ -34,7 +34,7 @@ services: entrypoint: - /bin/sh - -c - - ruby /create_license.rb && /assets/wrapper + - ruby /create_license.rb && /assets/init-container volumes: - ${PWD}/tests/functional/fixtures/create_license.rb:/create_license.rb ports: diff --git a/tests/functional/helpers.py b/tests/functional/helpers.py index 090673bf7..9d313e540 100644 --- a/tests/functional/helpers.py +++ b/tests/functional/helpers.py @@ -9,6 +9,7 @@ import gitlab import gitlab.base import gitlab.exceptions +import gitlab.v4.objects SLEEP_INTERVAL = 0.5 TIMEOUT = 60 # seconds before timeout will occur @@ -37,6 +38,11 @@ def safe_delete(object: gitlab.base.RESTObject) -> None: object = manager.get(object.get_id()) # type: ignore[attr-defined] except gitlab.exceptions.GitlabGetError: return + # If object is already marked for deletion we have succeeded + if getattr(object, "marked_for_deletion_on", None) is not None: + # 'Group' and 'Project' objects have a 'marked_for_deletion_on' attribute + logging.info(f"{object!r} is marked for deletion.") + return if index: logging.info(f"Attempt {index + 1} to delete {object!r}.") @@ -52,22 +58,16 @@ def safe_delete(object: gitlab.base.RESTObject) -> None: # we shouldn't cause test to fail if it still exists return elif isinstance(object, gitlab.v4.objects.Project): - # Immediately delete rather than waiting for at least 1day - # https://docs.gitlab.com/ee/api/projects.html#delete-project - object.delete(permanently_remove=True) - pass + # Starting in GitLab 18, projects can't be immediately deleted. + # So this will mark it for deletion. + object.delete() else: # We only attempt to delete parent groups to prevent dangling sub-groups - # However parent groups can only be deleted on a delay in Gl 16 + # However parent groups can only be deleted on a delay in GitLab 16 # https://docs.gitlab.com/ee/api/groups.html#remove-group object.delete() except gitlab.exceptions.GitlabDeleteError: - logging.info(f"{object!r} already deleted or scheduled for deletion.") - if isinstance(object, gitlab.v4.objects.Group): - # Parent groups can never be immediately deleted in GL 16, - # so don't cause test to fail if it still exists - return - pass + logging.exception(f"Error attempting to delete: {object.pformat()}") time.sleep(SLEEP_INTERVAL) pytest.fail(f"{object!r} was not deleted") From d6eac7bea8d755dbe11ef4ff8a5247aa1aba2e24 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Dec 2025 21:54:12 +0000 Subject: [PATCH 10/12] chore(deps): update gitlab/gitlab-ee docker tag to v18.7.0-ee.0 (#3218) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tests/functional/fixtures/.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/functional/fixtures/.env b/tests/functional/fixtures/.env index a96b42f42..f33c35752 100644 --- a/tests/functional/fixtures/.env +++ b/tests/functional/fixtures/.env @@ -1,4 +1,4 @@ GITLAB_IMAGE=gitlab/gitlab-ee -GITLAB_TAG=18.6.1-ee.0 +GITLAB_TAG=18.7.0-ee.0 GITLAB_RUNNER_IMAGE=gitlab/gitlab-runner GITLAB_RUNNER_TAG=96856197 From 9dd62c3f5bcf3e082c2733bd4edc068f993c22ec Mon Sep 17 00:00:00 2001 From: Sigurd Spieckermann Date: Thu, 20 Nov 2025 12:58:50 +0100 Subject: [PATCH 11/12] feat(registry-protection): add support for registry protection rule deletion --- .../registry_protection_repository_rules.py | 10 +++++++++- tests/functional/api/test_registry.py | 5 +++++ .../objects/test_registry_protection_rules.py | 15 +++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/gitlab/v4/objects/registry_protection_repository_rules.py b/gitlab/v4/objects/registry_protection_repository_rules.py index 19d4bdf59..2a457a024 100644 --- a/gitlab/v4/objects/registry_protection_repository_rules.py +++ b/gitlab/v4/objects/registry_protection_repository_rules.py @@ -1,5 +1,12 @@ from gitlab.base import RESTObject -from gitlab.mixins import CreateMixin, ListMixin, SaveMixin, UpdateMethod, UpdateMixin +from gitlab.mixins import ( + CreateMixin, + DeleteMixin, + ListMixin, + SaveMixin, + UpdateMethod, + UpdateMixin, +) from gitlab.types import RequiredOptional __all__ = [ @@ -16,6 +23,7 @@ class ProjectRegistryRepositoryProtectionRuleManager( ListMixin[ProjectRegistryRepositoryProtectionRule], CreateMixin[ProjectRegistryRepositoryProtectionRule], UpdateMixin[ProjectRegistryRepositoryProtectionRule], + DeleteMixin[ProjectRegistryRepositoryProtectionRule], ): _path = "/projects/{project_id}/registry/protection/repository/rules" _obj_cls = ProjectRegistryRepositoryProtectionRule diff --git a/tests/functional/api/test_registry.py b/tests/functional/api/test_registry.py index 91fdceacc..d234128ca 100644 --- a/tests/functional/api/test_registry.py +++ b/tests/functional/api/test_registry.py @@ -26,3 +26,8 @@ def test_project_protected_registry(project: Project): protected_registry.minimum_access_level_for_push = "owner" protected_registry.save() assert protected_registry.minimum_access_level_for_push == "owner" + + protected_registry.delete() + + rules = project.registry_protection_repository_rules.list() + assert rules == [] diff --git a/tests/unit/objects/test_registry_protection_rules.py b/tests/unit/objects/test_registry_protection_rules.py index 3078278f5..3e9db414a 100644 --- a/tests/unit/objects/test_registry_protection_rules.py +++ b/tests/unit/objects/test_registry_protection_rules.py @@ -58,6 +58,17 @@ def resp_update_protected_registry(): yield rsps +@pytest.fixture +def resp_delete_protected_registry(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.DELETE, + url="http://localhost/api/v4/projects/1/registry/protection/repository/rules/1", + status=204, + ) + yield rsps + + def test_list_project_protected_registries(project, resp_list_protected_registries): protected_registry = project.registry_protection_repository_rules.list()[0] assert isinstance(protected_registry, ProjectRegistryRepositoryProtectionRule) @@ -80,3 +91,7 @@ def test_update_project_protected_registry(project, resp_update_protected_regist 1, {"repository_path_pattern": "abc*"} ) assert updated["repository_path_pattern"] == "abc*" + + +def test_delete_project_protected_registry(project, resp_delete_protected_registry): + project.registry_protection_repository_rules.delete(1) From 8719985bdb88057cd8dbc2bd27f6a1161cdac6fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Dec 2025 21:37:59 +0000 Subject: [PATCH 12/12] chore(deps): update github artifact actions --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index eec3e1599..0f2af115e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -120,7 +120,7 @@ jobs: pip install -r requirements-test.txt - name: Build package run: python -m build -o dist/ - - uses: actions/upload-artifact@v5.0.0 + - uses: actions/upload-artifact@v6.0.0 with: name: dist path: dist @@ -134,7 +134,7 @@ jobs: uses: actions/setup-python@v6.1.0 with: python-version: '3.14' - - uses: actions/download-artifact@v6.0.0 + - uses: actions/download-artifact@v7.0.0 with: name: dist path: dist