Skip to content
Open
Show file tree
Hide file tree
Changes from 110 commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
3e27717
Add chucky CPU shim skeleton
nclack Mar 28, 2026
ea5c112
Implement stream create/append/destroy
nclack Mar 29, 2026
6b8d7f2
Set downsample on spatial dims
nclack Mar 29, 2026
9688bee
shim: starting
nclack Mar 30, 2026
15bd7ee
Merge remote-tracking branch 'origin/157-stock-zstd-lz4' into shim
nclack Mar 30, 2026
57f4cec
Add lz4/zstd codec support
nclack Mar 30, 2026
c7caee4
Flat layout for single arrays
nclack Mar 30, 2026
eafc906
Always use multiscale sink
nclack Mar 30, 2026
1e347c6
Flat layout for single arrays
nclack Mar 31, 2026
fef0e1f
Fix LOD stop condition for aspect ratio
nclack Mar 31, 2026
fbd1c23
Skip estimate-memory-usage test
nclack Mar 31, 2026
50a14d7
update chucky
nclack Mar 31, 2026
951bd0f
Add CI workflow for shim tests
nclack Mar 31, 2026
8a7923e
Use Docker for shim CI
nclack Mar 31, 2026
27e987c
Merge remote-tracking branch 'upstream/main' into shim
nclack Apr 2, 2026
f68fa09
Update shim for new chucky public API
nclack Apr 7, 2026
d3ee9e7
Implement memory estimation
nclack Apr 13, 2026
780db03
Add S3 support and S3 integration tests
nclack Apr 13, 2026
1e10ca0
Add CPU Python wheel build
nclack Apr 13, 2026
9207560
Add GPU wheel and wheels CI
nclack Apr 16, 2026
dac7f85
add stuff
nclack Apr 16, 2026
eb62018
Run shim tests via docker compose
nclack Apr 16, 2026
2657950
Guard chucky_log for main build
nclack Apr 16, 2026
768d431
Skip chucky-divergent LOD tests in baseline
nclack Apr 17, 2026
e23335c
Refresh plan.md with CI and test disables
nclack Apr 17, 2026
b9988ba
Restore miniocpp backend for s3 tests
nclack Apr 17, 2026
74324ba
Enable vcpkg GHA binary cache
nclack Apr 17, 2026
0cfb30a
Extend vcpkg GHA cache to all CI
nclack Apr 17, 2026
4183908
Cache vcpkg bootstrap, skip isolation
nclack Apr 17, 2026
dc73343
Cache shim Docker build via GHA
nclack Apr 17, 2026
8e48eb6
Replace pip/setup-python with uv
nclack Apr 17, 2026
5289470
Bump chucky, refresh plan.md
nclack Apr 17, 2026
27c8470
Keep setup-python with uv (--system)
nclack Apr 17, 2026
55afe49
Full uv-native CI: venv, run, build
nclack Apr 17, 2026
ca5a1f1
Fix zarr_write_group rename in chucky
nclack Apr 17, 2026
c90d5c7
Ignore GHA cache errors in shim build
nclack Apr 17, 2026
15fbd9c
Switch shim build cache to GHCR registry
nclack Apr 17, 2026
7503c81
Bump chucky, add pytest-timeout
nclack Apr 17, 2026
acd8079
Bump anisotropic test timeout (win)
nclack Apr 17, 2026
95ae7f4
Signal-based pytest timeout on POSIX
nclack Apr 17, 2026
e357bfc
Guard shim append loop against spin
nclack Apr 17, 2026
5a1d7bb
Drain logs via ring to avoid callback deadlock
nclack Apr 17, 2026
64a2498
Bump chucky: explicit stream commit point
nclack Apr 18, 2026
4fda50b
Plan: session progress
nclack Apr 18, 2026
f179ca9
Shim fixes: get_array_key NULL; overwrite guard; custom metadata; paths
nclack Apr 18, 2026
15b6f79
Use nvcomp redist URL in GPU Dockerfile
nclack Apr 18, 2026
a0126f7
Shim review round 2: error propagation, diagnostics, buffers
nclack Apr 18, 2026
591d444
Plan: trim done items
nclack Apr 18, 2026
1c4793f
Drop DEBUG log in overflow test
nclack Apr 18, 2026
83f312e
Benchmark: matrix shim vs baseline
nclack Apr 18, 2026
73193b2
Isolate acquire_zarr logger + durations
nclack Apr 18, 2026
bf5bd71
Shim wheel: vcpkg manifest + toolchain
nclack Apr 18, 2026
4d17fbf
Shim pybind: require C++20 for MSVC
nclack Apr 18, 2026
0ccb1e9
Shim macOS: hint FindOpenMP at libomp
nclack Apr 18, 2026
87d3a6f
Shim: gate test targets on BUILD_TESTING
nclack Apr 18, 2026
93fae21
Benchmark: skip windows-latest shim for now
nclack Apr 18, 2026
bf4e19a
Shim macOS: OpenMP flags as list
nclack Apr 18, 2026
c4df929
Benchmark: skip macOS shim pending OMP triage
nclack Apr 18, 2026
90de239
Skip overflow test on Windows (slow)
nclack Apr 18, 2026
c462d4b
Plan: doc CI known issues
nclack Apr 18, 2026
db1d22f
Randomize test order to localize slowness
nclack Apr 18, 2026
9400365
Plan: note Windows order was the cause
nclack Apr 18, 2026
9511708
CI: enable sccache for builds
nclack Apr 18, 2026
7718f69
Shim: return WriteOutOfBounds on overflow
nclack Apr 18, 2026
a32cd96
CI: tolerate sccache install failures
nclack Apr 18, 2026
c4446a6
CI: tier platforms, gate benchmarks, skip docs
nclack Apr 18, 2026
a4fd14c
CI: use runner-shipped cmake
nclack Apr 18, 2026
b1a490c
CI: dedupe via composite actions
nclack Apr 18, 2026
707fdad
CI: cmake 4 policy floor, tier-2 fail-fast
nclack Apr 18, 2026
26a8ec8
CI: macos to tier1 + SDKROOT for vcpkg
nclack Apr 18, 2026
30f3bdd
CI: pin cmake 3.x via cached pipx
nclack Apr 18, 2026
c7b8ff8
CI: tidy job titles for skipped tier-2
nclack Apr 18, 2026
72a3854
Fix frame-processing deadlock on error (#216)
aliddell Apr 8, 2026
bf32e05
Remove some dead code (#217)
aliddell Apr 9, 2026
f3e1fe8
Fix worker-exit deadlock in ZarrStream
nclack Apr 18, 2026
c15e5f0
formatting
nclack Apr 18, 2026
c23f786
Merge branch 'main' into shim
nclack Apr 18, 2026
aa21643
shim CI: mac + windows via micromamba
nclack Apr 20, 2026
47b7c70
chucky bump + mac/win shim benchmarks
nclack Apr 20, 2026
06c2814
shim CI: gpu tests on self-hosted runner
nclack Apr 20, 2026
c3b0e2d
shim: localtime_s on Windows
nclack Apr 20, 2026
ce1467e
s3-test-helpers: MSVC _popen/_pclose
nclack Apr 20, 2026
58d0d15
chucky bump: drain_bulk_d2h gpu fix
nclack Apr 20, 2026
1d26294
shim: split log+status
nclack Apr 20, 2026
5a1e787
shim: split settings+util
nclack Apr 20, 2026
052ca90
shim: split array+hcs_json
nclack Apr 20, 2026
a3e04ee
shim: refactor hcs orchestration
nclack Apr 20, 2026
36bcc63
shim: zero-fill from static buf
nclack Apr 20, 2026
d3eb89d
shim: clarify mkdirs root
nclack Apr 20, 2026
88dc521
restore baseline multiscale tests
nclack Apr 20, 2026
8970fe5
shim: harden array helpers
nclack Apr 20, 2026
09216b1
shim: CHECK mkdirs + root group
nclack Apr 20, 2026
edd6f53
benchmark: workflow_dispatch trigger
nclack Apr 20, 2026
c224797
benchmark: dispatch input filters
nclack Apr 20, 2026
f8a9cb6
benchmark: matrix via setup job
nclack Apr 20, 2026
5e34326
shim: PR review fixes
nclack Apr 20, 2026
41c32f7
CI: align test timeouts to 25m
nclack Apr 20, 2026
959c30e
shim: MSVC c11atomics flag
nclack Apr 20, 2026
f95387c
shim: chucky target_batch_bytes
nclack Apr 21, 2026
e017c3e
Merge remote-tracking branch 'upstream/main' into shim
Apr 21, 2026
bf8d568
update chucky
Apr 21, 2026
0a9eb38
docker for benchmark plots w chucky backend
nclack Apr 21, 2026
610c7c9
untrack flake.nix and flake.lock
nclack Apr 25, 2026
158fca5
chucky: bench thread scaling
nclack Apr 25, 2026
0509097
shim: O_DIRECT for fs store
nclack Apr 25, 2026
20e8085
shim: HCS metadata via strbuf
nclack Apr 25, 2026
ecd7e91
bench: explicit file_io_sync
nclack Apr 25, 2026
b4c2ba4
chucky: cpu threadpool
nclack Apr 26, 2026
edef4c1
update chucky for pr#125
nclack May 10, 2026
b513102
Merge branch 'main' into shim
nclack May 10, 2026
b64c311
Update .gitmodules
nclack May 14, 2026
3481386
Update shim/shim_log.c
nclack May 14, 2026
103de08
Update shim/README.md
nclack May 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
build/
**/build/
build-*/
**/build-*/
vcpkg/
.venv/
.venv-*/
**/.venv/
**/.venv-*/
dist/
wheels/
*.egg-info/
__pycache__/
.pytest_cache/
.mypy_cache/
.ruff_cache/
.claude/
.git
bench-out/
bench-scratch/
44 changes: 44 additions & 0 deletions .github/actions/setup-cmake/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Set up cmake (cached pipx)
description: >-
Install cmake (default `<4`) via pipx into a cached venv and put it on PATH.
Pinning to cmake 3.x avoids policy-floor issues with vcpkg's older ports
(snappy etc.) and keeps the toolchain ABI hash stable across the C++ and
Python jobs so vcpkg's x-gha binary cache is reusable across both.

inputs:
version:
description: pip-style version constraint, e.g. "<4" or "==3.31.6"
required: false
default: "<4"

runs:
using: composite
steps:
- name: Resolve pipx paths
id: pipx-paths
shell: bash
run: |
echo "home=$(pipx environment --value PIPX_HOME)" >> "$GITHUB_OUTPUT"
echo "bin=$(pipx environment --value PIPX_BIN_DIR)" >> "$GITHUB_OUTPUT"

- name: Cache cmake venv
id: cache
uses: actions/cache@v4
with:
path: |
${{ steps.pipx-paths.outputs.home }}
${{ steps.pipx-paths.outputs.bin }}
key: cmake-${{ inputs.version }}-${{ runner.os }}-${{ runner.arch }}-pipx-v1

- name: Install cmake (cache miss)
if: steps.cache.outputs.cache-hit != 'true'
shell: bash
run: pipx install "cmake${{ inputs.version }}"

- name: Put pipx bin on PATH
shell: bash
run: echo "${{ steps.pipx-paths.outputs.bin }}" >> "$GITHUB_PATH"

- name: Verify
shell: bash
run: cmake --version
29 changes: 29 additions & 0 deletions .github/actions/setup-sccache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Set up sccache
description: >-
Install sccache (best-effort; 504s on GitHub releases are tolerated) and
export compiler-launcher flags for downstream CMake / pip builds.

inputs:
export-cmake-args:
description: >-
When "true", also export CMAKE_ARGS so pip-driven builds that read the
env (root setup.py and shim/python/setup.py) pick up the launcher.
required: false
default: "false"

runs:
using: composite
steps:
- name: Set up sccache
id: sccache
uses: mozilla-actions/[email protected]
continue-on-error: true

- name: Export sccache launcher
if: steps.sccache.outcome == 'success'
shell: bash
run: |
echo "SCCACHE_LAUNCHER=-DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache" >> $GITHUB_ENV
if [ "${{ inputs.export-cmake-args }}" = "true" ]; then
echo "CMAKE_ARGS=-DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache" >> $GITHUB_ENV
fi
37 changes: 37 additions & 0 deletions .github/actions/setup-vcpkg/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Set up vcpkg
description: Bridge GHA cache env, restore vcpkg cache, and install vcpkg 2025.03.19.

runs:
using: composite
steps:
- name: Export GitHub Actions cache env for vcpkg
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');

- name: Cache vcpkg bootstrap
uses: actions/cache@v4
with:
path: |
vcpkg
!vcpkg/downloads
!vcpkg/buildtrees
!vcpkg/packages
!vcpkg/installed
key: vcpkg-2025.03.19-${{ runner.os }}-${{ runner.arch }}

- name: Install vcpkg
shell: bash
run: |
if [ ! -d vcpkg ]; then
git clone https://github.com/microsoft/vcpkg.git -b 2025.03.19
fi
cd vcpkg
if [ ! -f ./vcpkg ] && [ ! -f ./vcpkg.exe ]; then
./bootstrap-vcpkg.sh
fi
echo "VCPKG_ROOT=${{ github.workspace }}/vcpkg" >> $GITHUB_ENV
echo "${{ github.workspace }}/vcpkg" >> $GITHUB_PATH
./vcpkg integrate install
165 changes: 121 additions & 44 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,77 +3,150 @@ on:
push:
branches:
- main
pull_request:
branches:
- main
paths-ignore:
- '**.md'
- 'CHANGELOG*'
- 'LICENSE*'
# Gate on Tests passing. For PRs, the Tests workflow must succeed first;
# we detect that via workflow_run. For direct pushes to main, the push
# trigger above fires immediately (Tests still runs in parallel).
workflow_run:
workflows: ["Tests"]
types: [completed]
# Manual trigger: `gh workflow run benchmark.yml --ref <branch>` runs
# the benchmark against that branch's head (the default checkout
# behavior resolves to github.ref when no explicit ref is given).
# Pass `-f platforms=<substring>` / `-f backends=<substring>` to
# narrow the matrix; defaults to running every cell.
workflow_dispatch:
inputs:
platforms:
description: 'Substring filter for matrix platforms (e.g. "ubuntu-latest"); blank = all'
required: false
default: ''
backends:
description: 'Substring filter for matrix backends ("baseline", "shim"); blank = all'
required: false
default: ''

env:
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
SCCACHE_GHA_ENABLED: "true"

jobs:
# Build the matrix JSON at workflow-start time. Needed because
# matrix.* can't be referenced in the job-level if: expression, so
# the platform/backend filter has to happen before matrix expansion.
matrix-setup:
name: Compute matrix
runs-on: ubuntu-latest
# On push to main: always run. On workflow_run: only after a
# pull_request-triggered Tests run succeeds.
if: |
github.event_name == 'push' ||
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'workflow_run' &&
github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.event == 'pull_request')
outputs:
include: ${{ steps.build.outputs.include }}
steps:
- id: build
shell: bash
env:
PLATFORMS_FILTER: ${{ github.event_name == 'workflow_dispatch' && inputs.platforms || '' }}
BACKENDS_FILTER: ${{ github.event_name == 'workflow_dispatch' && inputs.backends || '' }}
run: |
python3 - <<'PY' >> "$GITHUB_OUTPUT"
import json, os
platforms = [
("windows-latest", "x64-windows-static"),
("ubuntu-latest", "x64-linux"),
("ubuntu-24.04-arm", "arm64-linux"),
("macos-latest", "arm64-osx"),
("macos-15-intel", "x64-osx"),
]
backends = ["baseline", "shim"]
pf = os.environ.get("PLATFORMS_FILTER", "")
bf = os.environ.get("BACKENDS_FILTER", "")
include = [
{"platform": p, "backend": b, "vcpkg_triplet": tr}
for (p, tr) in platforms
if not pf or pf in p
for b in backends
if not bf or bf in b
]
print(f"include={json.dumps(include)}")
PY
cat "$GITHUB_OUTPUT"

run-benchmark:
name: Benchmark on ${{ matrix.platform }}
needs: matrix-setup
name: Benchmark on ${{ matrix.platform }} (${{ matrix.backend }})
if: needs.matrix-setup.outputs.include != '[]'
runs-on: ${{ matrix.platform }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
platform:
- "windows-latest"
- "ubuntu-latest"
- "ubuntu-24.04-arm"
- "macos-latest" # arm
- "macos-15-intel" # x86_64
include:
- platform: "ubuntu-latest"
vcpkg_triplet: "x64-linux"
- platform: "windows-latest"
vcpkg_triplet: "x64-windows-static"
- platform: "macos-latest"
vcpkg_triplet: "arm64-osx"
- platform: "macos-15-intel"
vcpkg_triplet: "x64-osx"
- platform: "ubuntu-24.04-arm"
vcpkg_triplet: "arm64-linux"
include: ${{ fromJSON(needs.matrix-setup.outputs.include) }}
permissions:
actions: write

steps:
- uses: actions/checkout@v4
with:
submodules: true
ref: ${{ github.event.pull_request.head.sha }}
# workflow_run events don't carry pull_request context, so fall
# back to workflow_run.head_sha (the PR head that triggered Tests).
ref: ${{ github.event.workflow_run.head_sha || github.event.pull_request.head.sha }}

- uses: ./.github/actions/setup-cmake

- name: Set up Python 3.13
uses: actions/setup-python@v5
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
python-version: "3.13.3"

- name: Install vcpkg
run: |
git clone https://github.com/microsoft/vcpkg.git -b 2025.03.19
cd vcpkg && ./bootstrap-vcpkg.sh
echo "VCPKG_ROOT=${{github.workspace}}/vcpkg" >> $GITHUB_ENV
echo "${{github.workspace}}/vcpkg" >> $GITHUB_PATH
./vcpkg integrate install
shell: bash
- name: Configure macOS SDK root
if: startsWith(matrix.platform, 'macos')
run: echo "SDKROOT=$(xcrun --show-sdk-path)" >> $GITHUB_ENV

- uses: ./.github/actions/setup-vcpkg

- name: Install OpenMP
if: startsWith(matrix.platform, 'macos')
run: |
brew install libomp
run: brew install libomp

- uses: ./.github/actions/setup-sccache
with:
export-cmake-args: "true"

- name: Install dependencies
run: python -m pip install -U pip "pybind11[global]" "cmake<4.0.0" build tensorstore click rich psutil
run: |
uv venv
uv pip install "pybind11[global]" ninja setuptools wheel tensorstore click rich psutil
shell: bash

- name: Build and install Python bindings (baseline)
if: matrix.backend == 'baseline'
run: uv pip install --no-build-isolation ".[testing]"
shell: bash

- name: Build and install Python bindings
run: python -m pip install ".[testing]"
- name: Build and install Python bindings (shim)
if: matrix.backend == 'shim'
run: uv pip install --no-build-isolation "./shim/python[testing]"
shell: bash

- name: Run benchmark
run: python benchmarks/benchmark.py --nocompare --output benchmark-${{ matrix.platform }}-${{ github.sha }}.json
run: uv run --no-sync python benchmarks/benchmark.py --nocompare --output benchmark-${{ matrix.platform }}-${{ matrix.backend }}-${{ github.sha }}.json
shell: bash

- name: Upload benchmark results
uses: actions/upload-artifact@v4
with:
name: benchmark-${{ matrix.platform }}-${{ github.sha }}
path: benchmark-${{ matrix.platform }}-${{ github.sha }}.json
name: benchmark-${{ matrix.platform }}-${{ matrix.backend }}-${{ github.sha }}
path: benchmark-${{ matrix.platform }}-${{ matrix.backend }}-${{ github.sha }}.json

generate-plots:
name: Generate benchmark plots
Expand All @@ -84,13 +157,16 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Set up Python 3.13
uses: actions/setup-python@v5
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
python-version: "3.13.3"

- name: Install plotting dependencies
run: pip install matplotlib click
run: |
uv venv
uv pip install matplotlib click
shell: bash

- name: Download all benchmark artifacts
uses: actions/download-artifact@v4
Expand All @@ -100,7 +176,8 @@ jobs:
merge-multiple: true

- name: Generate plots
run: python benchmarks/plot_benchmarks.py --input-dir benchmark-results --output-prefix benchmark_comparison
run: uv run --no-sync python benchmarks/plot_benchmarks.py --input-dir benchmark-results --output-prefix benchmark_comparison
shell: bash

- name: Upload plot
uses: actions/upload-artifact@v4
Expand Down
Loading
Loading