blob: f252c0e80635c6bd3cb26b8fe761946409ff378e [file]
# 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
'