From 6cf7dfdf6db46e0e9b94df0ddf391d068bc6cd0b Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 27 Jul 2026 21:56:46 +0200 Subject: [PATCH] CI: fix deprecation warnings - lint: bump astral-sh/ruff-action v3 -> v4.1.0. v3 runs on node20, which is deprecated and force-run on node24 now. v4 natively targets node24. No change in ruff version resolution. v4 uses immutable releases and publishes no floating major tag, so the exact version has to be pinned. - vm_tests: stop using the deprecated "run" input of cross-platform-actions/action. Split the step into a "Start VM" step and a test step that uses the custom shell (shell: cpa.sh {0}), as recommended by the action. File sync (runner->vm before, vm->runner after) happens automatically, so the artifact / test-results.xml / coverage.xml uploads keep working. Co-Authored-By: Claude Opus 5 --- .github/workflows/ci.yml | 317 ++++++++++++++++++++------------------- 1 file changed, 160 insertions(+), 157 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 947a1e8c85..0ceaa1da00 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,7 +36,7 @@ jobs: steps: - uses: actions/checkout@v7 - - uses: astral-sh/ruff-action@v3 + - uses: astral-sh/ruff-action@v4.1.0 security: @@ -424,169 +424,172 @@ jobs: fetch-depth: 0 fetch-tags: true - - name: Test on ${{ matrix.display_name }} + - name: Start VM for ${{ matrix.display_name }} id: cross_os uses: cross-platform-actions/action@v1.3.0 - env: - DO_BINARIES: ${{ matrix.do_binaries }} with: operating_system: ${{ matrix.os }} version: ${{ matrix.version }} shell: bash - run: | - set -euxo pipefail - - case "${{ matrix.os }}" in - freebsd) - export IGNORE_OSVERSION=yes - sudo -E pkg update -f - sudo -E pkg install -y liblz4 pkgconf - 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 - sudo -E pkg install -y python314 py314-sqlite3 - sudo ln -sf /usr/local/bin/python3.14 /usr/local/bin/python3 - sudo ln -sf /usr/local/bin/python3.14 /usr/local/bin/python - sudo ln -sf /usr/local/bin/pip3.14 /usr/local/bin/pip3 - sudo ln -sf /usr/local/bin/pip3.14 /usr/local/bin/pip - - # required for libsodium/pynacl build - export MAKE=gmake - - python -m venv .venv - . .venv/bin/activate - python -V - pip -V - python -m pip install --upgrade pip wheel - pip install -r requirements.d/development.lock.txt - pip install -e ".[mfusepy,cockpit,s3,sftp,rclone]" - if [[ "${{ matrix.do_binaries }}" == "true" && "${{ startsWith(github.ref, 'refs/tags/') }}" == "true" ]]; then - python -m pip install -r requirements.d/pyinstaller.txt - ./scripts/build-borg-using-pyinstaller.sh - pushd dist/binary - echo "single-file binary" - chmod +x borg.exe - ./borg.exe -V - echo "single-directory binary" - chmod +x borg-dir/borg.exe - ./borg-dir/borg.exe -V - tar czf borg.tgz borg-dir - popd - mkdir -p artifacts - if [ -f dist/binary/borg.exe ]; then - cp -v dist/binary/borg.exe artifacts/${{ matrix.artifact_prefix }} - fi - if [ -f dist/binary/borg.tgz ]; then - cp -v dist/binary/borg.tgz artifacts/${{ matrix.artifact_prefix }}.tgz - fi + + - name: Test on ${{ matrix.display_name }} + shell: cpa.sh {0} + env: + DO_BINARIES: ${{ matrix.do_binaries }} + run: | + set -euxo pipefail + + case "${{ matrix.os }}" in + freebsd) + export IGNORE_OSVERSION=yes + sudo -E pkg update -f + sudo -E pkg install -y liblz4 pkgconf + 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 + sudo -E pkg install -y python314 py314-sqlite3 + sudo ln -sf /usr/local/bin/python3.14 /usr/local/bin/python3 + sudo ln -sf /usr/local/bin/python3.14 /usr/local/bin/python + sudo ln -sf /usr/local/bin/pip3.14 /usr/local/bin/pip3 + sudo ln -sf /usr/local/bin/pip3.14 /usr/local/bin/pip + + # required for libsodium/pynacl build + export MAKE=gmake + + python -m venv .venv + . .venv/bin/activate + python -V + pip -V + python -m pip install --upgrade pip wheel + pip install -r requirements.d/development.lock.txt + pip install -e ".[mfusepy,cockpit,s3,sftp,rclone]" + if [[ "${{ matrix.do_binaries }}" == "true" && "${{ startsWith(github.ref, 'refs/tags/') }}" == "true" ]]; then + python -m pip install -r requirements.d/pyinstaller.txt + ./scripts/build-borg-using-pyinstaller.sh + pushd dist/binary + echo "single-file binary" + chmod +x borg.exe + ./borg.exe -V + echo "single-directory binary" + chmod +x borg-dir/borg.exe + ./borg-dir/borg.exe -V + tar czf borg.tgz borg-dir + popd + mkdir -p artifacts + if [ -f dist/binary/borg.exe ]; then + cp -v dist/binary/borg.exe artifacts/${{ matrix.artifact_prefix }} + fi + if [ -f dist/binary/borg.tgz ]; then + cp -v dist/binary/borg.tgz artifacts/${{ matrix.artifact_prefix }}.tgz fi - export PATH="$(pwd)/dist/binary:$PATH" - tox -e py314-mfusepy - ;; - - netbsd) - arch="$(uname -m)" - sudo -E mkdir -p /usr/pkg/etc/pkgin - echo "https://ftp.NetBSD.org/pub/pkgsrc/packages/NetBSD/${arch}/10.1/All" | sudo tee /usr/pkg/etc/pkgin/repositories.conf > /dev/null - sudo -E pkgin update - sudo -E pkgin -y upgrade - sudo -E pkgin -y install lz4 git - sudo -E pkgin -y install rust - sudo -E pkgin -y install pkg-config - sudo -E pkgin -y install py311-pip py311-virtualenv py311-tox - sudo -E ln -sf /usr/pkg/bin/python3.11 /usr/pkg/bin/python3 - sudo -E ln -sf /usr/pkg/bin/pip3.11 /usr/pkg/bin/pip3 - sudo -E ln -sf /usr/pkg/bin/virtualenv-3.11 /usr/pkg/bin/virtualenv3 - sudo -E ln -sf /usr/pkg/bin/tox-3.11 /usr/pkg/bin/tox3 - - # Ensure base system admin tools are on PATH for the non-root shell - export PATH="/sbin:/usr/sbin:$PATH" - - echo "--- Preparing an extattr-enabled filesystem ---" - # On many NetBSD setups /tmp is tmpfs without extended attributes. - # Create a FFS image with extended attributes enabled and use it for TMPDIR. - VNDDEV="vnd0" - IMGFILE="/tmp/fs.img" - sudo -E dd if=/dev/zero of=${IMGFILE} bs=1m count=1024 - sudo -E vndconfig -c "${VNDDEV}" "${IMGFILE}" - sudo -E newfs -O 2ea /dev/r${VNDDEV}a - MNT="/mnt/eafs" - sudo -E mkdir -p ${MNT} - sudo -E mount -t ffs -o extattr /dev/${VNDDEV}a $MNT - export TMPDIR="${MNT}/tmp" - sudo -E mkdir -p ${TMPDIR} - sudo -E chmod 1777 ${TMPDIR} - - touch ${TMPDIR}/testfile - lsextattr user ${TMPDIR}/testfile && echo "[xattr] *** xattrs SUPPORTED on ${TMPDIR}! ***" - - tox3 -e py311-none - ;; - - openbsd) - sudo -E pkg_add lz4 git - sudo -E pkg_add rust - sudo -E pkg_add openssl%3.5 - sudo -E pkg_add py3-pip py3-virtualenv py3-tox - - export BORG_OPENSSL_NAME=eopenssl35 - tox -e py312-none - ;; - - omnios) - sudo pkg install gcc14 git pkg-config python-313 gnu-make gnu-coreutils rust - sudo ln -sf /usr/bin/python3.13 /usr/bin/python3 - sudo ln -sf /usr/bin/python3.13-config /usr/bin/python3-config - sudo python3 -m ensurepip - sudo python3 -m pip install virtualenv - - # On omniOS /tmp is swap-backed tmpfs (small, RAM-bound), so the pip/cargo - # build temps and the pytest temp tree quickly exhaust it ("no space left on - # device"). /var/tmp is disk-backed (ZFS), so redirect TMPDIR there. - export TMPDIR=/var/tmp/borg-ci - mkdir -p "$TMPDIR" - - python3 -m venv .venv - . .venv/bin/activate - python -V - pip -V - python -m pip install --upgrade pip wheel - pip install -r requirements.d/development.lock.txt - # no fuse support on omnios in our tests usually - pip install -e . - - tox -e py313-none - ;; - - haiku) - pkgman refresh - pkgman install -y git pkgconfig lz4 - pkgman install -y openssl3 - pkgman install -y rust_bin - pkgman install -y python3.11 - pkgman install -y cffi - pkgman install -y lz4_devel openssl3_devel libffi_devel - - # there is no pkgman package for tox, so we install it into a venv - python3 -m ensurepip --upgrade - python3 -m pip install --upgrade pip wheel - python3 -m venv .venv - . .venv/bin/activate - - export PKG_CONFIG_PATH="/system/develop/lib/pkgconfig:/system/lib/pkgconfig:${PKG_CONFIG_PATH:-}" - export BORG_LIBLZ4_PREFIX=/system/develop - export BORG_OPENSSL_PREFIX=/system/develop - pip install -r requirements.d/development.lock.txt - pip install -e . - - # troubles with either tox or pytest xdist, so we run pytest manually: - pytest -v -n auto -rs --cov=borg --cov-config=pyproject.toml --cov-report=xml --junitxml=test-results.xml --benchmark-skip -k "not remote and not socket" - ;; - esac + fi + export PATH="$(pwd)/dist/binary:$PATH" + tox -e py314-mfusepy + ;; + + netbsd) + arch="$(uname -m)" + sudo -E mkdir -p /usr/pkg/etc/pkgin + echo "https://ftp.NetBSD.org/pub/pkgsrc/packages/NetBSD/${arch}/10.1/All" | sudo tee /usr/pkg/etc/pkgin/repositories.conf > /dev/null + sudo -E pkgin update + sudo -E pkgin -y upgrade + sudo -E pkgin -y install lz4 git + sudo -E pkgin -y install rust + sudo -E pkgin -y install pkg-config + sudo -E pkgin -y install py311-pip py311-virtualenv py311-tox + sudo -E ln -sf /usr/pkg/bin/python3.11 /usr/pkg/bin/python3 + sudo -E ln -sf /usr/pkg/bin/pip3.11 /usr/pkg/bin/pip3 + sudo -E ln -sf /usr/pkg/bin/virtualenv-3.11 /usr/pkg/bin/virtualenv3 + sudo -E ln -sf /usr/pkg/bin/tox-3.11 /usr/pkg/bin/tox3 + + # Ensure base system admin tools are on PATH for the non-root shell + export PATH="/sbin:/usr/sbin:$PATH" + + echo "--- Preparing an extattr-enabled filesystem ---" + # On many NetBSD setups /tmp is tmpfs without extended attributes. + # Create a FFS image with extended attributes enabled and use it for TMPDIR. + VNDDEV="vnd0" + IMGFILE="/tmp/fs.img" + sudo -E dd if=/dev/zero of=${IMGFILE} bs=1m count=1024 + sudo -E vndconfig -c "${VNDDEV}" "${IMGFILE}" + sudo -E newfs -O 2ea /dev/r${VNDDEV}a + MNT="/mnt/eafs" + sudo -E mkdir -p ${MNT} + sudo -E mount -t ffs -o extattr /dev/${VNDDEV}a $MNT + export TMPDIR="${MNT}/tmp" + sudo -E mkdir -p ${TMPDIR} + sudo -E chmod 1777 ${TMPDIR} + + touch ${TMPDIR}/testfile + lsextattr user ${TMPDIR}/testfile && echo "[xattr] *** xattrs SUPPORTED on ${TMPDIR}! ***" + + tox3 -e py311-none + ;; + + openbsd) + sudo -E pkg_add lz4 git + sudo -E pkg_add rust + sudo -E pkg_add openssl%3.5 + sudo -E pkg_add py3-pip py3-virtualenv py3-tox + + export BORG_OPENSSL_NAME=eopenssl35 + tox -e py312-none + ;; + + omnios) + sudo pkg install gcc14 git pkg-config python-313 gnu-make gnu-coreutils rust + sudo ln -sf /usr/bin/python3.13 /usr/bin/python3 + sudo ln -sf /usr/bin/python3.13-config /usr/bin/python3-config + sudo python3 -m ensurepip + sudo python3 -m pip install virtualenv + + # On omniOS /tmp is swap-backed tmpfs (small, RAM-bound), so the pip/cargo + # build temps and the pytest temp tree quickly exhaust it ("no space left on + # device"). /var/tmp is disk-backed (ZFS), so redirect TMPDIR there. + export TMPDIR=/var/tmp/borg-ci + mkdir -p "$TMPDIR" + + python3 -m venv .venv + . .venv/bin/activate + python -V + pip -V + python -m pip install --upgrade pip wheel + pip install -r requirements.d/development.lock.txt + # no fuse support on omnios in our tests usually + pip install -e . + + tox -e py313-none + ;; + + haiku) + pkgman refresh + pkgman install -y git pkgconfig lz4 + pkgman install -y openssl3 + pkgman install -y rust_bin + pkgman install -y python3.11 + pkgman install -y cffi + pkgman install -y lz4_devel openssl3_devel libffi_devel + + # there is no pkgman package for tox, so we install it into a venv + python3 -m ensurepip --upgrade + python3 -m pip install --upgrade pip wheel + python3 -m venv .venv + . .venv/bin/activate + + export PKG_CONFIG_PATH="/system/develop/lib/pkgconfig:/system/lib/pkgconfig:${PKG_CONFIG_PATH:-}" + export BORG_LIBLZ4_PREFIX=/system/develop + export BORG_OPENSSL_PREFIX=/system/develop + pip install -r requirements.d/development.lock.txt + pip install -e . + + # troubles with either tox or pytest xdist, so we run pytest manually: + pytest -v -n auto -rs --cov=borg --cov-config=pyproject.toml --cov-report=xml --junitxml=test-results.xml --benchmark-skip -k "not remote and not socket" + ;; + esac - name: Upload artifacts if: startsWith(github.ref, 'refs/tags/') && matrix.do_binaries