Repository: repobee/repobee

Issue:
Add support for Python 3.12 and 3.13
There's at least one test failure in the dist tests when running with Python 3.12, so Python 3.12 support needs to be investigated a bit.

Discussion:

Patch:
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 954df4a..3ac1154 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -22,7 +22,7 @@ jobs:
         python -m pip install .
         python setup.py sdist bdist_wheel
     - name: Publish RepoBee to PyPi
-      uses: pypa/gh-action-pypi-publish@81e9d935c883d0b210363ab89cf05f3894778450 # v1.8.14
+      uses: pypa/gh-action-pypi-publish@f7600683efdcb7656dec5b29656edb7bc586e597 # v1.10.3
       with:
         user: __token__
         password: ${{ secrets.PYPI_API_TOKEN }}
diff --git a/.github/workflows/deploy_dockerhub.yml b/.github/workflows/deploy_dockerhub.yml
index e87bcce..31cc3ef 100644
--- a/.github/workflows/deploy_dockerhub.yml
+++ b/.github/workflows/deploy_dockerhub.yml
@@ -24,7 +24,7 @@ jobs:
           username: ${{ secrets.DOCKERHUB_USERNAME }}
           password: ${{ secrets.DOCKERHUB_TOKEN }}
       - name: Build and export to Docker
-        uses: docker/build-push-action@v5
+        uses: docker/build-push-action@v6
         with:
           context: .
           load: true
@@ -36,13 +36,13 @@ jobs:
           VERSION=v$(docker run -t repobee/repobee:test repobee --version)
           echo "version=$VERSION" >> $GITHUB_OUTPUT
       - name: Build and push latest
-        uses: docker/build-push-action@v5
+        uses: docker/build-push-action@v6
         with:
           context: .
           push: true
           tags: repobee/repobee:latest
       - name: Build and push release
-        uses: docker/build-push-action@v5
+        uses: docker/build-push-action@v6
         if: ${{ github.event_name == 'release' }}
         with:
           context: .
diff --git a/README.md b/README.md
index dd4b3cc..26802bf 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 [![Code Coverage](https://codecov.io/gh/repobee/repobee/branch/master/graph/badge.svg)](https://codecov.io/gh/repobee/repobee)
 [![Documentation Status](https://readthedocs.org/projects/repobee/badge/?version=stable)](http://repobee.readthedocs.io/en/stable/)
 [![PyPi Version](https://badge.fury.io/py/repobee.svg)](https://badge.fury.io/py/repobee)
-![Supported Python Versions](https://img.shields.io/badge/python-3.9%2C%203.10%2C%203.11-blue.svg)
+![Supported Python Versions](https://img.shields.io/badge/python-3.9%2C%203.10%2C%203.11%2C%203.12%2C%203.13-blue.svg)
 ![Supported Platforms](https://img.shields.io/badge/platforms-Linux%2C%20macOS-blue.svg)
 [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
 [![Code Style: Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
diff --git a/requirements/requirements.txt b/requirements/requirements.txt
index 27d0017..3b0f127 100644
--- a/requirements/requirements.txt
+++ b/requirements/requirements.txt
@@ -1,12 +1,12 @@
 appdirs==1.4.4
-argcomplete==3.4.0
+argcomplete==3.5.1
 bullet==2.2.0
 daiquiri==3.2.5.1
 gitpython==3.1.43
-more-itertools==10.3.0
+more-itertools==10.5.0
 pluggy==1.5.0
-pygithub==2.3.0
-python-gitlab==4.6.0
+pygithub==2.4.0
+python-gitlab==5.0.0
 tabulate==0.9.0
-tqdm==4.66.4
+tqdm==4.66.5
 yamliny==0.0.2
diff --git a/scripts/install.sh b/scripts/install.sh
index 4c00bfb..732ff69 100755
--- a/scripts/install.sh
+++ b/scripts/install.sh
@@ -23,7 +23,7 @@ REPOBEE_COMPLETION="$REPOBEE_INSTALL_DIR/completion"
 REPOBEE_BASH_COMPLETION="$REPOBEE_COMPLETION/bash_completion.sh"
 REGISTER_PYTHON_ARGCOMPLETE="$REPOBEE_INSTALL_DIR/env/bin/register-python-argcomplete"
 
-MIN_PYTHON_VERSION=8
+MIN_PYTHON_VERSION=9
 
 function install() {
     repobee_pip_uri=$1
@@ -95,7 +95,7 @@ function install_repobee() {
 
 function find_python() {
     # Find an appropriate python executable
-    for exec_suffix in "3.11" "3.10" "3.9" "3" ""; do
+    for exec_suffix in "3.13" "3.12" "3.11" "3.10" "3.9" "3" ""; do
         python_exec="python$exec_suffix"
         minor_version=$(get_minor_python3_version "$python_exec")
         if [ "$minor_version" -ge "$MIN_PYTHON_VERSION" ]; then
diff --git a/setup.py b/setup.py
index 6aab98c..6da08a5 100644
--- a/setup.py
+++ b/setup.py
@@ -84,6 +84,8 @@ setup(
         "Programming Language :: Python :: 3.9",
         "Programming Language :: Python :: 3.10",
         "Programming Language :: Python :: 3.11",
+        "Programming Language :: Python :: 3.12",
+        "Programming Language :: Python :: 3.13",
         "Programming Language :: Python :: Implementation :: CPython",
         "License :: OSI Approved :: MIT License",
         "Operating System :: POSIX",


Test patch:
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index a4aca3e..afdbbec 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -20,13 +20,17 @@ jobs:
     strategy:
       matrix:
         os: [ubuntu-latest, macos-latest]
-        python-version: [3.9, '3.10', '3.11']
+        python-version: [3.9, '3.10', '3.11', '3.12', '3.13']
         core-commands-as-plugins: [false]
         exclude:
           - os: macos-latest
             python-version: 3.10
           - os: macos-latest
             python-version: 3.11
+          - os: macos-latest
+            python-version: 3.12
+          - os: macos-latest
+            python-version: 3.13
         include:
           - os: ubuntu-latest
             python-version: 3.9
diff --git a/tests/integration_tests/test_dist.py b/tests/integration_tests/test_dist.py
index 1e46899..aaf77d4 100644
--- a/tests/integration_tests/test_dist.py
+++ b/tests/integration_tests/test_dist.py
@@ -227,7 +227,7 @@ class Hello(plug.Plugin, plug.cli.Command):
         out-of-date.
         """
         # arrange
-        old_pip_version = "20.0.1"
+        old_pip_version = "24.3"
         assert (
             subprocess.run(
                 [