From f596540d9e45782983f1056bc7c2ca2880ad1fd5 Mon Sep 17 00:00:00 2001 From: Yask Srivastava <1812021+yask123@users.noreply.github.com> Date: Mon, 28 Sep 2026 16:04:04 -0700 Subject: [PATCH 1/2] Build precompiled gems for Ruby 3.0, 3.1 and 3.2 The platform gems declare >= 2.7, < 3.5.dev, but only 2.7, 3.3 and 3.4 were built, so require fails on 3.0-3.2 after the platform gem installs. --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f2e9a4c..3f69195 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,7 +61,7 @@ jobs: id: cross-gem with: platform: ${{ matrix.platform }} - ruby-versions: "2.7,3.3,3.4" + ruby-versions: "2.7,3.0,3.1,3.2,3.3,3.4" cache-version: v4 pre-script: rustup update stable && rustup target add "$RUST_TARGET" @@ -108,7 +108,7 @@ jobs: strategy: fail-fast: false matrix: - ruby: ["2.7", "3.4"] + ruby: ["2.7", "3.0", "3.4"] steps: - uses: actions/checkout@v6 with: From b68862cc9c3b03947c76873f2a0d5fa85947f4c1 Mon Sep 17 00:00:00 2001 From: Yask Srivastava <1812021+yask123@users.noreply.github.com> Date: Mon, 28 Sep 2026 16:04:04 -0700 Subject: [PATCH 2/2] Fix BoringSSL symbol prefixing in aarch64-linux gems The x86_64 cross image's objcopy exits cleanly without rewriting aarch64 archives, so the extension referenced prefixed symbols that were never defined. --- .github/workflows/release.yml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3f69195..41c3885 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -62,8 +62,16 @@ jobs: with: platform: ${{ matrix.platform }} ruby-versions: "2.7,3.0,3.1,3.2,3.3,3.4" - cache-version: v4 - pre-script: rustup update stable && rustup target add "$RUST_TARGET" + cache-version: v5 + # btls-sys prefixes BoringSSL symbols with a bare `objcopy`, and the image's + # x86_64 one exits cleanly without touching aarch64 archives. + pre-script: >- + rustup update stable && rustup target add "$RUST_TARGET" && + if [ "$RUST_TARGET" = aarch64-unknown-linux-gnu ]; then + mkdir -p /tmp/xbin && + ln -sf /usr/bin/aarch64-linux-gnu-objcopy /tmp/xbin/objcopy && + ln -sf /usr/bin/aarch64-linux-gnu-nm /tmp/xbin/nm && + export PATH="/tmp/xbin:$PATH"; fi - uses: actions/upload-artifact@v6 with: @@ -102,12 +110,13 @@ jobs: run: ruby -Itest -e 'Dir.glob("test/**/*_test.rb").each { |f| require File.expand_path(f) }' test-cross-gem: - name: Test cross gem / Ruby ${{ matrix.ruby }} + name: Test cross gem / ${{ matrix.platform }} / Ruby ${{ matrix.ruby }} needs: [cross-gem] - runs-on: ubuntu-latest + runs-on: ${{ matrix.platform == 'aarch64-linux' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} strategy: fail-fast: false matrix: + platform: [x86_64-linux, aarch64-linux] ruby: ["2.7", "3.0", "3.4"] steps: - uses: actions/checkout@v6 @@ -121,7 +130,7 @@ jobs: - uses: actions/download-artifact@v6 with: - name: cross-gem-x86_64-linux + name: cross-gem-${{ matrix.platform }} path: gems - name: Install gem