Updated Geomodel 3.0 #170
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 | |
| on: | |
| push: | |
| branches: ["main"] | |
| pull_request: | |
| branches: ["main"] | |
| # Allows you to run this workflow manually from the Actions tab | |
| workflow_dispatch: | |
| # Cancel a running PR check when new commits are pushed, so a wedged run does not | |
| # keep burning runner hours after it has been superseded. Pushes to main still run | |
| # to completion. | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
| jobs: | |
| run-tests: | |
| runs-on: ${{ matrix.os }} | |
| continue-on-error: false | |
| # Backstop for a wedged run: the fork/TensorFlow deadlock hangs in native code | |
| # holding the GIL, which pytest-timeout cannot interrupt in either method, so the | |
| # job-level limit is what stops it. Slowest healthy job is ~32 min; 50 leaves | |
| # headroom while capping a hang's cost. | |
| timeout-minutes: 50 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| [ | |
| ubuntu-24.04, | |
| ubuntu-24.04-arm, | |
| macos-15, | |
| macos-15-intel, | |
| windows-2025, | |
| ] | |
| python-version: ["3.11", "3.12", "3.13", "3.14"] | |
| exclude: | |
| - os: macos-15-intel | |
| python-version: "3.13" # no TF support | |
| - os: macos-15-intel | |
| python-version: "3.14" # no TF / torch x86 macOS wheels | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 2 | |
| - name: Install audio system libs (Linux) | |
| if: startsWith(matrix.os, 'ubuntu') | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libsndfile1 | |
| - name: Install audio system libs (macOS) | |
| if: startsWith(matrix.os, 'macos') | |
| run: | | |
| brew update | |
| brew install libsndfile | |
| - name: Install audio system libs (Windows) | |
| if: startsWith(matrix.os, 'windows') | |
| run: | | |
| choco install libsndfile | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install uv --upgrade | |
| python -m uv pip install --system .[tests] | |
| - name: Run tests py311 | |
| if: matrix.python-version == '3.11' | |
| run: | | |
| python -m tox -e py311 | |
| - name: Run tests py312 | |
| if: matrix.python-version == '3.12' | |
| run: | | |
| python -m tox -e py312 | |
| - name: Run tests py313 | |
| if: matrix.python-version == '3.13' | |
| run: | | |
| python -m tox -e py313 | |
| # TensorFlow has no Python 3.14 wheels yet (issue #55), so 3.14 installs | |
| # without it and only the TensorFlow-free surface (acoustic 3.0 via onnx) | |
| # is exercised here. | |
| - name: Run tests py314 | |
| if: matrix.python-version == '3.14' | |
| run: | | |
| python -m tox -e py314 | |
| - name: Run repro tests | |
| if: matrix.python-version == '3.12' && matrix.os != 'macos-15-intel' | |
| run: | | |
| python -m tox -e py312-repro | |
| - name: Run coverage tests | |
| if: matrix.os == 'ubuntu-24.04' && matrix.python-version == '3.12' | |
| run: | | |
| python -m tox -e py312-coverage | |
| - name: Upload results to Codecov | |
| if: matrix.os == 'ubuntu-24.04' && matrix.python-version == '3.12' | |
| uses: codecov/codecov-action@v6 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| slug: birdnet-team/birdnet | |
| - name: Extract log path | |
| id: extract-log-path | |
| shell: pwsh | |
| run: | | |
| $logPaths = @() | |
| if (Test-Path output.log) { | |
| $output = Get-Content output.log -Raw | |
| $pattern = '(?<path>(?:[A-Za-z]:\\|/)[^\r\n]*?\.log)' | |
| $logPaths = [regex]::Matches($output, $pattern) | | |
| ForEach-Object { $_.Groups['path'].Value } | | |
| Sort-Object -Unique | | |
| Where-Object { Test-Path $_ -PathType Leaf } | |
| } | |
| if ($logPaths.Count -gt 0) { | |
| "log_paths<<EOF" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8 | |
| $logPaths | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8 | |
| "EOF" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8 | |
| } | |
| else { | |
| "log_paths=" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8 | |
| } | |
| - name: Upload log file | |
| if: failure() && steps.extract-log-path.outputs.log_paths != '' | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: birdnet-log | |
| path: ${{ steps.extract-log-path.outputs.log_paths }} |