Skip to content

Commit 88deb4e

Browse files
committed
ci: add GitHub Actions validation and benchmarks
1 parent 5b2440c commit 88deb4e

2 files changed

Lines changed: 140 additions & 0 deletions

File tree

.github/workflows/benchmarks.yml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: Benchmarks
2+
3+
on:
4+
pull_request:
5+
workflow_dispatch:
6+
7+
concurrency:
8+
group: benchmarks-${{ github.workflow }}-${{ github.ref }}
9+
cancel-in-progress: true
10+
11+
jobs:
12+
benchmark:
13+
name: Benchmark scripts
14+
runs-on: ubuntu-latest
15+
steps:
16+
- name: Check out repository
17+
uses: actions/checkout@v4
18+
19+
- name: Set up Bun
20+
uses: oven-sh/setup-bun@v2
21+
with:
22+
bun-version: 1.3.10
23+
24+
- name: Install dependencies
25+
run: bun install --frozen-lockfile
26+
27+
- name: Run bootstrap benchmark
28+
run: |
29+
mkdir -p benchmark-results
30+
bun run bench:bootstrap-load | tee benchmark-results/bootstrap-load.txt
31+
32+
- name: Run highlight prefetch benchmark
33+
run: |
34+
bun run bench:highlight-prefetch | tee benchmark-results/highlight-prefetch.txt
35+
36+
- name: Run large stream benchmark
37+
run: |
38+
bun run bench:large-stream | tee benchmark-results/large-stream.txt
39+
40+
- name: Publish benchmark summary
41+
run: |
42+
{
43+
echo '## Benchmark results'
44+
echo
45+
for file in benchmark-results/*.txt; do
46+
echo "### $(basename "$file")"
47+
echo '```text'
48+
cat "$file"
49+
echo '```'
50+
echo
51+
done
52+
} >> "$GITHUB_STEP_SUMMARY"
53+
54+
- name: Upload benchmark artifacts
55+
uses: actions/upload-artifact@v4
56+
with:
57+
name: benchmark-results
58+
path: benchmark-results/*.txt
59+
if-no-files-found: error

.github/workflows/ci.yml

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
pull_request:
8+
9+
concurrency:
10+
group: ci-${{ github.workflow }}-${{ github.ref }}
11+
cancel-in-progress: true
12+
13+
jobs:
14+
validate:
15+
name: Typecheck + tests
16+
runs-on: ubuntu-latest
17+
steps:
18+
- name: Check out repository
19+
uses: actions/checkout@v4
20+
21+
- name: Set up Bun
22+
uses: oven-sh/setup-bun@v2
23+
with:
24+
bun-version: 1.3.10
25+
26+
- name: Install dependencies
27+
run: bun install --frozen-lockfile
28+
29+
- name: Typecheck
30+
run: bun run typecheck
31+
32+
- name: Test suite
33+
run: bun test
34+
35+
tty-smoke:
36+
name: Terminal smoke tests
37+
runs-on: ubuntu-latest
38+
steps:
39+
- name: Check out repository
40+
uses: actions/checkout@v4
41+
42+
- name: Set up Bun
43+
uses: oven-sh/setup-bun@v2
44+
with:
45+
bun-version: 1.3.10
46+
47+
- name: Install dependencies
48+
run: bun install --frozen-lockfile
49+
50+
- name: Verify terminal tools
51+
run: |
52+
command -v script
53+
command -v timeout
54+
55+
- name: TTY smoke tests
56+
run: bun run test:tty-smoke
57+
58+
build-bin:
59+
name: Build compiled binary
60+
runs-on: ubuntu-latest
61+
steps:
62+
- name: Check out repository
63+
uses: actions/checkout@v4
64+
65+
- name: Set up Bun
66+
uses: oven-sh/setup-bun@v2
67+
with:
68+
bun-version: 1.3.10
69+
70+
- name: Install dependencies
71+
run: bun install --frozen-lockfile
72+
73+
- name: Build binary
74+
run: bun run build:bin
75+
76+
- name: Upload binary artifact
77+
uses: actions/upload-artifact@v4
78+
with:
79+
name: hunk-linux-binary
80+
path: dist/hunk
81+
if-no-files-found: error

0 commit comments

Comments
 (0)