forked from csp-community/csp-benchmarks
-
Notifications
You must be signed in to change notification settings - Fork 0
174 lines (145 loc) · 4.93 KB
/
Copy pathbenchmarks.yaml
File metadata and controls
174 lines (145 loc) · 4.93 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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
name: Benchmarks
on:
# Run on schedule - weekly benchmarks
schedule:
- cron: '0 2 * * 0' # Every Sunday at 2 AM UTC
# Manual trigger with options
workflow_dispatch:
inputs:
use_hetzner:
description: 'Use Hetzner Cloud for benchmarks'
required: false
default: 'true'
type: choice
options:
- 'true'
- 'false'
server_type:
description: 'Hetzner server type'
required: false
default: 'cx23'
type: choice
options:
- 'cx23' # 2 vCPU, 4GB RAM
- 'cx43' # 8 vCPU, 16GB RAM
commit_range:
description: 'Commit range to benchmark (e.g., HEAD~5..HEAD)'
required: false
default: 'HEAD^!'
# Run on pushes to main (for tracking performance over time)
push:
branches:
- main
paths:
- 'csp_benchmarks/benchmarks/**'
- 'csp_benchmarks/asv.conf.json'
concurrency:
group: benchmarks-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: write
pull-requests: write
jobs:
# Quick local benchmarks for PRs
benchmark-local:
if: github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && github.event.inputs.use_hetzner == 'false')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake ninja-build libboost-all-dev
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e ".[develop]"
- name: Configure ASV machine
run: cp csp_benchmarks/asv-machine.json ~/.asv-machine.json
- name: Run quick benchmarks
run: |
python -m asv run --config csp_benchmarks/asv.conf.json --machine github-actions --python=same --quick --verbose
- name: Compare with main
if: github.event_name == 'pull_request'
run: |
python -m asv continuous --config csp_benchmarks/asv.conf.json --verbose main HEAD || true
- name: Generate HTML report
run: python -m asv publish --config csp_benchmarks/asv.conf.json
- name: Upload benchmark results
uses: actions/upload-artifact@v4
with:
name: benchmark-results
path: |
csp_benchmarks/results/
.asv/html/
# Full benchmarks on Hetzner Cloud
benchmark-hetzner:
if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.use_hetzner == 'true') || (github.event_name == 'push' && github.ref == 'refs/heads/main')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e ".[develop,hetzner]"
- name: Set up SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.HETZNER_SSH_PRIVATE_KEY }}" > ~/.ssh/hetzner_key
chmod 600 ~/.ssh/hetzner_key
- name: Run benchmarks on Hetzner
env:
HCLOUD_TOKEN: ${{ secrets.HCLOUD_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python -m csp_benchmarks.hetzner.cli run \
--server-type ${{ github.event.inputs.server_type || 'cx23' }} \
--ssh-key ~/.ssh/hetzner_key \
--commits "${{ github.event.inputs.commit_range || 'HEAD^!' }}" \
--push
- name: Cleanup servers
if: always()
env:
HCLOUD_TOKEN: ${{ secrets.HCLOUD_TOKEN }}
run: |
python -m csp_benchmarks.hetzner.cli cleanup || true
# Publish results to GitHub Pages
publish-results:
needs: [benchmark-hetzner]
if: always() && (needs.benchmark-hetzner.result == 'success' || needs.benchmark-local.result == 'success')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install asv
- name: Pull latest results
run: |
git pull origin main || true
- name: Generate HTML report
run: python -m asv publish --config csp_benchmarks/asv.conf.json
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: .asv/html
destination_dir: benchmarks