Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 42 additions & 26 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,16 +149,17 @@ jobs:
{"os": "ubuntu-24.04", "python-version": "3.12", "toxenv": "py312-fuse3"},
{"os": "ubuntu-24.04", "python-version": "3.13", "toxenv": "py313-fuse3"},
{"os": "ubuntu-24.04", "python-version": "3.14", "toxenv": "py314-fuse3"},
{"os": "macos-13", "python-version": "3.11", "toxenv": "py311-none", "binary": "borg-macos-13-x86_64-gh"},
{"os": "macos-14", "python-version": "3.11", "toxenv": "py311-none", "binary": "borg-macos-14-arm64-gh"}
{"os": "macos-15", "python-version": "3.11", "toxenv": "py311-none", "binary": "borg-macos-15-x86_64-gh"},
{"os": "macos-15", "python-version": "3.11", "toxenv": "py311-none", "binary": "borg-macos-15-arm64-gh"}
]
}'
) }}
env:
TOXENV: ${{ matrix.toxenv }}

runs-on: ${{ matrix.os }}
timeout-minutes: 120
# macOS machines can be slow, if overloaded.
timeout-minutes: 360

steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -187,10 +188,13 @@ jobs:
sudo apt-get update
sudo apt-get install -y pkg-config build-essential
sudo apt-get install -y libssl-dev libacl1-dev libxxhash-dev liblz4-dev libzstd-dev
sudo apt-get install -y libfuse-dev fuse || true # Required for Python llfuse module
sudo apt-get install -y libfuse3-dev fuse3 || true # Required for Python pyfuse3 module
sudo apt-get install -y bash zsh fish # for shell completion tests
sudo apt-get install -y rclone openssh-server curl
if [[ "$TOXENV" == *"fuse2"* ]]; then
sudo apt-get install -y libfuse-dev fuse # Required for Python llfuse module
elif [[ "$TOXENV" == *"fuse3"* ]]; then
sudo apt-get install -y libfuse3-dev fuse3 # Required for Python pyfuse3 module
fi

- name: Install macOS packages
if: ${{ runner.os == 'macOS' }}
Expand Down Expand Up @@ -262,28 +266,21 @@ jobs:

- name: Install borgbackup
run: |
pip install -e .

- name: run tox env
run: |
# do not use fakeroot, but run as root. avoids the dreaded EISDIR sporadic failures. see #2482.
#sudo -E bash -c "tox -e py"
tox --skip-missing-interpreters

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
env:
OS: ${{ runner.os }}
python: ${{ matrix.python-version }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
env_vars: OS, python
if [[ "$TOXENV" == *"fuse2"* ]]; then
pip install -ve ".[llfuse]"
elif [[ "$TOXENV" == *"fuse3"* ]]; then
pip install -ve ".[pyfuse3]"
else
pip install -ve .
fi

- name: Build Borg fat binaries (${{ matrix.binary }})
if: ${{ matrix.binary && startsWith(github.ref, 'refs/tags/') }}
run: |
pip install 'pyinstaller==6.14.2'
mkdir -p dist/binary
# Ensure locally built binaries in ./dist/binary are found during tox tests
echo "$GITHUB_WORKSPACE/dist/binary" >> "$GITHUB_PATH"
pyinstaller --clean --distpath=dist/binary scripts/borg.exe.spec

- name: Smoke-test the built binary (${{ matrix.binary }})
Expand All @@ -298,6 +295,8 @@ jobs:
./borg-dir/borg.exe -V
tar czf borg.tgz borg-dir
popd
echo "borg.exe binary in PATH"
borg.exe -V

- name: Prepare binaries (${{ matrix.binary }})
if: ${{ matrix.binary && startsWith(github.ref, 'refs/tags/') }}
Expand Down Expand Up @@ -326,6 +325,21 @@ jobs:
path: artifacts/*
if-no-files-found: error

- name: run tox env
run: |
# do not use fakeroot, but run as root. avoids the dreaded EISDIR sporadic failures. see #2482.
#sudo -E bash -c "tox -e py"
tox --skip-missing-interpreters

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
env:
OS: ${{ runner.os }}
python: ${{ matrix.python-version }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
env_vars: OS, python

vm_tests:
permissions:
contents: read
Expand Down Expand Up @@ -386,8 +400,10 @@ jobs:
export IGNORE_OSVERSION=yes
sudo -E pkg update -f
sudo -E pkg install -y xxhash liblz4 zstd pkgconf
# Install one of the FUSE libraries; fail if neither is available
sudo -E pkg install -y fusefs-libs || sudo -E pkg install -y fusefs-libs3
sudo -E pkg install -y fusefs-libs
sudo -E kldload fusefs
sudo -E sysctl vfs.usermount=1
sudo -E chmod 666 /dev/fuse
sudo -E pkg install -y rust
sudo -E pkg install -y gmake
sudo -E pkg install -y git
Expand All @@ -407,8 +423,8 @@ jobs:
pip -V
python -m pip install --upgrade pip wheel
pip install -r requirements.d/development.txt
pip install -e .
tox -e py311-none
pip install -e ".[llfuse]"
tox -e py311-fuse2

if [[ "${{ matrix.do_binaries }}" == "true" && "${{ startsWith(github.ref, 'refs/tags/') }}" == "true" ]]; then
python -m pip install 'pyinstaller==6.14.2'
Expand Down Expand Up @@ -514,7 +530,7 @@ jobs:
if: startsWith(github.ref, 'refs/tags/') && matrix.do_binaries
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }}-${{ matrix.version }}-dist
name: ${{ matrix.artifact_prefix }}
path: artifacts/*
if-no-files-found: ignore

Expand Down
9 changes: 3 additions & 6 deletions docs/binaries/00_README.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,16 @@ Binaries built on GitHub servers
borg-linux-glibc235-x86_64-gh Linux AMD/Intel (built on Ubuntu 22.04 LTS with glibc 2.35)
borg-linux-glibc235-arm64-gh Linux ARM (built on Ubuntu 22.04 LTS with glibc 2.35)

borg-macos-14-arm64-gh macOS Apple Silicon (built on macOS 14 w/o FUSE support)
borg-macos-13-x86_64-gh macOS Intel (built on macOS 13 w/o FUSE support)
borg-macos-15-arm64-gh macOS Apple Silicon (built on macOS 15 w/o FUSE support)
borg-macos-15-x86_64-gh macOS Intel (built on macOS 15 w/o FUSE support)

borg-freebsd-14-x86_64-gh FreeBSD AMD/Intel (built on FreeBSD 14)

Binaries built locally
~~~~~~~~~~~~~~~~~~~~~~

borg-linux-glibc241-x86_64 Linux (built on Debian 13 "Trixie" with glibc 2.41)
borg-linux-glibc236-x86_64 Linux (built on Debian 12 "Bookworm" with glibc 2.36)
borg-linux-glibc231-x86_64 Linux (built on Debian 11 "Bullseye" with glibc 2.31)

borg-freebsd-14-x86_64 FreeBSD (built on FreeBSD 14)

Note: if you don't find a specific binary here, check release 1.4.1 or 1.2.9.

Verifying your download
Expand Down
Loading