-
Notifications
You must be signed in to change notification settings - Fork 17
140 lines (118 loc) · 4.2 KB
/
Copy pathci.yml
File metadata and controls
140 lines (118 loc) · 4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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"]
exclude:
- os: macos-15-intel
python-version: "3.13" # no TF support
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
- 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 }}