Skip to content

ci: aarch64 Linux wheels, protoc without Chocolatey, pinned actions and zizmor - #139

Merged
prrao87 merged 3 commits into
mainfrom
ci/windows-protoc
Nov 7, 2026
Merged

prrao87 merged 3 commits into
mainfrom
ci/windows-protoc

Conversation

@prrao87

@prrao87 prrao87 commented Nov 7, 2026 •

Copy link
Copy Markdown
Member

Why

The v0.8.1 release run failed in build-windows after 22 seconds, before compiling anything. choco install protoc --version=29.3 couldn't reach Chocolatey's community feed (Unable to connect to source 'https://community.chocolatey.org/api/v2/'). The package itself is still there, and the same step passed on #127's runs. So the release depended on a third-party feed that fails now and then.

While here, this PR adds the build items from #126 that make sense without Nix: Linux aarch64 wheels, actions pinned to commit SHAs, and a zizmor audit in CI.

What changed

protoc on Windows

  • The Windows job downloads protoc-29.3-win64.zip from the protobuf v29.3 release, checks it against a pinned SHA-256, and adds it to PATH. It's the same version and the same zip Chocolatey unpacked. The release publishes no checksum for this file, so the pinned hash comes from a download on 2026-11-07.

Linux aarch64 wheel

  • build-linux becomes an x86-64/aarch64 matrix. The aarch64 wheel (manylinux_2_28) builds natively on ubuntu-24.04-arm with the same zig command, and test runs it on Python 3.12, 3.13 and 3.14 like the other wheels. It uses the default ARMv8 target features, the same as pylance's aarch64 wheels.
  • pylance publishes aarch64 wheels, so uv add lance-csr on ARM Linux, including Docker on Apple Silicon and Windows-on-ARM WSL2, won't compile anything.
  • No musl wheels. pylance publishes none, so on Alpine a musl lance-csr wheel would still compile Lance from source.

Pinned actions and zizmor

  • Every action is pinned to a commit SHA with its exact version in a comment. Each pin is the commit its current tag already points to, so no action changes behaviour. The maturin-action comment said v1, but its pinned commit is v1.50.1.
  • .github/dependabot.yml updates the pins in one grouped PR a week, and only for releases at least 7 days old.
  • A new Workflow Audit workflow runs zizmor@1.32.0 (online audits included) on changes to .github/. These are the fixes for what it found:
    • The release-tag check expanded ${{ github.event.release.tag_name }} straight into the shell script (template injection). It now goes through an env var.
    • Checkouts set persist-credentials: false. No workflow pushes with git.
    • Every workflow has permissions: contents: read at the top level. The publish jobs keep their own id-token: write.
    • Wheel builds restore no caches. sccache and uv caching are off in python-publish.yml, so nothing a PR run left in the cache can end up in a release wheel. The Windows build already ran without sccache and is the slowest job by about 17 minutes, so this shouldn't make a release take longer. The Linux and macOS jobs on PR dry runs will be slower.

Docs

  • The READMEs, docs/getting-started.md and docs/index.md list Linux aarch64. docs/index.md also gains Windows, which Build and test Windows x86-64 wheels #127 missed.
  • RELEASE.md describes the Linux build matrix and why the builds use no caches. The aarch64 build time is still marked TBD and gets filled in from this PR's run.
  • AGENTS.md asks for SHA pins and a local zizmor run when editing workflows.
  • The root README defines CSR (compressed sparse row) near the top: where it comes from and that Kùzu and LadybugDB store relationships the same way. "Much wider Cypher" becomes "Broader openCypher support", and the install section says Windows installs its own native wheel and doesn't need WSL2.

Validation

  • uvx zizmor@1.32.0 .github, online: no findings (17 suppressed by its default persona).
  • uvx typos@1.26.0 . and uv run --project docs --locked zensical build --strict: pass.
  • This PR edits python-publish.yml, so its dry run builds and tests all four wheels, including the new aarch64 one and the Windows protoc step. Pending.

🤖 Generated with Claude Code

Chocolatey's community feed was unreachable from the runner during the
v0.8.1 release run, so build-windows failed before it started compiling.
Download protoc 29.3 from the protobuf release instead and check it
against a pinned SHA-256.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Deploying lance-csr with  Cloudflare Pages  Cloudflare Pages

Latest commit: 86386bb
Status: ✅  Deploy successful!
Preview URL: https://87510e13.lance-csr.pages.dev
Branch Preview URL: https://ci-windows-protoc.lance-csr.pages.dev

View logs

- Build a manylinux_2_28 aarch64 wheel natively on ubuntu-24.04-arm and
  test it on Python 3.12 to 3.14, like the other wheels. pylance has
  aarch64 wheels, so it installs without compiling. No musl wheels:
  pylance publishes none, so they would still compile Lance.
- Pin every action to a commit SHA with its exact version, and let
  Dependabot update the pins weekly with a 7-day cooldown.
- Add a Workflow Audit job that runs zizmor, and fix what it found:
  pass the release tag through an env var instead of expanding it in
  the script, stop persisting checkout credentials, give every
  workflow read-only contents permission, and restore no caches
  (sccache, uv) in the wheel builds.
@prrao87 prrao87 changed the title ci: install protoc for the Windows wheel from its GitHub release ci: aarch64 Linux wheels, protoc without Chocolatey, pinned actions and zizmor Nov 7, 2026
@prrao87 prrao87 mentioned this pull request Nov 7, 2026
5 of 33 tasks
Explain what a CSR is, where it comes from and which graph databases use
it, before the README relies on the term. Rename "Much wider Cypher" to
"Broader openCypher support". Say that Windows installs the native wheel
and doesn't need WSL2.
@prrao87
prrao87 merged commit f7dcf74 into main Nov 7, 2026
27 checks passed
@prrao87
prrao87 deleted the ci/windows-protoc branch November 7, 2026 16:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant