CI: add *BSD #13
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI FreeBSD | |
| on: | |
| push: | |
| branches: [ master ] | |
| tags: | |
| - '2.*' | |
| pull_request: | |
| branches: [ master ] | |
| paths: | |
| - '**.py' | |
| - '**.pyx' | |
| - '**.c' | |
| - '**.h' | |
| - '**.yml' | |
| - '**.toml' | |
| - '**.cfg' | |
| - '**.ini' | |
| - 'requirements.d/*' | |
| - '!docs/**' | |
| jobs: | |
| freebsd_tests: | |
| name: FreeBSD tests and build | |
| permissions: | |
| contents: read | |
| id-token: write | |
| attestations: write | |
| runs-on: ubuntu-24.04 | |
| continue-on-error: true | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| - name: Run on FreeBSD | |
| id: freebsd | |
| uses: cross-platform-actions/[email protected] | |
| with: | |
| operating_system: freebsd | |
| version: '14.3' | |
| shell: bash | |
| # Increase resources a bit for building Cython extensions | |
| cpu_count: 3 | |
| memory: 8G | |
| run: | | |
| set -euxo pipefail | |
| # Update package catalog and install dependencies | |
| export IGNORE_OSVERSION=yes | |
| sudo -E pkg update -f | |
| sudo -E pkg install -y xxhash liblz4 zstd pkgconf | |
| sudo -E pkg install -y fusefs-libs || true | |
| sudo -E pkg install -y fusefs-libs3 || true | |
| sudo -E pkg install -y rust | |
| sudo -E pkg install -y git # fakeroot causes lots of troubles on freebsd | |
| sudo -E pkg install -y python310 py310-sqlite3 | |
| sudo -E pkg install -y python311 py311-sqlite3 py311-pip py311-virtualenv | |
| # Ensure python3 and pip point to the chosen version | |
| sudo ln -sf /usr/local/bin/python3.11 /usr/local/bin/python3 || true | |
| sudo ln -sf /usr/local/bin/python3.11 /usr/local/bin/python || true | |
| sudo ln -sf /usr/local/bin/pip3.11 /usr/local/bin/pip3 || true | |
| sudo ln -sf /usr/local/bin/pip3.11 /usr/local/bin/pip || true | |
| # Create and activate venv | |
| python -m venv .venv | |
| . .venv/bin/activate | |
| # Build prerequisites | |
| python -V | |
| pip -V | |
| python -m pip install --upgrade pip wheel | |
| # Install dev requirements and project in editable mode | |
| pip install -r requirements.d/development.txt | |
| pip install -e . | |
| # Run tests (skip benchmarks which are slow on CI) | |
| pytest -v -n auto --benchmark-skip | |
| # Only build PyInstaller binaries for tags | |
| if [[ "${GITHUB_REF:-}" == refs/tags/* ]]; then | |
| python -m pip install 'pyinstaller==6.14.2' | |
| mkdir -p dist/binary | |
| pyinstaller --clean --distpath=dist/binary scripts/borg.exe.spec | |
| # Smoke-test the built binaries and package dir-mode as tarball | |
| 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 | |
| # Prepare artifacts | |
| mkdir -p artifacts | |
| if [ -f dist/binary/borg.exe ]; then | |
| cp -v dist/binary/borg.exe artifacts/borg-freebsd-14-x86_64-gh | |
| fi | |
| if [ -f dist/binary/borg.tgz ]; then | |
| cp -v dist/binary/borg.tgz artifacts/borg-freebsd-14-x86_64-gh.tgz | |
| fi | |
| fi | |
| - name: Upload FreeBSD artifacts | |
| if: startsWith(github.ref, 'refs/tags/') | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: freebsd14-dist | |
| path: artifacts/* | |
| if-no-files-found: ignore | |
| - name: Attest provenance for FreeBSD artifacts | |
| if: startsWith(github.ref, 'refs/tags/') | |
| uses: actions/attest-build-provenance@v3 | |
| with: | |
| subject-path: 'artifacts/*' |