Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
4724b9e
Run TPC-DS SF=10 on NVMe in the PR SQL benchmarks (#11194)
joseph-isaacs Nov 4, 2026
9c3cbbb
Store plan children in fixed-position slots (#11178)
joseph-isaacs Nov 4, 2026
a3238df
Return an error for decimal scalars outside the precision (#10767)
ump45nose Nov 4, 2026
93ab9aa
Remove x8g from benchmark runner instance families (#11199)
robert3005 Nov 4, 2026
d5271f9
Display dates beyond jiff's range without panicking (#11187)
connortsui20 Nov 4, 2026
956c1ea
Reject nullable nested levels in list-based spatial types (#11183)
connortsui20 Nov 4, 2026
0151998
refactor(cuda): slice mutable views through one implementation (#10880)
0ax1 Nov 4, 2026
a52afdb
docs(cuda): clarify mapped-page eviction (#10882)
0ax1 Nov 4, 2026
89af043
test(cuda): encode ALP test inputs with the test's own context (#10881)
0ax1 Nov 4, 2026
531d126
refactor(cuda): avoid access tracking for address-only lookups (#10884)
0ax1 Nov 4, 2026
a10a0e0
Expose the existing footer segment end offset (#11196)
brancz Nov 4, 2026
58ceb89
Add shared conversion to canonical decimal arrays or Widen (#11005)
connortsui20 Nov 4, 2026
db0c25f
Optimize arrays bottom up and as execution reaches them (#11090)
robert3005 Nov 4, 2026
5605eab
Execute filter scalar fns' inputs iteratively with execute_step (#11154)
joseph-isaacs Nov 4, 2026
e390693
Replace layout lowering with a VTable::new_plan method (#11200)
joseph-isaacs Nov 4, 2026
463d203
Balance CodSpeed simulation shards by runtime (#11180)
connortsui20 Nov 4, 2026
fdd96d0
Faster Spark reads and smaller JNI and stats fixes (#11109)
robert3005 Nov 4, 2026
c9a3fbe
Drop null patch elements when sparse lists share their elements (#11182)
mhk197 Nov 4, 2026
0e8442b
ci(bench): revalidate the benchmarks website once per develop push (#…
lwwmanning Nov 4, 2026
8b01ab5
Peel Arrow dictionaries before Arrow importer plugins run (#11185)
connortsui20 Nov 4, 2026
8dcf8d3
Count each run's selected rows with one pass over the RunEnd filter m…
joseph-isaacs Nov 4, 2026
8863f85
Avoid allocating Vec of chunks just to copy it in ChunkedArray constr…
robert3005 Nov 4, 2026
141abdc
perf(fastlanes): push FoR ordering comparisons to the encoded values …
robert3005 Nov 4, 2026
bf3cfd0
perf(spark): split large files into row ranges (#11118)
gitRasheed Nov 4, 2026
e42a7b5
Property-based tests for Mask (#11167)
myrrc Nov 4, 2026
d2bb7fa
Explorer: draw it with the Vortex design system, and build it with Bu…
lwwmanning Nov 4, 2026
dd2eede
Refresh CodSpeed simulation counts and timings (#11231)
connortsui20 Nov 4, 2026
8d9e027
feat(array): migrate simple encodings to scalar probes (#10859)
jiengup Nov 4, 2026
e72a61d
Keep same-scale decimal widening casts lazy (#11006)
connortsui20 Nov 4, 2026
7d49b0d
docs(arrow): explain why dictionary imports need special handling (#1…
connortsui20 Nov 4, 2026
9e6770d
Push DataFusion dynamic filters into V2 scans (#11215)
joseph-isaacs Nov 4, 2026
3be54de
Speed up RunEnd filter with a rank directory and POPCNT dispatch (#10…
robert3005 Nov 4, 2026
9d2da79
Fix the mixed-dimension chunk test in vortex-bench (#11236)
connortsui20 Nov 4, 2026
4addfba
Fix the return dtype of grouped is_sorted and is_constant (#11238)
connortsui20 Nov 4, 2026
a720e52
Push down `array_sum` in DataFusion (#10854)
mhk197 Nov 4, 2026
068d819
Docs: draw the docs with the Vortex design system (#11207)
lwwmanning Nov 4, 2026
b8c5932
docs: require vortex_ensure_eq for equality checks (#11246)
connortsui20 Nov 4, 2026
afaabf3
Show the same header, footer, 404, and theme switch on the docs and E…
lwwmanning Nov 4, 2026
6e2f427
Halve random-access benchmark CI time: 5 s measurements, parallel and…
joseph-isaacs Nov 5, 2026
c15a41d
ci: pin Zig to 0.17.0 in setup-zig steps (#11241)
joseph-isaacs Nov 5, 2026
d8a4952
Plan and execute common RowFn batches in one dispatch (#10675)
connortsui20 Nov 5, 2026
de452a1
Merge upstream develop into QC develop (2026-11-05)
ChristopherWirt Nov 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
13 changes: 10 additions & 3 deletions .github/vercel-cli/pages-html-routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@
Usage: pages-html-routes.py OUTPUT_DIR
OUTPUT_DIR is a `.vercel/output` directory holding `static/` and a
`config.json` whose routes only set headers. The routes this script adds
follow those header routes.
`config.json` whose routes set headers, or redirect or rewrite a request
that the HTML routes must not see, such as the Explorer's host. The routes
this script adds follow them.
"""

import json
Expand Down Expand Up @@ -44,6 +45,12 @@ def html_routes(static: Path) -> list[dict]:
# Only reached when no file or directory matched.
redirect(r"^/(.+)/$", "/$1", 307),
{"src": r"^/(.+)$", "dest": "/$1.html", "check": True},
# An address that matches no file gets the build's 404 page, with a 404 status.
*(
[{"handle": "error"}, {"src": "^/.*$", "dest": "/404.html", "status": 404}]
if (static / "404.html").is_file()
else []
),
]


Expand All @@ -52,7 +59,7 @@ def main(output: Path) -> None:
config = json.loads(config_path.read_text())
routes = config.get("routes", [])
if any("handle" in route for route in routes):
sys.exit(f"{config_path}: routes must only set headers when HTML handling is added")
sys.exit(f"{config_path}: routes must not start a phase ('handle') when HTML handling is added")
config["routes"] = routes + html_routes(output / "static")
config_path.write_text(json.dumps(config, indent=2) + "\n")

Expand Down
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ jobs:
--with tabulate --with xxhash \
pytest scripts/tests/test_measurement_id.py \
scripts/tests/test_benchmark_reporting.py scripts/tests/test_post_ingest.py \
scripts/tests/test_refresh_bench_site.py \
scripts/tests/test_codspeed_shards.py

python-test:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/codspeed.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ jobs:
- ".github/workflows/codspeed.yml"
# CodSpeed rejects an upload with too many benchmarks, so the simulation benchmarks run in
# shards of at most 800. The planner reads only Cargo.toml files and the committed benchmark
# counts, so this job needs no Rust toolchain and takes seconds.
# shards of at most 800. The planner balances recorded target runtimes across the available
# slots, keeping allocation modes separate. It reads only manifests and committed estimates.
plan-codspeed:
name: "Plan Codspeed shards"
if: github.event.pull_request.draft != true
Expand Down
12 changes: 10 additions & 2 deletions .github/workflows/commit-metadata.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,6 @@ jobs:
RDS_BENCH_INSTANCE_ENDPOINT: ${{ vars.RDS_BENCH_INSTANCE_ENDPOINT }}
RDS_BENCH_DB_NAME: ${{ vars.RDS_BENCH_DB_NAME }}
AWS_REGION: ${{ vars.RDS_BENCH_REGION }}
BENCH_SITE_BASE_URL: ${{ vars.BENCH_SITE_BASE_URL }}
BENCH_REVALIDATE_TOKEN: ${{ secrets.BENCH_REVALIDATE_TOKEN }}
run: |
set -Eeuo pipefail
echo -n > empty.jsonl
Expand All @@ -61,3 +59,13 @@ jobs:
--commit-sha "${{ github.sha }}" \
--branch "${{ github.ref_name }}" \
--region "${AWS_REGION}"
# Tell the benchmarks website that the new commit exists. develop-bench.yml refreshes again
# after its benchmark results are ingested, but it does not wait for this workflow, so a push
# whose benchmark ingests all fail could otherwise leave this commit hidden by the cache.
refresh-site:
needs: commit-metadata
if: vars.GH_BENCH_INGEST_ROLE_ARN != ''
uses: ./.github/workflows/refresh-bench-site.yml
secrets:
BENCH_REVALIDATE_TOKEN: ${{ secrets.BENCH_REVALIDATE_TOKEN }}
59 changes: 54 additions & 5 deletions .github/workflows/develop-bench.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,9 @@ permissions:
jobs:
build:
timeout-minutes: 60
# GitHub drops runner labels longer than 255 characters, and the job then waits for a runner
# forever. With the long `family` list and the longest benchmark id, this label is close.
runs-on: >-
${{ github.repository == 'vortex-data/vortex'
&& format('runs-on={0}/region=us-east-1/runner=bench-dedicated/family=c8gd.8xlarge+c8g.8xlarge+c8gn.8xlarge+m8gd.8xlarge+m8g.8xlarge+r8gd.8xlarge+r8g.8xlarge+x8g.8xlarge+i8g.8xlarge/image=ubuntu26-full-arm64-pre-v2/extras=s3-cache/tag={1}', github.run_id, matrix.benchmark.id)
&& format('runs-on={0}/region=us-east-1/runner=arm64-bench/extras=s3-cache/tag={1}', github.run_id, matrix.benchmark.id)
|| 'ubuntu-latest' }}
strategy:
fail-fast: false
Expand Down Expand Up @@ -155,6 +153,39 @@ jobs:
litdata==0.2.76 torch pyarrow numpy
echo "LITDATA_PYTHON=$PWD/.venv-litdata/bin/python" >> "$GITHUB_ENV"
# Parquet and LitData do not depend on Vortex code, so they are cached; LitData alone is
# about 80% of data generation time. Vortex, Arrow IPC and Lance are written every run.
# The key covers the dataset generators, the crates that write and seed the Parquet files,
# and the LitData conversion. Keep the litdata version in sync with the Install LitData step.
- name: Compute benchmark data cache key
id: data-cache-key
if: matrix.benchmark.id == 'random-access-bench'
shell: bash
run: |
set -Eeu -o pipefail
crates=$(awk '/^\[\[package\]\]/ { name = "" }
/^name = / { name = $3 }
/^version = / && name ~ /^"(parquet|arrow-.*|rand.*)"$/ { print name, $3 }' Cargo.lock \
| sort | sha256sum | cut -c1-16)
echo "crates=$crates" >> "$GITHUB_OUTPUT"
- name: Restore benchmark data
id: data-cache
if: matrix.benchmark.id == 'random-access-bench'
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: |
vortex-bench/data/taxi/taxi.parquet
vortex-bench/data/random_access/*/*.parquet
vortex-bench/data/random_access/*/*.litdata
key: >-
random-access-data-v1-${{ matrix.benchmark.remote_data_dir && 's3' || 'local' }}-litdata0.2.76-${{ steps.data-cache-key.outputs.crates }}-${{
hashFiles(
'vortex-bench/src/datasets/**',
'vortex-bench/src/random_access/**',
'scripts/litdata-random-access.py',
'benchmarks/random-access-bench/src/litdata.rs') }}
# Download and convert all benchmark data up front, so the benchmark step below only
# contains timed runs. The data is written with the same settings the benchmark uses.
- name: Generate ${{ matrix.benchmark.name }} data
Expand All @@ -167,6 +198,16 @@ jobs:
python3 "scripts/${bench%-bench}-split.py" --prepare-data \
${{ matrix.benchmark.remote_data_dir && format('--remote-data-dir {0}', matrix.benchmark.remote_data_dir) || '' }}
- name: Save benchmark data
if: matrix.benchmark.id == 'random-access-bench' && steps.data-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: |
vortex-bench/data/taxi/taxi.parquet
vortex-bench/data/random_access/*/*.parquet
vortex-bench/data/random_access/*/*.litdata
key: ${{ steps.data-cache.outputs.cache-primary-key }}

- name: Upload benchmark data to S3
if: matrix.benchmark.remote_data_dir != null
shell: bash
Expand Down Expand Up @@ -238,8 +279,6 @@ jobs:
RDS_BENCH_INSTANCE_ENDPOINT: ${{ vars.RDS_BENCH_INSTANCE_ENDPOINT }}
RDS_BENCH_DB_NAME: ${{ vars.RDS_BENCH_DB_NAME }}
AWS_REGION: ${{ vars.RDS_BENCH_REGION }}
BENCH_SITE_BASE_URL: ${{ vars.BENCH_SITE_BASE_URL }}
BENCH_REVALIDATE_TOKEN: ${{ secrets.BENCH_REVALIDATE_TOKEN }}
run: |
set -Eeuo pipefail
curl -fsSL https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem \
Expand All @@ -266,3 +305,13 @@ jobs:
with:
mode: "develop"
matrix_preset: "develop"

# Tell the benchmarks website that new results exist, once per push, after every benchmark job
# of the push has ingested its results. `always()` runs it even when a benchmark job failed, so
# the results that other jobs ingested still appear.
refresh-site:
needs: [bench, sql]
if: ${{ always() }}
uses: ./.github/workflows/refresh-bench-site.yml
secrets:
BENCH_REVALIDATE_TOKEN: ${{ secrets.BENCH_REVALIDATE_TOKEN }}
18 changes: 15 additions & 3 deletions .github/workflows/docs-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,10 @@ jobs:
'.github/workflows/docs-build.yml',
'.github/workflows/docs-preview.yml',
'.github/workflows/deploy-vercel.yml',
'.github/workflows/web-build.yml',
]);
eligible = files.some(file => [file.filename, file.previous_filename].some(
path => path && (path.startsWith('docs/') ||
path => path && (path.startsWith('docs/') || path.startsWith('vortex-web/') ||
path.startsWith('.github/vercel-cli/') || workflows.has(path)),
));
}
Expand All @@ -71,11 +72,22 @@ jobs:
cancel-in-progress: true
uses: ./.github/workflows/docs-build.yml

web:
name: Build Explorer preview
needs: changes
if: needs.changes.outputs.eligible == 'true'
permissions:
contents: read
concurrency:
group: docs-preview-web-${{ github.event.pull_request.number }}
cancel-in-progress: true
uses: ./.github/workflows/web-build.yml

# Each Vercel deployment has its own URL, so a stale build cannot replace
# a newer preview, and the PR needs no recheck before publishing.
publish:
name: Publish preview
needs: build
needs: [build, web]
permissions:
contents: read
deployments: write
Expand All @@ -85,6 +97,6 @@ jobs:
secrets: inherit
with:
environment: vercel-docs
artifact-ids: ${{ needs.build.outputs.artifact-id }}
artifact-ids: ${{ needs.build.outputs.artifact-id }},${{ needs.web.outputs.artifact-id }}
config: docs/vercel-output-config.json
pages-html-handling: true
11 changes: 9 additions & 2 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,16 @@ jobs:
build:
uses: ./.github/workflows/docs-build.yml

web:
name: Build Explorer
permissions:
contents: read
uses: ./.github/workflows/web-build.yml

# One Vercel project serves the docs and the Explorer.
deploy:
name: Deploy to Vercel
needs: build
needs: [build, web]
permissions:
contents: read
deployments: write
Expand All @@ -33,7 +40,7 @@ jobs:
secrets: inherit
with:
environment: vercel-docs
artifact-ids: ${{ needs.build.outputs.artifact-id }}
artifact-ids: ${{ needs.build.outputs.artifact-id }},${{ needs.web.outputs.artifact-id }}
config: docs/vercel-output-config.json
pages-html-handling: true
production: ${{ github.ref == 'refs/heads/develop' }}
9 changes: 9 additions & 0 deletions .github/workflows/nightly-bench.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,12 @@ jobs:
machine_type:
- id: arm64
instance_name: c8gd.metal-24xl

# Tell the benchmarks website that new results exist, once per run, after every machine type
# has ingested its results. `always()` runs it even when one machine type failed.
refresh-site:
needs: sql
if: ${{ always() }}
uses: ./.github/workflows/refresh-bench-site.yml
secrets:
BENCH_REVALIDATE_TOKEN: ${{ secrets.BENCH_REVALIDATE_TOKEN }}
2 changes: 2 additions & 0 deletions .github/workflows/package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,8 @@ jobs:
with:
enable-sccache: ${{ github.repository == 'vortex-data/vortex' && 'true' || 'false' }}
- uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2.2.1
with:
version: 0.17.0
- name: Install cargo-zigbuild
uses: taiki-e/cache-cargo-install-action@66c9585ef5ca780ee69399975a5e911f47905995
with:
Expand Down
47 changes: 44 additions & 3 deletions .github/workflows/pr-bench-runner.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,9 @@ permissions:
jobs:
build:
timeout-minutes: 60
# GitHub drops runner labels longer than 255 characters, and the job then waits for a runner
# forever. With the long `family` list and the longest benchmark id, this label is close.
runs-on: >-
${{ github.repository == 'vortex-data/vortex'
&& format('runs-on={0}/region=us-east-1/runner=bench-dedicated/family=c8gd.8xlarge+c8g.8xlarge+c8gn.8xlarge+m8gd.8xlarge+m8g.8xlarge+r8gd.8xlarge+r8g.8xlarge+x8g.8xlarge+i8g.8xlarge/image=ubuntu26-full-arm64-pre-v2/tag={1}{2}', github.run_id, inputs.benchmark_id, github.event.pull_request.head.repo.fork == false && '/extras=s3-cache' || '')
&& format('runs-on={0}/region=us-east-1/runner=arm64-bench/tag={1}{2}', github.run_id, inputs.benchmark_id, github.event.pull_request.head.repo.fork == false && '/extras=s3-cache' || '')
|| 'ubuntu-latest' }}
steps:
- uses: runs-on/action@v2
Expand Down Expand Up @@ -167,6 +165,39 @@ jobs:
litdata==0.2.76 torch pyarrow numpy
echo "LITDATA_PYTHON=$PWD/.venv-litdata/bin/python" >> "$GITHUB_ENV"
# Parquet and LitData do not depend on Vortex code, so they are cached; LitData alone is
# about 80% of data generation time. Vortex, Arrow IPC and Lance are written every run.
# The key covers the dataset generators, the crates that write and seed the Parquet files,
# and the LitData conversion. Keep the litdata version in sync with the Install LitData step.
- name: Compute benchmark data cache key
id: data-cache-key
if: inputs.benchmark_id == 'random-access-bench'
shell: bash
run: |
set -Eeu -o pipefail
crates=$(awk '/^\[\[package\]\]/ { name = "" }
/^name = / { name = $3 }
/^version = / && name ~ /^"(parquet|arrow-.*|rand.*)"$/ { print name, $3 }' Cargo.lock \
| sort | sha256sum | cut -c1-16)
echo "crates=$crates" >> "$GITHUB_OUTPUT"
- name: Restore benchmark data
id: data-cache
if: inputs.benchmark_id == 'random-access-bench'
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: |
vortex-bench/data/taxi/taxi.parquet
vortex-bench/data/random_access/*/*.parquet
vortex-bench/data/random_access/*/*.litdata
key: >-
random-access-data-v1-${{ inputs.remote_data_dir != '' && 's3' || 'local' }}-litdata0.2.76-${{ steps.data-cache-key.outputs.crates }}-${{
hashFiles(
'vortex-bench/src/datasets/**',
'vortex-bench/src/random_access/**',
'scripts/litdata-random-access.py',
'benchmarks/random-access-bench/src/litdata.rs') }}
# Download and convert all benchmark data up front, so the benchmark step below only
# contains timed runs. The data is written with the same settings the benchmark uses.
- name: Generate ${{ inputs.benchmark_name }} data
Expand All @@ -179,6 +210,16 @@ jobs:
python3 "scripts/${bench%-bench}-split.py" --prepare-data \
${{ inputs.remote_data_dir != '' && format('--remote-data-dir {0}', inputs.remote_data_dir) || '' }}
- name: Save benchmark data
if: inputs.benchmark_id == 'random-access-bench' && steps.data-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: |
vortex-bench/data/taxi/taxi.parquet
vortex-bench/data/random_access/*/*.parquet
vortex-bench/data/random_access/*/*.litdata
key: ${{ steps.data-cache.outputs.cache-primary-key }}

- name: Upload benchmark data to S3
if: inputs.remote_data_dir != '' && github.event.pull_request.head.repo.fork == false
shell: bash
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish-dry-runs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ jobs:
with:
save-if: ${{ github.ref_name == 'develop' }}
- uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2.2.1
with:
version: 0.17.0
- name: Install uv
uses: spiraldb/actions/.github/actions/setup-uv@a746510eafaa926484c354541cfc49b2ec06cc63 # 0.18.6
with:
Expand Down Expand Up @@ -104,6 +106,8 @@ jobs:
with:
enable-sccache: ${{ github.repository == 'vortex-data/vortex' && 'true' || 'false' }}
- uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2.2.1
with:
version: 0.17.0
- name: Install cargo-zigbuild
uses: taiki-e/cache-cargo-install-action@66c9585ef5ca780ee69399975a5e911f47905995
with:
Expand Down
29 changes: 29 additions & 0 deletions .github/workflows/refresh-bench-site.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Tells the benchmarks website that new results exist, then warms its default pages. Callers run
# it once per run, after their benchmark ingests finish, instead of once per benchmark job. This
# keeps the website from flushing and refilling its cache dozens of times an hour while
# benchmarks run. The script does nothing when the URL or the token is not set.

name: Refresh benchmarks website

on:
workflow_call:
secrets:
BENCH_REVALIDATE_TOKEN:
required: false

jobs:
refresh:
if: vars.BENCH_SITE_BASE_URL != ''
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: read
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
sparse-checkout: scripts
- name: Revalidate and warm the benchmarks website
env:
BENCH_SITE_BASE_URL: ${{ vars.BENCH_SITE_BASE_URL }}
BENCH_REVALIDATE_TOKEN: ${{ secrets.BENCH_REVALIDATE_TOKEN }}
run: python3 scripts/refresh-bench-site.py
2 changes: 2 additions & 0 deletions .github/workflows/release-binaries.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ jobs:
- name: Setup Zig
if: contains(matrix.target, 'linux')
uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2.2.1
with:
version: 0.17.0

- name: Install cargo-zigbuild
if: contains(matrix.target, 'linux')
Expand Down
Loading
Loading