-
Notifications
You must be signed in to change notification settings - Fork 1.8k
151 lines (130 loc) · 4.69 KB
/
bench-turborepo.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
name: Benchmark Turborepo
on:
workflow_dispatch:
workflow_run:
# Make sure this matches the name of the workflow in ./github/workflows/turborepo-release.yml.
workflows: [Turborepo Release]
types:
- completed
push:
branches:
- main
paths:
- "cli/**"
- crates/turborepo*/**
# - "benchmark/**" (we don't need to run benchmarks when the benchmark changes, next push will capture it)
jobs:
# benchmark:
# name: Run Benchmarks
# timeout-minutes: 60
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v3
# - uses: ./.github/actions/setup-node
# - uses: ./.github/actions/setup-go
# with:
# github-token: "${{ secrets.GITHUB_TOKEN }}"
# - uses: ./.github/actions/setup-turborepo-environment
# with:
# target: ubuntu-latest
# github-token: "${{ secrets.GITHUB_TOKEN }}"
# - name: Build
# run: cd cli && make turbo-prod
# - name: Run benchmarks
# run: pnpm -F benchmark benchmark
# - name: Save to Tinybird
# run: |
# curl \
# -i \
# -F "ndjson=@./benchmark/tinybird.ndjson" \
# -X POST \
# -H 'Authorization: Bearer ${{ secrets.TINYBIRD_TOKEN }}' \
# 'https://api.us-east.tinybird.co/v0/datasources?format=ndjson&name=turbo_benchmarks&mode=append'
time-to-first-task:
name: Time to First Task
timeout-minutes: 60
runs-on: ${{ matrix.os.runner }}
strategy:
fail-fast: false
matrix:
os:
- name: ubuntu
runner: ubuntu-latest
- name: macos
runner: macos-latest
- name: windows
runner: windows-latest
steps:
- uses: actions/checkout@v3
- name: Set filename for profile
id: filename
shell: bash
run: echo 'filename=benchmark/${{ matrix.os.runner }}.json' >> "$GITHUB_OUTPUT"
- name: Debug filename
shell: bash
run: echo "${{ steps.filename.outputs.filename }}"
- name: Setup Node
uses: ./.github/actions/setup-node
# - name: Setup Go
# uses: ./.github/actions/setup-go
# with:
# github-token: "${{ secrets.GITHUB_TOKEN }}"
# setup Rust on windows, because apparently setup-turborepo-environment doesn't do this
# TODO: put this logic in ./github/actions/setup-rust and use that instead
# - name: Add rustup for windows
# if: ${{ matrix.os.runner == 'windows-latest'}}
# run: rustup target add x86_64-pc-windows-gnu
# - uses: ./.github/actions/setup-turborepo-environment
# with:
# target: ${{ matrix.os.runner }}
# github-token: "${{ secrets.GITHUB_TOKEN }}"
# - name: Build Turborepo from source
# run: cd cli && make turbo-prod
- name: Run benchmarks
shell: bash
run: pnpm -F benchmark ttft "${{ steps.filename.outputs.filename }}"
- name: Upload Artifacts
uses: actions/upload-artifact@v3
with:
name: profile-${{matrix.os.runner}}.json
path: ${{ steps.filename.outputs.filename }}
# Send each of the profiles generated from the previous job to TinyBird
# We'll wait for all profiles to complete before sending.
send-to-tinybird:
needs: [time-to-first-task]
runs-on: ubuntu-latest
env:
TINYBIRD_TOKEN: ${{secrets.TINYBIRD_TOKEN}}
strategy:
fail-fast: false
matrix:
# Note: these look like os, but this matrix is _not_ used for the job's runner.
# It is only used to get each profile's name (which was generated in the previous job)
profile-name:
- name: ubuntu-latest
- name: macos-latest
- name: windows-latest
steps:
- name: Download profiles
uses: actions/download-artifact@v3
with:
path: benchmark/
- name: Debug downloaded artifacts
run: ls -la benchmark/
- name: Process and send to Tinybird
shell: bash
run: |
jq -f benchmark/src/fold.jq < "${{matrix.profile-name}}.json" > benchmark/ttft.json
cat ttft.json
node -r esbuild-register ./src/ttft-send.ts ttft.json ${{github.run_id}}
# # Post results to slack
# post-to-slack:
# needs: [time-to-first-task]
# runs-on: ubuntu-latest
# # TODO: add some actual data to the message using `with: payload` or `with: payload-path`
# # TODO: compare results to previous data and only post regressions
# steps:
# - name: Post To Slack
# uses: slackapi/[email protected]
# env:
# SLACK_WEBHOOK_URL: "${{ secrets.TURBOREPO_PERF_BENCHMARK_SLACK_WEBHOOK_URL }}"