C++ Extra #131
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Licensed to the Apache Software Foundation (ASF) under one | |
# or more contributor license agreements. See the NOTICE file | |
# distributed with this work for additional information | |
# regarding copyright ownership. The ASF licenses this file | |
# to you under the Apache License, Version 2.0 (the | |
# "License"); you may not use this file except in compliance | |
# with the License. You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, | |
# software distributed under the License is distributed on an | |
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
# KIND, either express or implied. See the License for the | |
# specific language governing permissions and limitations | |
# under the License. | |
name: C++ Extra | |
on: | |
push: | |
branches: | |
- '**' | |
- '!dependabot/**' | |
paths: | |
- '.dockerignore' | |
- '.github/workflows/cpp_extra.yml' | |
- 'ci/conda_env_*' | |
- 'ci/docker/**' | |
- 'ci/scripts/ccache_setup.sh' | |
- 'ci/scripts/cpp_*' | |
- 'ci/scripts/install_azurite.sh' | |
- 'ci/scripts/install_gcs_testbench.sh' | |
- 'ci/scripts/install_minio.sh' | |
- 'ci/scripts/msys2_*' | |
- 'ci/scripts/util_*' | |
- 'cpp/**' | |
- 'docker-compose.yml' | |
- 'format/Flight.proto' | |
- 'testing' | |
tags: | |
- '**' | |
pull_request: | |
paths: | |
- '.dockerignore' | |
- '.github/workflows/cpp_extra.yml' | |
- 'ci/conda_env_*' | |
- 'ci/docker/**' | |
- 'ci/scripts/ccache_setup.sh' | |
- 'ci/scripts/cpp_*' | |
- 'ci/scripts/install_azurite.sh' | |
- 'ci/scripts/install_gcs_testbench.sh' | |
- 'ci/scripts/install_minio.sh' | |
- 'ci/scripts/msys2_*' | |
- 'ci/scripts/util_*' | |
- 'cpp/**' | |
- 'docker-compose.yml' | |
- 'format/Flight.proto' | |
- 'testing' | |
types: | |
- labeled | |
- opened | |
- reopened | |
- synchronize | |
schedule: | |
- cron: | | |
0 0 * * * | |
concurrency: | |
group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }} | |
cancel-in-progress: true | |
permissions: | |
contents: read | |
jobs: | |
check-labels: | |
name: Check labels | |
runs-on: ubuntu-latest | |
timeout-minutes: 5 | |
outputs: | |
ci-extra: ${{ steps.check.outputs.ci-extra }} | |
steps: | |
- name: Checkout Arrow | |
if: github.event_name == 'pull_request' | |
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
- name: Check | |
id: check | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
case "${GITHUB_EVENT_NAME}" in | |
push|schedule) | |
ci_extra=true | |
;; | |
pull_request) | |
n_ci_extra_labels=$( | |
gh pr view ${{ github.event.number }} \ | |
--jq '.labels[].name | select(. == "CI: Extra")' \ | |
--json labels \ | |
--repo ${GITHUB_REPOSITORY} | wc -l) | |
if [ "${n_ci_extra_labels}" -eq 1 ]; then | |
ci_extra=true | |
else | |
git fetch origin ${GITHUB_BASE_REF} | |
if git diff --stat origin/${GITHUB_BASE_REF}.. | \ | |
grep \ | |
--fixed-strings ".github/workflows/cpp_extra.yml" \ | |
--quiet; then | |
ci_extra=true | |
else | |
ci_extra=false | |
fi | |
fi | |
;; | |
esac | |
echo "ci-extra=${ci_extra}" >> "${GITHUB_OUTPUT}" | |
docker: | |
needs: check-labels | |
name: ${{ matrix.title }} | |
runs-on: ${{ matrix.runs-on }} | |
if: needs.check-labels.outputs.ci-extra == 'true' | |
timeout-minutes: 75 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- image: alpine-linux-cpp | |
runs-on: ubuntu-latest | |
title: AMD64 Alpine Linux | |
- image: conda-cpp | |
run-options: >- | |
-e ARROW_USE_MESON=ON | |
runs-on: ubuntu-latest | |
title: AMD64 Ubuntu Meson | |
# TODO: We should remove this "continue-on-error: true" once GH-47207 is resolved | |
- continue-on-error: true | |
envs: | |
- DEBIAN=13 | |
image: debian-cpp | |
run-options: >- | |
-e CMAKE_CXX_STANDARD=23 | |
runs-on: ubuntu-latest | |
title: AMD64 Debian C++23 | |
env: | |
ARCHERY_DEBUG: 1 | |
ARROW_ENABLE_TIMING_TESTS: OFF | |
DOCKER_VOLUME_PREFIX: ".docker/" | |
steps: | |
- name: Checkout Arrow | |
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
with: | |
fetch-depth: 0 | |
submodules: recursive | |
- name: Cache Docker Volumes | |
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 | |
with: | |
path: .docker | |
key: extra-${{ matrix.image }}-${{ hashFiles('cpp/**') }} | |
restore-keys: extra-${{ matrix.image }}- | |
- name: Setup Python | |
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 | |
with: | |
python-version: 3 | |
- name: Setup Archery | |
run: python3 -m pip install -e dev/archery[docker] | |
- name: Execute Docker Build | |
continue-on-error: ${{ matrix.continue-on-error || false }} | |
env: | |
ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} | |
ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} | |
ENVS: ${{ toJSON(matrix.envs) }} | |
run: | | |
# GH-40558: reduce ASLR to avoid ASAN/LSAN crashes | |
sudo sysctl -w vm.mmap_rnd_bits=28 | |
source ci/scripts/util_enable_core_dumps.sh | |
if [ "${ENVS}" != "null" ]; then | |
echo "${ENVS}" | jq -r '.[]' | while read env; do | |
echo "${env}" >> .env | |
done | |
fi | |
archery docker run ${{ matrix.run-options || '' }} ${{ matrix.image }} | |
- name: Docker Push | |
if: >- | |
success() && | |
github.event_name == 'push' && | |
github.repository == 'apache/arrow' && | |
github.ref_name == 'main' | |
env: | |
ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} | |
ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} | |
continue-on-error: true | |
run: archery docker push ${{ matrix.image }} | |
jni-macos: | |
needs: check-labels | |
name: JNI macOS | |
runs-on: macos-14 | |
if: needs.check-labels.outputs.ci-extra == 'true' | |
timeout-minutes: 45 | |
env: | |
MACOSX_DEPLOYMENT_TARGET: "14.0" | |
steps: | |
- name: Checkout Arrow | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
fetch-depth: 0 | |
submodules: recursive | |
- name: Install dependencies | |
run: | | |
brew bundle --file=cpp/Brewfile | |
# We want to link aws-sdk-cpp statically but Homebrew's | |
# aws-sdk-cpp provides only shared library. If we have | |
# Homebrew's aws-sdk-cpp, our build mix Homebrew's | |
# aws-sdk-cpp and bundled aws-sdk-cpp. We uninstall Homebrew's | |
# aws-sdk-cpp to ensure using only bundled aws-sdk-cpp. | |
brew uninstall aws-sdk-cpp | |
# We want to use bundled RE2 for static linking. If | |
# Homebrew's RE2 is installed, its header file may be used. | |
# We uninstall Homebrew's RE2 to ensure using bundled RE2. | |
brew uninstall grpc || : # gRPC depends on RE2 | |
brew uninstall [email protected] || : # gRPC 1.54 may be installed too | |
brew uninstall re2 | |
# We want to use bundled Protobuf for static linking. If | |
# Homebrew's Protobuf is installed, its library file may be | |
# used on test We uninstall Homebrew's Protobuf to ensure using | |
# bundled Protobuf. | |
brew uninstall protobuf | |
- name: Prepare ccache | |
run: | | |
echo "CCACHE_DIR=${PWD}/ccache" >> ${GITHUB_ENV} | |
- name: Cache ccache | |
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 | |
with: | |
path: ccache | |
key: jni-macos-${{ hashFiles('cpp/**') }} | |
restore-keys: jni-macos- | |
- name: CMake | |
run: | | |
cmake \ | |
-S cpp \ | |
-B cpp.build \ | |
--preset=ninja-release-jni-macos \ | |
-DARROW_BUILD_TESTS=ON \ | |
-DCMAKE_INSTALL_PREFIX=$PWD/cpp.install | |
- name: Build | |
run: | | |
cmake --build cpp.build | |
- name: Install | |
run: | | |
cmake --install cpp.build | |
- name: Test | |
env: | |
ARROW_TEST_DATA: ${{ github.workspace }}/testing/data | |
PARQUET_TEST_DATA: ${{ github.workspace }}/cpp/submodules/parquet-testing/data | |
run: | | |
# MinIO is required | |
exclude_tests="arrow-s3fs-test" | |
# unstable | |
exclude_tests="${exclude_tests}|arrow-acero-asof-join-node-test" | |
exclude_tests="${exclude_tests}|arrow-acero-hash-join-node-test" | |
ctest \ | |
--exclude-regex "${exclude_tests}" \ | |
--label-regex unittest \ | |
--output-on-failure \ | |
--parallel "$(sysctl -n hw.ncpu)" \ | |
--test-dir "cpp.build" \ | |
--timeout 300 | |
- name: Build example | |
run: | | |
cmake \ | |
-S cpp/examples/minimal_build/ \ | |
-B cpp/examples/minimal_build.build \ | |
-GNinja \ | |
-DCMAKE_INSTALL_PREFIX=$PWD/cpp.install | |
cmake --build cpp/examples/minimal_build.build | |
cd cpp/examples/minimal_build | |
../minimal_build.build/arrow-example |