This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-java.git


The following commit(s) were added to refs/heads/main by this push:
     new 55868214c GH-1305: [CI] Drop x86_64 macOS from JNI builds (#1306)
55868214c is described below

commit 55868214cd4b3c1f1e7294b5d74155ba8cceeaaf
Author: JB Onofré <[email protected]>
AuthorDate: Mon Sep 21 13:05:22 2026 +0200

    GH-1305: [CI] Drop x86_64 macOS from JNI builds (#1306)
    
    ### Rationale for this change
    
    Homebrew treats x86_64 macOS as a [tier 3
    configuration](https://docs.brew.sh/Support-Tiers#tier-3) and rarely
    builds bottles for it. `brew bundle` doesn't build from source, so the
    `JNI macos-15-intel x86_64` job in the RC workflow aborts in `Install
    dependencies` with `no bottle available!` before anything is compiled.
    
    We've been patching this formula by formula:
    
    * #1269 skipped `aws-sdk-cpp` and gRPC.
    * #1270 skipped Node.js.
    
    Any new dependency added to `apache/arrow`'s `cpp/Brewfile` can break
    the job again the same way, and nightly RC runs go red on `main` when it
    does. We can't keep this job green on a configuration Homebrew doesn't
    support.
    
    #1269 noted that dropping the `macos-15-intel` entry needed its own
    discussion because it's user-facing. #1305 is that discussion.
    
    ### What changes are included in this PR?
    
    `rc.yml`:
    
    * Removed the `macos-15-intel` / `x86_64` entry from the `jni-macos`
    matrix.
    * `binaries` no longer extracts `jni-macos-x86_64.tar.gz` nor asserts
    the four `jni/*/x86_64/*.dylib` files.
    * Dropped the `/usr/local` `python@XXX --overwrite` conflict loop. Its
    comment already said it could go once we dropped `macos-15-intel`, since
    `macos-14` and later on arm64 use `/opt/homebrew`. `brew update` is
    kept.
    * Unwrapped the `pkg-config` uninstall from its `if [ "$(uname -m)" =
    "arm64" ]` guard, which is now always true.
    * Trimmed the tier-3 justification from the `HOMEBREW_BUNDLE_BREW_SKIP`
    comment. The skip list itself is unchanged: `aws-sdk-cpp` and gRPC are
    still skipped so the bundled static ones are used, and Node.js is still
    skipped because the JNI build doesn't need it.
    
    `test.yml`:
    
    * Removed the `AMD64` / `macos-15-intel` entry from the `macos` test
    matrix, leaving `AArch64` on `macos-latest`.
    
    `ci/scripts/jni_macos_build.sh` is untouched, so building the JNI
    libraries locally on an Intel Mac still works.
    
    ### Are these changes tested?
    
    Yes, by CI. The remaining `JNI macos-14 aarch_64` job exercises the
    changed `Install dependencies` step, and `binaries` exercises the
    changed artifact extraction and verification.
    
    ### Are there any user-facing changes?
    
    Yes. Release JARs no longer bundle x86_64 macOS `.dylib` files for
    `arrow_cdata_jni`, `arrow_dataset_jni`, `arrow_orc_jni` and
    `gandiva_jni`. Intel Mac users of those modules will need to build the
    JNI libraries themselves. aarch64 macOS, x86_64 and aarch64 Linux, and
    x86_64 Windows are unaffected.
    
    Closes #1305.
---
 .github/workflows/rc.yml   | 46 ++++++----------------------------------------
 .github/workflows/test.yml |  3 ---
 2 files changed, 6 insertions(+), 43 deletions(-)

diff --git a/.github/workflows/rc.yml b/.github/workflows/rc.yml
index 34623b401..15d417725 100644
--- a/.github/workflows/rc.yml
+++ b/.github/workflows/rc.yml
@@ -162,7 +162,6 @@ jobs:
       fail-fast: false
       matrix:
         platform:
-          - { runs_on: macos-15-intel, arch: "x86_64"}
           - { runs_on: macos-14, arch: "aarch_64" }
     env:
       MACOSX_DEPLOYMENT_TARGET: "14.0"
@@ -211,46 +210,19 @@ jobs:
           # llvm@14 because llvm is newer than llvm@14.
           brew uninstall llvm || :
 
-          # We can remove this when we drop support for
-          # macos-15-intel. because macos-14 or later with arm64 uses 
/opt/homebrew/
-          # not /usr/local/.
-          #
-          # Ensure updating python@XXX with the "--overwrite" option.
-          # If python@XXX is updated without "--overwrite", it causes
-          # a conflict error. Because Python 3 installed not by
-          # Homebrew exists in /usr/local on GitHub Actions. If
-          # Homebrew's python@XXX is updated without "--overwrite", it
-          # tries to replace /usr/local/bin/2to3 and so on and causes
-          # a conflict error.
           brew update
-          for python_package in $(brew list | grep python@ | sort -r); do
-            brew install --overwrite ${python_package}
-          done
-          brew install --overwrite python3
 
-          if [ "$(uname -m)" = "arm64" ]; then
-            # pkg-config formula is deprecated but it's still installed
-            # in GitHub Actions runner now. We can remove this once
-            # pkg-config formula is removed from GitHub Actions runner.
-            brew uninstall pkg-config || :
-            brew uninstall [email protected] || :
-          fi
+          # pkg-config formula is deprecated but it's still installed
+          # in GitHub Actions runner now. We can remove this once
+          # pkg-config formula is removed from GitHub Actions runner.
+          brew uninstall pkg-config || :
+          brew uninstall [email protected] || :
 
           # We don't use Homebrew's aws-sdk-cpp and gRPC. See the
           # "brew uninstall" calls below for details. So we don't install
           # them instead of installing and uninstalling them.
           #
-          # This is also needed because Homebrew doesn't provide bottles
-          # for them on x86_64 macOS. Homebrew treats x86_64 macOS as a
-          # tier 3 configuration and rarely builds bottles for it:
-          #
-          #   https://docs.brew.sh/Support-Tiers#tier-3
-          #
-          # "brew bundle" fails with "no bottle available!" without this
-          # because it doesn't build them from source.
-          #
-          # We don't use Homebrew's Node.js too. Homebrew doesn't provide
-          # a bottle for it on x86_64 macOS for the same reason.
+          # We don't need Homebrew's Node.js for the JNI build either.
           HOMEBREW_BUNDLE_BREW_SKIP="aws-sdk-cpp grpc node" \
             brew bundle --file=arrow/cpp/Brewfile
           # We want to link aws-sdk-cpp statically but Homebrew's
@@ -388,7 +360,6 @@ jobs:
           tar -xf apache-arrow-java-*.tar.gz --strip-components=1
           tar -xvzf jni-linux-x86_64.tar.gz
           tar -xvzf jni-linux-aarch_64.tar.gz
-          tar -xvzf jni-macos-x86_64.tar.gz
           tar -xvzf jni-macos-aarch_64.tar.gz
           tar -xvzf jni-windows-x86_64.tar.gz
       - name: Test that shared libraries exist
@@ -405,11 +376,6 @@ jobs:
           test -f jni/arrow_orc_jni/aarch_64/libarrow_orc_jni.so
           test -f jni/gandiva_jni/aarch_64/libgandiva_jni.so
 
-          test -f jni/arrow_cdata_jni/x86_64/libarrow_cdata_jni.dylib
-          test -f jni/arrow_dataset_jni/x86_64/libarrow_dataset_jni.dylib
-          test -f jni/arrow_orc_jni/x86_64/libarrow_orc_jni.dylib
-          test -f jni/gandiva_jni/x86_64/libgandiva_jni.dylib
-
           test -f jni/arrow_cdata_jni/aarch_64/libarrow_cdata_jni.dylib
           test -f jni/arrow_dataset_jni/aarch_64/libarrow_dataset_jni.dylib
           test -f jni/arrow_orc_jni/aarch_64/libarrow_orc_jni.dylib
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 63384b5d3..b9cd01a77 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -87,9 +87,6 @@ jobs:
       fail-fast: false
       matrix:
         include:
-          - arch: AMD64
-            jdk: 17
-            macos: 15-intel
           - arch: AArch64
             jdk: 17
             macos: latest

Reply via email to