Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions .github/workflows/cpp_extra.yml
Original file line number Diff line number Diff line change
Expand Up @@ -672,6 +672,13 @@ jobs:
name: flight-sql-odbc-pkg-installer-${{ matrix.architecture }}
path: build/cpp/ArrowFlightSQLODBC-*.pkg
if-no-files-found: error
- name: Upload Intel ODBC dylib to the job
if: matrix.build-type == 'release' && matrix.architecture == 'AMD64'
uses: actions/upload-artifact@v7
with:
name: flight-sql-odbc-dylib-${{ matrix.architecture }}
path: build/cpp/${{ matrix.build-type }}/libarrow_flight_sql_odbc.dylib
if-no-files-found: error
- name: Register Flight SQL ODBC Driver
run: |
sudo cpp/src/arrow/flight/sql/odbc/install/unix/install_odbc.sh $(pwd)/build/cpp/${{ matrix.build-type }}/libarrow_flight_sql_odbc.dylib
Expand All @@ -686,6 +693,101 @@ jobs:
sudo chown -R $USER /Library/ODBC
ci/scripts/cpp_test.sh $(pwd) $(pwd)/build

odbc-macos-universal:
needs: odbc-macos
if: needs.check-enabled.outputs.is_enabled == 'true'
name: ODBC universal macOS installer
runs-on: macos-14
timeout-minutes: 30
steps:
- name: Download ARM64 PKG
uses: actions/download-artifact@v8
with:
name: flight-sql-odbc-pkg-installer-ARM64
path: arm64-pkg
- name: Download AMD64 dylib
uses: actions/download-artifact@v8
with:
name: flight-sql-odbc-dylib-AMD64
path: amd64-dylib
- name: Build universal macOS installer
run: |
set -euo pipefail

pkg_path="$(ls arm64-pkg/ArrowFlightSQLODBC-*.pkg)"
pkg_name="$(basename "${pkg_path}" .pkg)"

# Use the ARM64 .pkg and swap in a universal ODBC dylib
# that works on ARM64 and AMD64.
pkgutil --expand-full "${pkg_path}" expanded

dylib_path="$(find expanded -name libarrow_flight_sql_odbc.dylib)"
lipo -create "${dylib_path}" amd64-dylib/libarrow_flight_sql_odbc.dylib \
-output "${dylib_path}"

dylib_archs="$(lipo -archs "${dylib_path}")"
echo "Universal dylib architectures: ${dylib_archs}"
for arch in arm64 x86_64; do
if ! grep -qw "${arch}" <<< "${dylib_archs}"; then
echo "Universal dylib is missing '${arch}' (got: ${dylib_archs})"
exit 1
fi
done

pkgutil --flatten-full expanded "${pkg_name}.pkg"
- name: Upload universal ODBC PKG
uses: actions/upload-artifact@v7
with:
name: flight-sql-odbc-pkg-installer-universal
path: ArrowFlightSQLODBC-*.pkg
if-no-files-found: error

odbc-macos-universal-verify:
needs: odbc-macos-universal
if: needs.check-enabled.outputs.is_enabled == 'true'
name: ODBC universal installer verify ${{ matrix.architecture }} macOS ${{ matrix.macos-version }}
runs-on: macos-${{ matrix.macos-version }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
include:
- architecture: AMD64
macos-version: "15-intel"
- architecture: ARM64
macos-version: "14"
steps:
- name: Download universal PKG
uses: actions/download-artifact@v8
with:
name: flight-sql-odbc-pkg-installer-universal
- name: Install ODBC PKG
run: |
set -euo pipefail

pkg_path="$(ls ArrowFlightSQLODBC-*.pkg)"
sudo installer -pkg "${pkg_path}" -target / -verbose
- name: Check ODBC dylib installation
run: |
set -euo pipefail

dylib="/Library/ODBC/arrow-odbc/lib/libarrow_flight_sql_odbc.dylib"

if [ ! -f "${dylib}" ]; then
echo "ODBC dylib not found at ${dylib}"
exit 1
fi
echo "Found ODBC dylib: ${dylib}"

local_arch="$(uname -m)"
archs="$(lipo -archs "${dylib}")"
echo "Local architecture: ${local_arch}"
echo "Installed dylib architectures: ${archs}"
if ! grep -qw "${local_arch}" <<< "${archs}"; then
echo "Installed ODBC dylib does not support local architecture '${local_arch}' (got: ${archs})"
exit 1
fi

odbc-msvc:
needs: check-enabled
if: needs.check-enabled.outputs.is_enabled == 'true'
Expand Down Expand Up @@ -856,6 +958,8 @@ jobs:
- msvc-arm64
- odbc-linux
- odbc-macos
- odbc-macos-universal
- odbc-macos-universal-verify
- odbc-msvc
- odbc-nightly
uses: ./.github/workflows/report_ci.yml
Expand Down
Loading