2727 - ' .github/workflows/cpp_extra.yml'
2828 - ' ci/conda_env_*'
2929 - ' ci/docker/**'
30+ - ' ci/scripts/ccache_setup.sh'
3031 - ' ci/scripts/cpp_*'
3132 - ' ci/scripts/install_azurite.sh'
3233 - ' ci/scripts/install_gcs_testbench.sh'
4546 - ' .github/workflows/cpp_extra.yml'
4647 - ' ci/conda_env_*'
4748 - ' ci/docker/**'
49+ - ' ci/scripts/ccache_setup.sh'
4850 - ' ci/scripts/cpp_*'
4951 - ' ci/scripts/install_azurite.sh'
5052 - ' ci/scripts/install_gcs_testbench.sh'
@@ -79,13 +81,16 @@ jobs:
7981 outputs :
8082 ci-extra : ${{ steps.check.outputs.ci-extra }}
8183 steps :
84+ - name : Checkout Arrow
85+ if : github.event_name == 'pull_request'
86+ uses : actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
8287 - name : Check
8388 id : check
8489 env :
8590 GH_TOKEN : ${{ github.token }}
8691 run : |
8792 case "${GITHUB_EVENT_NAME}" in
88- push|workflow_dispatch )
93+ push|schedule )
8994 ci_extra=true
9095 ;;
9196 pull_request)
@@ -97,7 +102,15 @@ jobs:
97102 if [ "${n_ci_extra_labels}" -eq 1 ]; then
98103 ci_extra=true
99104 else
100- ci_extra=false
105+ git fetch origin ${GITHUB_BASE_REF}
106+ if git diff --stat origin/${GITHUB_BASE_REF}.. | \
107+ grep \
108+ --fixed-strings ".github/workflows/cpp_extra.yml" \
109+ --quiet; then
110+ ci_extra=true
111+ else
112+ ci_extra=false
113+ fi
101114 fi
102115 ;;
103116 esac
@@ -114,18 +127,30 @@ jobs:
114127 fail-fast : false
115128 matrix :
116129 include :
130+ - image : alpine-linux-cpp
131+ runs-on : ubuntu-latest
132+ title : AMD64 Alpine Linux
117133 - image : conda-cpp
118134 run-options : >-
119135 -e ARROW_USE_MESON=ON
120136 runs-on : ubuntu-latest
121137 title : AMD64 Ubuntu Meson
138+ # TODO: We should remove this "continue-on-error: true" once GH-47207 is resolved
139+ - continue-on-error : true
140+ envs :
141+ - DEBIAN=13
142+ image : debian-cpp
143+ run-options : >-
144+ -e CMAKE_CXX_STANDARD=23
145+ runs-on : ubuntu-latest
146+ title : AMD64 Debian C++23
122147 env :
123148 ARCHERY_DEBUG : 1
124149 ARROW_ENABLE_TIMING_TESTS : OFF
125- # DOCKER_VOLUME_PREFIX: ".docker/"
150+ DOCKER_VOLUME_PREFIX : " .docker/"
126151 steps :
127152 - name : Checkout Arrow
128- uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
153+ uses : actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
129154 with :
130155 fetch-depth : 0
131156 submodules : recursive
@@ -142,13 +167,20 @@ jobs:
142167 - name : Setup Archery
143168 run : python3 -m pip install -e dev/archery[docker]
144169 - name : Execute Docker Build
170+ continue-on-error : ${{ matrix.continue-on-error || false }}
145171 env :
146172 ARCHERY_DOCKER_USER : ${{ secrets.DOCKERHUB_USER }}
147173 ARCHERY_DOCKER_PASSWORD : ${{ secrets.DOCKERHUB_TOKEN }}
174+ ENVS : ${{ toJSON(matrix.envs) }}
148175 run : |
149176 # GH-40558: reduce ASLR to avoid ASAN/LSAN crashes
150177 sudo sysctl -w vm.mmap_rnd_bits=28
151178 source ci/scripts/util_enable_core_dumps.sh
179+ if [ "${ENVS}" != "null" ]; then
180+ echo "${ENVS}" | jq -r '.[]' | while read env; do
181+ echo "${env}" >> .env
182+ done
183+ fi
152184 archery docker run ${{ matrix.run-options || '' }} ${{ matrix.image }}
153185 - name : Docker Push
154186 if : >-
@@ -161,3 +193,88 @@ jobs:
161193 ARCHERY_DOCKER_PASSWORD : ${{ secrets.DOCKERHUB_TOKEN }}
162194 continue-on-error : true
163195 run : archery docker push ${{ matrix.image }}
196+
197+ jni-macos :
198+ needs : check-labels
199+ name : JNI macOS
200+ runs-on : macos-14
201+ if : needs.check-labels.outputs.ci-extra == 'true'
202+ timeout-minutes : 45
203+ env :
204+ MACOSX_DEPLOYMENT_TARGET : " 14.0"
205+ steps :
206+ - name : Checkout Arrow
207+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
208+ with :
209+ fetch-depth : 0
210+ submodules : recursive
211+ - name : Install dependencies
212+ run : |
213+ brew bundle --file=cpp/Brewfile
214+ # We want to link aws-sdk-cpp statically but Homebrew's
215+ # aws-sdk-cpp provides only shared library. If we have
216+ # Homebrew's aws-sdk-cpp, our build mix Homebrew's
217+ # aws-sdk-cpp and bundled aws-sdk-cpp. We uninstall Homebrew's
218+ # aws-sdk-cpp to ensure using only bundled aws-sdk-cpp.
219+ brew uninstall aws-sdk-cpp
220+ # We want to use bundled RE2 for static linking. If
221+ # Homebrew's RE2 is installed, its header file may be used.
222+ # We uninstall Homebrew's RE2 to ensure using bundled RE2.
223+ brew uninstall grpc || : # gRPC depends on RE2
224+ brew uninstall grpc@1.54 || : # gRPC 1.54 may be installed too
225+ brew uninstall re2
226+ # We want to use bundled Protobuf for static linking. If
227+ # Homebrew's Protobuf is installed, its library file may be
228+ # used on test We uninstall Homebrew's Protobuf to ensure using
229+ # bundled Protobuf.
230+ brew uninstall protobuf
231+ - name : Prepare ccache
232+ run : |
233+ echo "CCACHE_DIR=${PWD}/ccache" >> ${GITHUB_ENV}
234+ - name : Cache ccache
235+ uses : actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
236+ with :
237+ path : ccache
238+ key : jni-macos-${{ hashFiles('cpp/**') }}
239+ restore-keys : jni-macos-
240+ - name : CMake
241+ run : |
242+ cmake \
243+ -S cpp \
244+ -B cpp.build \
245+ --preset=ninja-release-jni-macos \
246+ -DARROW_BUILD_TESTS=ON \
247+ -DCMAKE_INSTALL_PREFIX=$PWD/cpp.install
248+ - name : Build
249+ run : |
250+ cmake --build cpp.build
251+ - name : Install
252+ run : |
253+ cmake --install cpp.build
254+ - name : Test
255+ env :
256+ ARROW_TEST_DATA : ${{ github.workspace }}/testing/data
257+ PARQUET_TEST_DATA : ${{ github.workspace }}/cpp/submodules/parquet-testing/data
258+ run : |
259+ # MinIO is required
260+ exclude_tests="arrow-s3fs-test"
261+ # unstable
262+ exclude_tests="${exclude_tests}|arrow-acero-asof-join-node-test"
263+ exclude_tests="${exclude_tests}|arrow-acero-hash-join-node-test"
264+ ctest \
265+ --exclude-regex "${exclude_tests}" \
266+ --label-regex unittest \
267+ --output-on-failure \
268+ --parallel "$(sysctl -n hw.ncpu)" \
269+ --test-dir "cpp.build" \
270+ --timeout 300
271+ - name : Build example
272+ run : |
273+ cmake \
274+ -S cpp/examples/minimal_build/ \
275+ -B cpp/examples/minimal_build.build \
276+ -GNinja \
277+ -DCMAKE_INSTALL_PREFIX=$PWD/cpp.install
278+ cmake --build cpp/examples/minimal_build.build
279+ cd cpp/examples/minimal_build
280+ ../minimal_build.build/arrow-example
0 commit comments