From e42f8164dece7b349cdb43f22740d908544aa5a1 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 2 Apr 2026 12:48:45 +0000 Subject: [PATCH 1/4] packaging: allow local js gem installs in nightly npm builds Co-authored-by: Shelley --- rakelib/packaging.rake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rakelib/packaging.rake b/rakelib/packaging.rake index e5259017c..ab70a4195 100644 --- a/rakelib/packaging.rake +++ b/rakelib/packaging.rake @@ -94,8 +94,10 @@ def build_ruby(pkg, base_dir, pkg_dir, binaryen, clean: false) Dir.chdir(cwd) do # uninstall js gem to re-install just-built js gem sh "gem", "uninstall", "js", "-v", js_gem_version, "--force" - # install gems including js gem - sh "bundle", "install" + # install gems including js gem. Bundler may compare checksums with + # rubygems.org for the same version and reject our just-built local gem. + # Disable checksum validation only for this install command. + sh({ "BUNDLE_DISABLE_CHECKSUM_VALIDATION" => "true" }, "bundle", "install") sh env, "bundle", "exec", From 0c2e2680255eb2c6a722215d6533dcfa1d91a520 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 2 Apr 2026 22:39:26 +0000 Subject: [PATCH 2/4] ci: pin cross-gem docker tag to rb-sys version in Cargo.lock --- .github/workflows/build-gems.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/build-gems.yml b/.github/workflows/build-gems.yml index 8cf8e6324..7d314e90d 100644 --- a/.github/workflows/build-gems.yml +++ b/.github/workflows/build-gems.yml @@ -46,11 +46,22 @@ jobs: with: ruby-version: "3.4" + - name: Detect rb-sys version from Cargo.lock + id: rb-sys + run: | + version="$(awk '/name = "rb-sys"/{flag=1; next} flag && /version = / {gsub(/"/, "", $3); print $3; exit}' Cargo.lock)" + if [ -z "$version" ]; then + echo "Failed to detect rb-sys version from Cargo.lock" >&2 + exit 1 + fi + echo "version=$version" >> "$GITHUB_OUTPUT" + - uses: oxidize-rb/actions/cross-gem@v1 id: cross-gem with: platform: ${{ matrix.ruby-platform }} ruby-versions: ${{ join(fromJSON(needs.ci-data.outputs.result).stable-ruby-versions, ',') }} + tag: ${{ steps.rb-sys.outputs.version }} - uses: actions/upload-artifact@v7 with: From 6b28b1a3f843a8550fa855115b1835fca870a350 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 2 Apr 2026 22:44:02 +0000 Subject: [PATCH 3/4] ci: bypass cross-gem action to pin rb-sys/rb-sys-dock versions --- .github/workflows/build-gems.yml | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-gems.yml b/.github/workflows/build-gems.yml index 7d314e90d..0a4ed6ecd 100644 --- a/.github/workflows/build-gems.yml +++ b/.github/workflows/build-gems.yml @@ -56,12 +56,23 @@ jobs: fi echo "version=$version" >> "$GITHUB_OUTPUT" - - uses: oxidize-rb/actions/cross-gem@v1 + - name: Build native gem with rb-sys-dock id: cross-gem - with: - platform: ${{ matrix.ruby-platform }} - ruby-versions: ${{ join(fromJSON(needs.ci-data.outputs.result).stable-ruby-versions, ',') }} - tag: ${{ steps.rb-sys.outputs.version }} + env: + PLATFORM: ${{ matrix.ruby-platform }} + RUBY_VERSIONS: ${{ join(fromJSON(needs.ci-data.outputs.result).stable-ruby-versions, ',') }} + RB_SYS_VERSION: ${{ steps.rb-sys.outputs.version }} + run: | + gem install rb_sys -v "$RB_SYS_VERSION" + rb-sys-dock --platform "$PLATFORM" --directory . --ruby-versions "$RUBY_VERSIONS" --tag "$RB_SYS_VERSION" --build + + gem_path="$(find ./pkg -name "*-${PLATFORM}.gem" | head -n1)" + if [ -z "$gem_path" ]; then + echo "Failed to find built gem for ${PLATFORM}" >&2 + ls -la ./pkg || true + exit 1 + fi + echo "gem-path=$gem_path" >> "$GITHUB_OUTPUT" - uses: actions/upload-artifact@v7 with: From adac5a559f631833aab9ff50c32da62976eeb52d Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Fri, 3 Apr 2026 14:22:03 +0000 Subject: [PATCH 4/4] packaging: disable checksum validation for all npm package gem installs --- rakelib/packaging.rake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rakelib/packaging.rake b/rakelib/packaging.rake index ab70a4195..3f3df00d9 100644 --- a/rakelib/packaging.rake +++ b/rakelib/packaging.rake @@ -62,6 +62,9 @@ def build_ruby(pkg, base_dir, pkg_dir, binaryen, clean: false) # Share ./build and ./rubies in the same workspace "RUBY_WASM_ROOT" => base_dir } + # We vendor a freshly built js gem in package workspaces. Bundler checksum + # validation against rubygems.org can fail for the same version. + env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true" if pkg[:gemfile] cwd = base_dir if gemfile_path = pkg[:gemfile] cwd = File.dirname(gemfile_path)