Skip to content

Add Homebrew formulas for language runtimes#810

Open
brandonpayton wants to merge 6 commits into
mainfrom
gascity/kd-1mr/kd-p3hr-homebrew-language-runtimes
Open

Add Homebrew formulas for language runtimes#810
brandonpayton wants to merge 6 commits into
mainfrom
gascity/kd-1mr/kd-p3hr-homebrew-language-runtimes

Conversation

@brandonpayton

@brandonpayton brandonpayton commented Jul 1, 2026

Copy link
Copy Markdown
Member

Summary

  • Add Kandelo Homebrew formulas for zlib, sqlite, cpython, perl, ruby, php, erlang, and texlive.
  • Extend the shared Homebrew package helper for workdir/outdir builds, arch-aware sysroot/glue env, and wasm32-only defaults with explicit opt-out.
  • Update package build scripts and Homebrew smoke/sidecar helpers for the new language-runtime formulas.
  • Document the kandelo_build_package arch support convention.

Verification

Package bottle dry-runs built 8 wasm32 Kandelo bottles; durable SHA/path list: test-runs/kd-p3hr/outcome-lists/package-bottle-passed.txt.

Full gate artifacts are under test-runs/kd-p3hr/full-gate/ and outcome lists are under test-runs/kd-p3hr/outcome-lists/.

  • git diff --check: pass
  • ruby -c for shared Homebrew helper and all new formulae: pass
  • bash -n for changed shell scripts: pass
  • bash scripts/dev-shell.sh cargo test -p kandelo --target aarch64-apple-darwin --lib: pass, 963 passed / 0 failed / 0 skipped
  • cd host && npx vitest run: pass after fixture bootstrap, 97 files passed / 26 skipped; 761 tests passed / 2 expected fail / 129 skipped / 0 failed
  • bash scripts/dev-shell.sh bash scripts/run-libc-tests.sh: pass after initializing tests/libc/libc-test, PASS 302 / FAIL 0 / XFAIL 20 / FLAKY 1 / TIMEOUT 1 / TOTAL 324
  • bash scripts/dev-shell.sh bash scripts/run-posix-tests.sh: pass, PASS 174 / FAIL 0 / XFAIL 3 / SKIP 2 / TOTAL 179
  • bash scripts/dev-shell.sh bash scripts/check-abi-version.sh: pass

Superseded setup failures are documented in test-runs/kd-p3hr/outcome-lists/full-gate-failed-superseded.txt:

  • bare cargo/fetch-binaries lacked clang outside dev-shell
  • initial host vitest lacked generated rootfs/wasm64 fixtures
  • initial libc run lacked initialized tests/libc/libc-test
  • Vitest JSON reporter produced durable outcome lists but classified 13 tests as failed despite the normal reporter gate passing and exiting 0

Follow-ups

  • kd-mt3u: restore broader CPython stdlib runtime support (json/re coverage)
  • kd-k7zy: package Perl generated core runtime files such as XSLoader.pm
  • kd-egn1: enable Ruby psych/YAML support
  • kd-fyqz: add a package-specific Erlang BEAM runtime smoke harness
  • kd-eo3w: stabilize verification fixture bootstrap when release cache misses

Node/browser sidecar smoke status

Formula-level Kandelo runtime checks ran through Homebrew test do during local bottle dry-runs where package-specific runtime checks are available. Erlang remains artifact-only and is tracked by kd-fyqz.

Sidecar-based Node and browser Homebrew smokes were not run against these local dry-run bottles because those smokes require trusted GHCR bottle URLs, published tap bottle do blocks, and generated Kandelo/ sidecars. The durable skip reason is recorded at test-runs/kd-p3hr/outcome-lists/homebrew-node-browser-smoke-status.txt; kd-yuef is the blocked consumer for trusted sidecar publication/smoke handoff.

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown

Phase B-1 matrix build status — pr-810-staging

ABI v16. 56 built, 12 failed, 68 total.

