123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- name: Build binaries
- on:
- push:
- paths:
- - '**.py'
- - '**.pyx'
- - '**.c'
- - '**.h'
- - '**.yml'
- - '**.toml'
- - '**.cfg'
- - '**.ini'
- - 'requirements.d/*'
- - 'scripts/**'
- pull_request:
- paths:
- - '**.py'
- - '**.pyx'
- - '**.c'
- - '**.h'
- - '**.yml'
- - '**.toml'
- - '**.cfg'
- - '**.ini'
- - 'requirements.d/*'
- - 'scripts/**'
- workflow_dispatch:
- jobs:
- build-binary-macos:
- name: Build (macOS ${{ matrix.os }} / ${{ runner.arch }})
- strategy:
- fail-fast: false
- matrix:
- os: [macos-12, macos-14]
- runs-on: ${{ matrix.os }}
- timeout-minutes: 60
- env:
- # Support both Homebrew locations (Intel and Apple Silicon)
- PKG_CONFIG_PATH: "/opt/homebrew/opt/openssl@3.0/lib/pkgconfig:/usr/local/opt/openssl@3.0/lib/pkgconfig:$PKG_CONFIG_PATH"
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- # Just fetching one commit is not enough for setuptools-scm, so we fetch all
- fetch-depth: 0
- - name: Set up Python 3.11
- uses: actions/setup-python@v5
- with:
- python-version: '3.11'
- - name: Cache pip
- uses: actions/cache@v4
- with:
- path: ~/.cache/pip
- key: ${{ runner.os }}-pip-${{ hashFiles('requirements.d/development.txt') }}
- restore-keys: |
- ${{ runner.os }}-pip-
- ${{ runner.os }}-
- - name: Install macOS packages via Homebrew (see Brewfile)
- run: |
- brew bundle install
- - name: Install Python requirements
- run: |
- python -m pip install --upgrade pip setuptools wheel
- pip install -r requirements.d/development.txt
- - name: Build Borg to compile extensions
- env:
- # Set both paths again to be sure nothing overrides them
- PKG_CONFIG_PATH: "/opt/homebrew/opt/openssl@3.0/lib/pkgconfig:/usr/local/opt/openssl@3.0/lib/pkgconfig:${{ env.PKG_CONFIG_PATH }}"
- run: |
- pip install -ve .
- - name: Build PyInstaller single-file binary
- run: |
- python -m pip install 'pyinstaller==6.7.0'
- mkdir -p dist/binary
- pyinstaller --clean --distpath=dist/binary scripts/borg.exe.spec
- pushd dist/binary
- tar -czvf borg.tgz borg-dir
- rm -rf borg-dir
- popd
- - name: Smoke-test the built binary (borg -V)
- run: |
- pushd dist/binary
- ls -l
- # test single-file binary
- chmod +x borg.exe
- ./borg.exe -V
- # test single-dir binary
- tar -xzvf borg.tgz
- chmod +x borg-dir/borg.exe
- ./borg-dir/borg.exe -V
- popd
- - name: Prepare artifacts
- run: |
- mkdir -p artifacts
- if [ -f dist/binary/borg.exe ]; then
- cp dist/binary/borg.exe artifacts/borg-${{ matrix.os }}-${{ runner.arch }}
- fi
- if [ -f dist/binary/borg.tgz ]; then
- cp dist/binary/borg.tgz artifacts/borg-dir-${{ matrix.os }}-${{ runner.arch }}.tgz
- fi
- - name: Upload artifacts
- uses: actions/upload-artifact@v4
- with:
- name: borg-macos-${{ matrix.os }}-${{ runner.arch }}
- path: artifacts/*
- if-no-files-found: error
|