-
-
Notifications
You must be signed in to change notification settings - Fork 525
161 lines (141 loc) · 5.08 KB
/
benchmark.yml
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
# Benchmarks are sharded.
#
# Each benchmark (parser, transformer, etc) runs in parallel in a separate job.
# Linter benchmarks are much slower to build and run than the rest, so linter benchmark
# is built in 1 job, and then run on each fixture in parallel in separate jobs.
#
# See https://docs.codspeed.io/features/sharded-benchmarks
name: Benchmark
permissions: {}
on:
workflow_dispatch:
pull_request:
types: [opened, synchronize]
paths:
- "crates/**/*.rs"
- "tasks/benchmark/**/*.rs"
- "tasks/common/**/*.rs"
- "Cargo.lock"
- "rust-toolchain.toml"
- ".github/workflows/benchmark.yml"
- "tasks/benchmark/codspeed/*.mjs"
push:
branches:
- main
paths:
- "crates/**/*.rs"
- "tasks/benchmark/**/*.rs"
- "tasks/common/**/*.rs"
- "Cargo.lock"
- "rust-toolchain.toml"
- ".github/workflows/benchmark.yml"
- "tasks/benchmark/codspeed/*.mjs"
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
# Build and run benchmarks for all components except linter
benchmark:
name: Benchmark
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
component:
- lexer
- parser
- transformer
- isolated_declarations
- semantic
- minifier
- codegen
steps:
- name: Checkout Branch
uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0
with:
cache-key: benchmark-${{ matrix.component }}
save-cache: ${{ github.ref_name == 'main' }}
tools: cargo-codspeed
- name: Build benchmark
env:
RUSTFLAGS: "-C debuginfo=1 -C strip=none -g --cfg codspeed"
run: |
cargo build --release -p oxc_benchmark --bench ${{ matrix.component }} \
--no-default-features --features ${{ matrix.component }} --features codspeed
mkdir -p target/codspeed/instrumentation/oxc_benchmark
mv target/release/deps/${{ matrix.component }}-* target/codspeed/instrumentation/oxc_benchmark
rm target/codspeed/instrumentation/oxc_benchmark/*.d
- name: Run benchmark
uses: CodSpeedHQ/action@63ae6025a0ffee97d7736a37c9192dbd6ed4e75f # v3.4.0
timeout-minutes: 30
with:
token: ${{ secrets.CODSPEED_TOKEN }}
run: cargo codspeed run
# Build linter benchmark.
# Linter benchmarks are much slower than the rest, so we run each fixture in a separate job.
# But only build the linter benchmark once.
build-linter:
name: Build Linter Benchmark
runs-on: ubuntu-latest
steps:
- name: Checkout Branch
uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0
with:
cache-key: benchmark-linter
save-cache: ${{ github.ref_name == 'main' }}
- name: Build benchmark
env:
RUSTFLAGS: "-C debuginfo=1 -C strip=none -g --cfg codspeed"
run: |
cargo build --release -p oxc_benchmark --bench linter \
--no-default-features --features linter --features codspeed
mkdir -p target/codspeed/instrumentation/oxc_benchmark
mv target/release/deps/linter-* target/codspeed/instrumentation/oxc_benchmark
rm target/codspeed/instrumentation/oxc_benchmark/*.d
- name: Upload Binary
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
with:
if-no-files-found: error
name: benchmark-linter
path: ./target/codspeed/instrumentation/oxc_benchmark
retention-days: 1
# Run linter benchmarks. Each fixture in a separate job.
benchmark-linter:
name: Benchmark linter
needs: build-linter
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
fixture:
- 0
- 1
steps:
- name: Checkout Branch
uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1
- name: Download Binary
uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9
with:
name: benchmark-linter
path: ./target/codspeed/instrumentation/oxc_benchmark
- name: Fix permission loss
run: |
ls ./target/codspeed/instrumentation/oxc_benchmark
chmod +x ./target/codspeed/instrumentation/oxc_benchmark/*
- name: Install codspeed
uses: taiki-e/install-action@f87f9990b09867202953bff9aa0c80e23ee16bb7 # v2.49.18
with:
tool: cargo-codspeed
- name: Run benchmark
uses: CodSpeedHQ/action@63ae6025a0ffee97d7736a37c9192dbd6ed4e75f # v3.4.0
timeout-minutes: 30
env:
FIXTURE: ${{ matrix.fixture }}
with:
token: ${{ secrets.CODSPEED_TOKEN }}
run: cargo codspeed run