Package Arch Status Sha
libcurl wasm32 built e555b9aa
libcxx wasm32 built e9bb60b4
libcxx wasm64 built dcb175bc
libpng wasm32 built d5776b16
libxml2 wasm32 built ecd4f487
libxml2 wasm64 built 6bed3651
openssl wasm32 built 4ea4bf1b
openssl wasm64 built 647c885d
sqlite wasm32 built 36fe40f3
sqlite wasm64 built 9ee828c2
zlib wasm32 built 107d93dd
zlib wasm64 built 099a5ba6
bc wasm32 built e1bccc81
bzip2 wasm32 built 541c679a
coreutils wasm32 built 563ff76c
curl wasm32 built caee0a68
dash wasm32 built 370c2741
diffutils wasm32 built 1f22e847
dinit wasm32 built 1eb7f738
fbdoom wasm32 built 2e88b44b
file wasm32 built 7c68c63e
findutils wasm32 built e36ab8d8
gawk wasm32 built d92c583c
git wasm32 built 7a98205a
grep wasm32 built 09a16928
gzip wasm32 built 87104f6e
hello wasm32 built a35f331d
kandelo-sdk wasm32 built d8307c1c
kernel wasm32 built 99b04996
less wasm32 built a6ce1ee8
lsof wasm32 built f34f5b9a
m4 wasm32 built 92378db0
make wasm32 built c14a17c2
mariadb wasm32 built 57603082
mariadb wasm64 built 9fa7cdb5
modeset wasm32 built 6da7586c
msmtpd wasm32 built b06d7fa3
nano wasm32 failed
ncurses wasm32 failed
netcat wasm32 built 85271d4b
nginx wasm32 built b597e39e
php wasm32 built 717d9dc3
posix-utils-lite wasm32 built fce605df
sed wasm32 built 91541baf
spidermonkey wasm32 built 7ba2a98c
tar wasm32 built 0d64a7da
tcl wasm32 built 14a8eef0
unzip wasm32 built ac4fe644
userspace wasm32 built 59415379
vim wasm32 failed
wget wasm32 built 1e2b3190
xz wasm32 built ead3a075
zip wasm32 built 2fdf80be
zstd wasm32 built 1bf2b9dc
bash wasm32 failed
mariadb-test wasm32 built a1ce20b6
mariadb-vfs wasm32 built 616d37e6
mariadb-vfs wasm64 built b965cf4b
nethack wasm32 failed
node wasm32 built 0444a979
spidermonkey-node wasm32 built b1de9005
vim-browser-bundle wasm32 failed
nethack-browser-bundle wasm32 failed
rootfs wasm32 failed
shell wasm32 failed
lamp wasm32 failed
node-vfs wasm32 failed
wordpress wasm32 failed

Auto-generated; replaced on each push. Raw data in the publish-status workflow artifact.

This branch's first Ruby port removed psych/YAML (dropped the libyaml build block,
--with-out-ext=...,psych, psych out of STATIC_EXTINITS/EXTOBJS/EXTLIBS). Runtime
verification in kd-egn1 (PR #814) shows psych/YAML actually works on Kandelo
(psych=5.3.1, libyaml=0.2.5), so the removal was an unnecessary regression that
would strip psych from main once this merges.

Reconcile per coordinator decision (kd-egn1 owns Ruby): revert
packages/registry/ruby/build-ruby.sh to origin/main (known-good psych) and delete
this branch's homebrew/kandelo-homebrew/Formula/ruby.rb so #814's ruby.rb is the
sole ruby formula. This branch no longer touches Ruby vs main; its other language
runtimes (perl/cpython/php/erlang/texlive) are unchanged.

This branch's resolver-contract / sysroot-avoidance edits to build-ruby.sh are
preserved for a follow-up (test-runs/kd-egn1/810-reconcile/) rather than lost.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…b-less runtime

This branch's cpython build shipped only python.wasm with no stdlib packaged, so the
runtime could not import re/json (json imports re). PR #818 (kd-mt3u) fixes this by
shipping lib/python3.13 as a package output. Per coordinator decision (kd-mt3u owns
cpython): revert packages/registry/cpython/build-cpython.sh to origin/main and delete
this branch's homebrew/kandelo-homebrew/Formula/cpython.rb so #818's cpython is the
sole owner. This branch no longer touches CPython vs main; its other language runtimes
(perl/php/erlang/texlive) are unchanged.

This branch's resolver-contract / arch edits to build-cpython.sh are preserved for a
follow-up (test-runs/kd-mt3u/810-reconcile/810-cpython-build-arch-edits.patch).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…s bottle

This branch's perl.rb staged the runtime by globbing the source tree, which
could not include the generated XSLoader.pm (never produced by `make perl`), so
File::Spec failed. PR #821 (kd-k7zy) fixes this end to end: it generates the
core-module runtime, packages it as perl-runtime.zip, statically links the core
XS (Kandelo wasm has no dlopen), and fixes the target -fno-strict-aliasing
miscompile -- File::Spec/POSIX/Cwd/XSLoader all load (Node-verified).

Per coordinator decision (kd-k7zy owns Perl, same resolution as ruby->#814 /
cpython->#818): revert packages/registry/perl/build-perl.sh to origin/main and
delete this branch's homebrew/kandelo-homebrew/Formula/perl.rb so #821's perl is
the sole owner. This branch no longer touches Perl vs main; php/erlang/texlive
are unchanged. #810's build-perl.sh delta was purely the resolver-contract
refactor, which #821 already carries, so nothing is preserved separately.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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