From dd4ba130664b7af1a161da09c396359eb0fcdf80 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 6 Jun 2026 15:34:05 +0200 Subject: [PATCH 1/2] remove python 3.10 support (master branch), fixes #9707 --- .github/workflows/canary.yml | 4 ++-- .github/workflows/ci.yml | 9 ++++----- Vagrantfile | 1 - docs/installation.rst | 8 ++++---- pyproject.toml | 23 ++++------------------- src/borg/archiver/diff_cmd.py | 2 +- src/borg/archiver/help_cmd.py | 4 ++-- src/borg/archiver/list_cmd.py | 2 +- src/borg/archiver/repo_list_cmd.py | 2 +- 9 files changed, 19 insertions(+), 36 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 5a44d5442..9a58ab443 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -19,8 +19,8 @@ jobs: include: # A representative subset of environments - os: ubuntu-22.04 - python-version: '3.10' - toxenv: py310-llfuse + python-version: '3.11' + toxenv: py311-llfuse - os: ubuntu-24.04 python-version: '3.12' toxenv: py312-pyfuse3 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f7d449984..4cf7d6726 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,7 +48,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v6 with: - python-version: '3.10' + python-version: '3.11' - name: Install dependencies run: | python -m pip install --upgrade pip @@ -141,9 +141,9 @@ jobs: ${{ fromJSON( github.event_name == 'pull_request' && '{ "include": [ - {"os": "ubuntu-22.04", "python-version": "3.10", "toxenv": "mypy"}, + {"os": "ubuntu-22.04", "python-version": "3.11", "toxenv": "mypy"}, {"os": "ubuntu-22.04", "python-version": "3.11", "toxenv": "docs"}, - {"os": "ubuntu-22.04", "python-version": "3.10", "toxenv": "py310-llfuse"}, + {"os": "ubuntu-22.04", "python-version": "3.11", "toxenv": "py311-llfuse"}, {"os": "ubuntu-24.04", "python-version": "3.12", "toxenv": "py312-pyfuse3"}, {"os": "ubuntu-24.04", "python-version": "3.15-dev", "toxenv": "py315-mfusepy"} ] @@ -449,7 +449,6 @@ jobs: sudo -E pkg install -y rust sudo -E pkg install -y gmake sudo -E pkg install -y git - sudo -E pkg install -y python310 py310-sqlite3 sudo -E pkg install -y python311 py311-sqlite3 py311-pip py311-virtualenv sudo ln -sf /usr/local/bin/python3.11 /usr/local/bin/python3 sudo ln -sf /usr/local/bin/python3.11 /usr/local/bin/python @@ -563,7 +562,7 @@ jobs: pkgman install -y git pkgconfig lz4 pkgman install -y openssl3 pkgman install -y rust_bin - pkgman install -y python3.10 + pkgman install -y python3.11 pkgman install -y cffi pkgman install -y lz4_devel openssl3_devel libffi_devel diff --git a/Vagrantfile b/Vagrantfile index b79bb1869..efed7895b 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -43,7 +43,6 @@ def packages_freebsd pkg install -y fusefs-libs3 || true pkg install -y rust pkg install -y git bash # fakeroot causes lots of troubles on freebsd - pkg install -y python310 py310-sqlite3 pkg install -y python311 py311-sqlite3 py311-pip py311-virtualenv # make sure there is a python3/pip3/virtualenv command ln -sf /usr/local/bin/python3.11 /usr/local/bin/python3 diff --git a/docs/installation.rst b/docs/installation.rst index f37609534..62c326098 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -161,7 +161,7 @@ To install Borg from a source package (including pip), you have to install the following dependencies first. For the libraries you will also need their development header files (sometimes in a separate `-dev` or `-devel` package). -* `Python 3`_ >= 3.10.0 +* `Python 3`_ >= 3.11.0 * OpenSSL_ >= 1.1.1 (LibreSSL will not work) * libacl_ (which depends on libattr_) * liblz4_ >= 1.7.0 (r129) @@ -493,9 +493,9 @@ If you need to use a different version of Python you can install this using ``py ... # create a virtual environment - pyenv install 3.10.0 # minimum, preferably use something more recent! - pyenv global 3.10.0 - pyenv local 3.10.0 + pyenv install 3.11.0 # minimum, preferably use something more recent! + pyenv global 3.11.0 + pyenv local 3.11.0 virtualenv --python=${pyenv which python} borg-env source borg-env/bin/activate # always before using! ... diff --git a/pyproject.toml b/pyproject.toml index a4323abf5..f524033cf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ maintainers = [ {name="Thomas Waldmann", email="tw@waldmann-edv.de"}, ] description = "Deduplicated, encrypted, authenticated, and compressed backups" -requires-python = ">=3.10" +requires-python = ">=3.11" keywords = ["backup", "borgbackup"] classifiers = [ "Development Status :: 4 - Beta", @@ -19,7 +19,6 @@ classifiers = [ "Operating System :: POSIX :: Linux", "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", @@ -97,7 +96,7 @@ skip-magic-trailing-comma = true [tool.ruff] line-length = 120 -target-version = "py310" +target-version = "py311" # Exclude a variety of commonly ignored directories. exclude = [ @@ -154,7 +153,7 @@ dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" markers = [] [tool.mypy] -python_version = "3.10" +python_version = "3.11" strict_optional = false local_partial_types = true show_error_codes = true @@ -176,7 +175,7 @@ ignore_missing_imports = true requires = ["tox>=4.19", "pkgconfig", "cython", "wheel", "setuptools_scm"] # Important: when adding/removing Python versions here, # also update the section "Test environments with different FUSE implementations" accordingly. -env_list = ["py{310,311,312,313,314,315}-{none,llfuse,pyfuse3,mfusepy}", "docs", "ruff", "mypy", "bandit"] +env_list = ["py{311,312,313,314,315}-{none,llfuse,pyfuse3,mfusepy}", "docs", "ruff", "mypy", "bandit"] [tool.tox.env_run_base] package = "editable-legacy" # without this it does not find setup_docs when running under fakeroot @@ -188,20 +187,6 @@ pass_env = ["*"] # fakeroot -u needs some env vars pass_env = ["*"] # needed by tox4, so env vars are visible for building borg # Test environments with different FUSE implementations -[tool.tox.env.py310-none] - -[tool.tox.env.py310-llfuse] -set_env = {BORG_FUSE_IMPL = "llfuse"} -extras = ["llfuse", "sftp", "s3", "rclone"] - -[tool.tox.env.py310-pyfuse3] -set_env = {BORG_FUSE_IMPL = "pyfuse3"} -extras = ["pyfuse3", "sftp", "s3", "rclone"] - -[tool.tox.env.py310-mfusepy] -set_env = {BORG_FUSE_IMPL = "mfusepy"} -extras = ["mfusepy", "sftp", "s3", "rclone"] - [tool.tox.env.py311-none] [tool.tox.env.py311-llfuse] diff --git a/src/borg/archiver/diff_cmd.py b/src/borg/archiver/diff_cmd.py index 22d424375..f7d82a593 100644 --- a/src/borg/archiver/diff_cmd.py +++ b/src/borg/archiver/diff_cmd.py @@ -187,7 +187,7 @@ class DiffMixIn: +++++++++++++++++++++++++++ The ``--format`` option uses Python's `format string syntax - `_. + `_. Examples: :: diff --git a/src/borg/archiver/help_cmd.py b/src/borg/archiver/help_cmd.py index b9cb05ff5..69612d514 100644 --- a/src/borg/archiver/help_cmd.py +++ b/src/borg/archiver/help_cmd.py @@ -368,11 +368,11 @@ class HelpMixIn: {now} The current local date and time, by default in ISO-8601 format. - You can also supply your own `format string `_, e.g. {now:%Y-%m-%d_%H:%M:%S} + You can also supply your own `format string `_, e.g. {now:%Y-%m-%d_%H:%M:%S} {utcnow} The current UTC date and time, by default in ISO-8601 format. - You can also supply your own `format string `_, e.g. {utcnow:%Y-%m-%d_%H:%M:%S} + You can also supply your own `format string `_, e.g. {utcnow:%Y-%m-%d_%H:%M:%S} {user} The user name (or UID, if no name is available) of the user running borg. diff --git a/src/borg/archiver/list_cmd.py b/src/borg/archiver/list_cmd.py index 98abd18c3..6fbae8dd6 100644 --- a/src/borg/archiver/list_cmd.py +++ b/src/borg/archiver/list_cmd.py @@ -73,7 +73,7 @@ class ListMixIn: +++++++++++++++++++++++++++ The ``--format`` option uses Python's `format string syntax - `_. + `_. Examples: :: diff --git a/src/borg/archiver/repo_list_cmd.py b/src/borg/archiver/repo_list_cmd.py index 64399288b..3eb228e6d 100644 --- a/src/borg/archiver/repo_list_cmd.py +++ b/src/borg/archiver/repo_list_cmd.py @@ -53,7 +53,7 @@ class RepoListMixIn: +++++++++++++++++++++++++++ The ``--format`` option uses Python's `format string syntax - `_. + `_. Examples: :: From 30ed2bcbfb90b63e9d232c798d9e39d0dc86bfca Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 6 Jun 2026 18:35:36 +0200 Subject: [PATCH 2/2] remove haiku from CI matrix working with r1beta5 (from 2024) is just too much pain. the system packages only have python 3.10. if one install python 3.11 from HaikuPorts, it has no ssl support. if one also installs openssl3 from HaikuPorts, creating a venv fails... also: rust toolchains issues, thread-local storage ("TLS") issues, as seen in #9463. thus: no haiku CI until they release next beta and cross-platform-actions have it. --- .github/workflows/ci.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4cf7d6726..8815c7ca7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -413,11 +413,6 @@ jobs: display_name: OmniOS do_binaries: false - - os: haiku - version: 'r1beta5' - display_name: Haiku - do_binaries: false - steps: - name: Check out repository uses: actions/checkout@v6