3535 timeout-minutes : 120
3636 runs-on : >-
3737 ${{ github.repository == 'vortex-data/vortex'
38- && format('runs-on={0}/runner=bench-dedicated/extras=s3-cache/tag={1}', github.run_id, matrix.benchmark.id)
38+ && format('runs-on={0}/runner=bench-dedicated/family=c6id.metal/ extras=s3-cache/tag={1}', github.run_id, matrix.benchmark.id)
3939 || 'ubuntu-latest' }}
4040 strategy :
4141 fail-fast : false
@@ -44,11 +44,17 @@ jobs:
4444 - id : random-access-bench
4545 name : Random Access
4646 build_args : " --features lance"
47- formats : " parquet,lance,vortex "
47+ v4_ingest : true
4848 - id : compress-bench
4949 name : Compression
5050 build_args : " --features lance"
51- formats : " parquet,lance,vortex"
51+ run_args : " --formats parquet,lance,vortex --ingest-jsonl results.ingest.jsonl"
52+ v4_ingest : true
53+ # No run_args: the default suite emits the three tracked metrics
54+ # (size, write, read). The codec microbenchmark is a local diagnostic.
55+ - id : string-bench
56+ name : String Encoding
57+ v4_ingest : false
5258 steps :
5359 - uses : runs-on/action@v2
5460 if : github.repository == 'vortex-data/vortex'
@@ -116,7 +122,8 @@ jobs:
116122 VORTEX_EXPERIMENTAL_PATCHED_ARRAY : " 1"
117123 FLAT_LAYOUT_INLINE_ARRAY_NODE : " 1"
118124 run : |
119- bash scripts/bench-taskset.sh target/release_debug/${{ matrix.benchmark.id }} --formats ${{ matrix.benchmark.formats }} -d gh-json -o results.json --ingest-jsonl results.ingest.jsonl
125+ bash scripts/bench-taskset.sh target/release_debug/${{ matrix.benchmark.id }} \
126+ ${{ matrix.benchmark.run_args }} -d gh-json -o results.json
120127
121128 - name : Setup AWS CLI
122129 uses : aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6
@@ -130,28 +137,30 @@ jobs:
130137 bash scripts/cat-s3.sh vortex-ci-benchmark-results data.json.gz results.json
131138
132139 # v4 (Postgres) ingest -- the REQUIRED benchmark-results pipeline feeding the live
133- # benchmarks website; a failure here fails the job. Gated on the ingest-role ARN var
134- # (the assume-role input that MUST exist for OIDC to succeed). post-ingest.py mints
135- # the RDS IAM token internally (boto3) from the assumed GitHubBenchmarkIngestRole;
136- # sslmode=verify-full validates the cert.
140+ # benchmarks website for suites that emit v4 records; a failure here fails the job.
141+ # All suites also upload S3 results above. string-bench does not emit
142+ # results.ingest.jsonl, so these steps are disabled for it.
143+ # Also gated on the ingest-role ARN var (the assume-role input that MUST exist for
144+ # OIDC to succeed). post-ingest.py mints the RDS IAM token internally (boto3) from
145+ # the assumed GitHubBenchmarkIngestRole; sslmode=verify-full validates the cert.
137146 #
138147 # `sync: false` -- the ingest runs `uv run --no-project --with`, which needs only
139148 # the uv binary, never the synced workspace. A full sync would rebuild
140149 # vortex-python via sccache->S3, which fails under the ingest-role creds
141150 # (rds-db:connect only) and is pure waste here.
142151 - name : Install uv for v4 ingest
143- if : vars.GH_BENCH_INGEST_ROLE_ARN != ''
152+ if : vars.GH_BENCH_INGEST_ROLE_ARN != '' && matrix.benchmark.v4_ingest
144153 uses : spiraldb/actions/.github/actions/setup-uv@a746510eafaa926484c354541cfc49b2ec06cc63 # 0.18.6
145154 with :
146155 sync : false
147156 - name : Configure AWS credentials for v4 ingest (OIDC)
148- if : vars.GH_BENCH_INGEST_ROLE_ARN != ''
157+ if : vars.GH_BENCH_INGEST_ROLE_ARN != '' && matrix.benchmark.v4_ingest
149158 uses : aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6
150159 with :
151160 role-to-assume : ${{ vars.GH_BENCH_INGEST_ROLE_ARN }}
152161 aws-region : ${{ vars.RDS_BENCH_REGION }}
153162 - name : Ingest results to v4 Postgres
154- if : vars.GH_BENCH_INGEST_ROLE_ARN != ''
163+ if : vars.GH_BENCH_INGEST_ROLE_ARN != '' && matrix.benchmark.v4_ingest
155164 shell : bash
156165 env :
157166 RDS_BENCH_INSTANCE_ENDPOINT : ${{ vars.RDS_BENCH_INSTANCE_ENDPOINT }}
0 commit comments