Skip to content

Commit 5586821

Browse files
authored
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.
1 parent d035fc8 commit 5586821

2 files changed

Lines changed: 6 additions & 43 deletions

File tree

.github/workflows/rc.yml

Lines changed: 6 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,6 @@ jobs:
162162
fail-fast: false
163163
matrix:
164164
platform:
165-
- { runs_on: macos-15-intel, arch: "x86_64"}
166165
- { runs_on: macos-14, arch: "aarch_64" }
167166
env:
168167
MACOSX_DEPLOYMENT_TARGET: "14.0"
@@ -211,46 +210,19 @@ jobs:
211210
# llvm@14 because llvm is newer than llvm@14.
212211
brew uninstall llvm || :
213212
214-
# We can remove this when we drop support for
215-
# macos-15-intel. because macos-14 or later with arm64 uses /opt/homebrew/
216-
# not /usr/local/.
217-
#
218-
# Ensure updating python@XXX with the "--overwrite" option.
219-
# If python@XXX is updated without "--overwrite", it causes
220-
# a conflict error. Because Python 3 installed not by
221-
# Homebrew exists in /usr/local on GitHub Actions. If
222-
# Homebrew's python@XXX is updated without "--overwrite", it
223-
# tries to replace /usr/local/bin/2to3 and so on and causes
224-
# a conflict error.
225213
brew update
226-
for python_package in $(brew list | grep python@ | sort -r); do
227-
brew install --overwrite ${python_package}
228-
done
229-
brew install --overwrite python3
230214
231-
if [ "$(uname -m)" = "arm64" ]; then
232-
# pkg-config formula is deprecated but it's still installed
233-
# in GitHub Actions runner now. We can remove this once
234-
# pkg-config formula is removed from GitHub Actions runner.
235-
brew uninstall pkg-config || :
236-
brew uninstall pkg-config@0.29.2 || :
237-
fi
215+
# pkg-config formula is deprecated but it's still installed
216+
# in GitHub Actions runner now. We can remove this once
217+
# pkg-config formula is removed from GitHub Actions runner.
218+
brew uninstall pkg-config || :
219+
brew uninstall pkg-config@0.29.2 || :
238220
239221
# We don't use Homebrew's aws-sdk-cpp and gRPC. See the
240222
# "brew uninstall" calls below for details. So we don't install
241223
# them instead of installing and uninstalling them.
242224
#
243-
# This is also needed because Homebrew doesn't provide bottles
244-
# for them on x86_64 macOS. Homebrew treats x86_64 macOS as a
245-
# tier 3 configuration and rarely builds bottles for it:
246-
#
247-
# https://docs.brew.sh/Support-Tiers#tier-3
248-
#
249-
# "brew bundle" fails with "no bottle available!" without this
250-
# because it doesn't build them from source.
251-
#
252-
# We don't use Homebrew's Node.js too. Homebrew doesn't provide
253-
# a bottle for it on x86_64 macOS for the same reason.
225+
# We don't need Homebrew's Node.js for the JNI build either.
254226
HOMEBREW_BUNDLE_BREW_SKIP="aws-sdk-cpp grpc node" \
255227
brew bundle --file=arrow/cpp/Brewfile
256228
# We want to link aws-sdk-cpp statically but Homebrew's
@@ -388,7 +360,6 @@ jobs:
388360
tar -xf apache-arrow-java-*.tar.gz --strip-components=1
389361
tar -xvzf jni-linux-x86_64.tar.gz
390362
tar -xvzf jni-linux-aarch_64.tar.gz
391-
tar -xvzf jni-macos-x86_64.tar.gz
392363
tar -xvzf jni-macos-aarch_64.tar.gz
393364
tar -xvzf jni-windows-x86_64.tar.gz
394365
- name: Test that shared libraries exist
@@ -405,11 +376,6 @@ jobs:
405376
test -f jni/arrow_orc_jni/aarch_64/libarrow_orc_jni.so
406377
test -f jni/gandiva_jni/aarch_64/libgandiva_jni.so
407378
408-
test -f jni/arrow_cdata_jni/x86_64/libarrow_cdata_jni.dylib
409-
test -f jni/arrow_dataset_jni/x86_64/libarrow_dataset_jni.dylib
410-
test -f jni/arrow_orc_jni/x86_64/libarrow_orc_jni.dylib
411-
test -f jni/gandiva_jni/x86_64/libgandiva_jni.dylib
412-
413379
test -f jni/arrow_cdata_jni/aarch_64/libarrow_cdata_jni.dylib
414380
test -f jni/arrow_dataset_jni/aarch_64/libarrow_dataset_jni.dylib
415381
test -f jni/arrow_orc_jni/aarch_64/libarrow_orc_jni.dylib

.github/workflows/test.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,6 @@ jobs:
8787
fail-fast: false
8888
matrix:
8989
include:
90-
- arch: AMD64
91-
jdk: 17
92-
macos: 15-intel
9390
- arch: AArch64
9491
jdk: 17
9592
macos: latest

0 commit comments

Comments
 (0)