Repository navigation
163 lines (155 loc) · 4.87 KB
/
Copy pathci.yml
File metadata and controls
163 lines (155 loc) · 4.87 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
name: CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
rust:
runs-on: ubuntu-latest
env:
BUNDLE_WITH: test
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- uses: Swatinem/rust-cache@v2
- run: cargo fmt --all -- --check
- run: cargo clippy --workspace --all-targets -- -D warnings
- run: cargo test --workspace --lib
- run: cargo doc --no-deps --workspace
env:
RUSTDOCFLAGS: -D warnings
- run: bundle exec rake check:worker_boundary
- run: bundle exec rake check:changelog
# Model checking explores thread interleavings, so it runs on its own with the
# loom cfg rather than as part of the normal test job.
loom:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
key: loom
- run: cargo test --lib loom_tests
env:
RUSTFLAGS: --cfg loom
rails:
runs-on: ubuntu-latest
timeout-minutes: 30
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: bench
POSTGRES_PASSWORD: bench
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 5s
--health-timeout 5s
--health-retries 10
env:
BUNDLE_WITH: test
RUVOY_RAILS_DATABASE_URL: postgres://bench:bench@127.0.0.1/ruvoy_rails_app
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
key: rails
- uses: astral-sh/setup-uv@v6
- run: bundle install
env:
BUNDLE_GEMFILE: ${{ github.workspace }}/test/fixtures/rails_app/Gemfile
BUNDLE_PATH: ${{ github.workspace }}/vendor/bundle
- run: bundle exec rake e2e:rails_app
ruby:
runs-on: ubuntu-latest
# RuboCop lives in an optional group, so every step has to opt into it.
env:
BUNDLE_WITH: lint test
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- run: bundle exec rubocop
- run: ruby -c ruby/*.rb crates/*/ruby/*.rb
# Turns raw measurements into every number this project publishes.
- run: bundle exec rake e2e:summarize
# The whole installed interface.
- run: bundle exec rake e2e:cli
# The real proxy, on the only platform Ruvoy targets. Two suites were silently
# broken for weeks because nothing but a developer's machine ever ran them.
e2e:
runs-on: ubuntu-latest
timeout-minutes: 30
env:
BUNDLE_WITH: test
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
key: e2e
- uses: astral-sh/setup-uv@v6
- run: bundle exec rake tools:oha
- run: bundle exec rake e2e:envoy_fiber_rack
- run: bundle exec rake e2e:fiber_backpressure
- run: bundle exec rake e2e:response_streaming
- run: bundle exec rake e2e:rack_compatibility
- run: bundle exec rake e2e:config_lifecycle
- run: bundle exec rake e2e:process_runtime
- run: bundle exec rake e2e:envoy_sync_rack
- run: bundle exec rake e2e:fiber_runtime
- run: bundle exec rake e2e:fiber_memory
- run: bundle exec rake e2e:envoy_extensions
- run: bundle exec rake e2e:fiber_offload
- run: bundle exec rake e2e:soak
# What the suites measured, on the run's own page: a pass says nothing
# about how much slack the numbers had.
- if: always()
run: |
{
echo '## Measurements'
echo '```'
for file in .agents/results/*/summary.log .agents/results/*/waves.tsv; do
[ -e "$file" ] || continue
echo "# $(basename "$(dirname "$file")")/$(basename "$file")"
cat "$file"
echo
done
echo '```'
} >> "$GITHUB_STEP_SUMMARY"
- if: always()
uses: actions/upload-artifact@v4
with:
name: e2e-results
path: .agents/results/
retention-days: 7