| # 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: Test | |
| on: | |
| push: | |
| branches: | |
| - main | |
| tags: | |
| - '**' | |
| pull_request: | |
| types: [opened, synchronize, reopened, ready_for_review] | |
| paths: | |
| # Run for code/build changes and this suite's workflow dependencies. | |
| - '**' | |
| - '!.asf.yaml' | |
| - '!.devcontainer/**' | |
| - '!.github/**' | |
| - '!**/*.md' | |
| - '!dev/**' | |
| - '!mkdocs/**' | |
| - '.github/workflows/test.yml' | |
| - '.github/actions/**' | |
| concurrency: | |
| group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| env: | |
| ICEBERG_HOME: /tmp/iceberg | |
| jobs: | |
| ubuntu: | |
| if: ${{ github.event_name != 'pull_request' || github.event.pull_request.draft == false }} | |
| name: AMD64 Ubuntu 26.04 (${{ matrix.cmake_build_type }}, ${{ matrix.api_mode }}) | |
| runs-on: ubuntu-26.04 | |
| timeout-minutes: 60 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - cmake_build_type: Debug | |
| extra_cmake_args: "-DICEBERG_CXX20_COMPAT=ON -DICEBERG_ENCRYPTION=ON" | |
| api_mode: C++20 Compat | |
| - cmake_build_type: RelWithDebInfo | |
| extra_cmake_args: "-DICEBERG_ENCRYPTION=ON" | |
| api_mode: C++23 | |
| steps: | |
| - name: Checkout iceberg-cpp | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Install dependencies | |
| shell: bash | |
| run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev | |
| - name: Set up sccache | |
| uses: ./.github/actions/setup-sccache | |
| with: | |
| key-prefix: sccache-test-ubuntu-${{ matrix.cmake_build_type }} | |
| - name: Build Iceberg | |
| shell: bash | |
| env: | |
| CC: gcc-14 | |
| CXX: g++-14 | |
| ICEBERG_EXTRA_CMAKE_ARGS: ${{ matrix.extra_cmake_args }} | |
| run: | | |
| ci/scripts/build_iceberg.sh \ | |
| --source-dir "$(pwd)" \ | |
| --build-type "${{ matrix.cmake_build_type }}" \ | |
| --sccache ON \ | |
| --rest-integration-tests ON \ | |
| --s3 OFF \ | |
| --sigv4 OFF \ | |
| --bundle-awssdk ON | |
| - name: Build Example (C++20) | |
| if: matrix.cmake_build_type == 'Debug' | |
| shell: bash | |
| env: | |
| CC: gcc-14 | |
| CXX: g++-14 | |
| run: | | |
| ci/scripts/build_example.sh \ | |
| --source-dir "$(pwd)/example" \ | |
| --build-type "${{ matrix.cmake_build_type }}" \ | |
| --cxx-standard 20 | |
| - name: Build Example (C++23) | |
| shell: bash | |
| env: | |
| CC: gcc-14 | |
| CXX: g++-14 | |
| run: | | |
| ci/scripts/build_example.sh \ | |
| --source-dir "$(pwd)/example" \ | |
| --build-type "${{ matrix.cmake_build_type }}" \ | |
| --cxx-standard 23 | |
| - name: Save sccache | |
| if: always() | |
| uses: ./.github/actions/save-sccache | |
| with: | |
| key-prefix: sccache-test-ubuntu-${{ matrix.cmake_build_type }} | |
| job-status: ${{ job.status }} | |
| hive: | |
| if: ${{ github.event_name != 'pull_request' || github.event.pull_request.draft == false }} | |
| name: AMD64 Ubuntu 26.04 Hive (C++23) | |
| runs-on: ubuntu-26.04 | |
| timeout-minutes: 45 | |
| strategy: | |
| fail-fast: false | |
| env: | |
| SCCACHE_DIR: ${{ github.workspace }}/.sccache | |
| SCCACHE_CACHE_SIZE: "2G" | |
| ICEBERG_EXTRA_CMAKE_ARGS: "-DICEBERG_BUILD_HIVE=ON" | |
| steps: | |
| - name: Checkout iceberg-cpp | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Install dependencies | |
| shell: bash | |
| run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev | |
| - name: Restore sccache cache | |
| uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 | |
| with: | |
| path: ${{ github.workspace }}/.sccache | |
| key: sccache-test-hive-${{ github.run_id }} | |
| restore-keys: | | |
| sccache-test-hive- | |
| sccache-test-ubuntu- | |
| - name: Setup sccache | |
| uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 | |
| - name: Build and test Iceberg with Hive | |
| shell: bash | |
| env: | |
| CC: gcc-14 | |
| CXX: g++-14 | |
| run: | | |
| ci/scripts/build_iceberg.sh \ | |
| --source-dir "$(pwd)" \ | |
| --build-type Debug \ | |
| --sccache ON | |
| - name: Show sccache stats | |
| shell: bash | |
| run: sccache --show-stats | |
| - name: Save sccache cache | |
| if: github.ref == 'refs/heads/main' | |
| uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 | |
| with: | |
| path: ${{ github.workspace }}/.sccache | |
| key: sccache-test-hive-${{ github.run_id }} | |
| macos: | |
| if: ${{ github.event_name != 'pull_request' || github.event.pull_request.draft == false }} | |
| name: AArch64 macOS 26 (C++20 Compat) | |
| runs-on: macos-26 | |
| timeout-minutes: 30 | |
| strategy: | |
| fail-fast: false | |
| steps: | |
| - name: Checkout iceberg-cpp | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Set up sccache | |
| uses: ./.github/actions/setup-sccache | |
| with: | |
| key-prefix: sccache-test-macos | |
| - name: Build Iceberg | |
| shell: bash | |
| env: | |
| # Enables the Homebrew keg-only OpenSSL lookup, which only runs on macOS. | |
| ICEBERG_EXTRA_CMAKE_ARGS: "-DICEBERG_CXX20_COMPAT=ON -DICEBERG_ENCRYPTION=ON" | |
| run: | | |
| ci/scripts/build_iceberg.sh \ | |
| --source-dir "$(pwd)" \ | |
| --build-type Debug \ | |
| --sccache ON | |
| - name: Save sccache | |
| if: always() | |
| uses: ./.github/actions/save-sccache | |
| with: | |
| key-prefix: sccache-test-macos | |
| job-status: ${{ job.status }} | |
| - name: Build Example (C++20) | |
| shell: bash | |
| run: | | |
| ci/scripts/build_example.sh \ | |
| --source-dir "$(pwd)/example" \ | |
| --build-type Debug \ | |
| --cxx-standard 20 | |
| - name: Build Example (C++23) | |
| shell: bash | |
| run: | | |
| ci/scripts/build_example.sh \ | |
| --source-dir "$(pwd)/example" \ | |
| --build-type Debug \ | |
| --cxx-standard 23 | |
| windows: | |
| if: ${{ github.event_name != 'pull_request' || github.event.pull_request.draft == false }} | |
| name: AMD64 Windows 2025 (C++20 Compat) | |
| runs-on: windows-2025 | |
| timeout-minutes: 60 | |
| strategy: | |
| fail-fast: false | |
| steps: | |
| - name: Checkout iceberg-cpp | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Set up MSVC Developer Command Prompt | |
| uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 | |
| with: | |
| arch: x64 | |
| - name: Cache vcpkg packages | |
| uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 | |
| id: vcpkg-cache | |
| with: | |
| path: C:/vcpkg/installed | |
| key: vcpkg-x64-windows-test-${{ hashFiles('.github/workflows/test.yml') }} | |
| - name: Install dependencies | |
| if: ${{ steps.vcpkg-cache.outputs.cache-hit != 'true' }} | |
| shell: pwsh | |
| run: | | |
| vcpkg install zlib:x64-windows nlohmann-json:x64-windows nanoarrow:x64-windows roaring:x64-windows cpr:x64-windows openssl:x64-windows | |
| - name: Set up sccache | |
| uses: ./.github/actions/setup-sccache | |
| with: | |
| key-prefix: sccache-test-windows | |
| - name: Build Iceberg | |
| shell: pwsh | |
| env: | |
| ICEBERG_EXTRA_CMAKE_ARGS: "-DICEBERG_CXX20_COMPAT=ON -DICEBERG_ENCRYPTION=ON" | |
| run: | | |
| $ErrorActionPreference = "Stop" | |
| bash -lc ' | |
| ci/scripts/build_iceberg.sh \ | |
| --source-dir "$(pwd)" \ | |
| --build-type Debug \ | |
| --sccache ON | |
| ' | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| - name: Save sccache | |
| if: always() | |
| uses: ./.github/actions/save-sccache | |
| with: | |
| key-prefix: sccache-test-windows | |
| job-status: ${{ job.status }} | |
| - name: Build Example (C++20) | |
| shell: pwsh | |
| run: | | |
| $ErrorActionPreference = "Stop" | |
| bash -lc ' | |
| ci/scripts/build_example.sh \ | |
| --source-dir "$(pwd)/example" \ | |
| --build-type Debug \ | |
| --cxx-standard 20 | |
| ' | |
| - name: Build Example (C++23) | |
| shell: pwsh | |
| run: | | |
| $ErrorActionPreference = "Stop" | |
| bash -lc ' | |
| ci/scripts/build_example.sh \ | |
| --source-dir "$(pwd)/example" \ | |
| --build-type Debug \ | |
| --cxx-standard 23 | |
| ' |