From 0d6178dc092d644d6d987687e325d7e5d4763afc Mon Sep 17 00:00:00 2001 From: Sander Mathijs van Veen Date: Tue, 23 Jun 2026 13:34:56 +0200 Subject: [PATCH 01/14] Add relassert and re-run tests to stabilize CI --- .../workflows/MainDistributionPipeline.yml | 43 +++++++++++++++++++ Makefile | 9 ++++ duckdb | 2 +- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/.github/workflows/MainDistributionPipeline.yml b/.github/workflows/MainDistributionPipeline.yml index c19237a3e..bb31f6a12 100644 --- a/.github/workflows/MainDistributionPipeline.yml +++ b/.github/workflows/MainDistributionPipeline.yml @@ -43,3 +43,46 @@ jobs: duckdb_version: c4e1422ba48270f49d710957af7a9c1bfe69d092 ci_tools_version: main format_checks: 'format' + + relassert: + name: Build relassert + runs-on: ${{ github.repository_owner == 'duckdb' && 'namespace-profile-linux-x64' || 'ubuntu-latest' }} + env: + GEN: ninja + CC: clang-20 + CXX: clang++-20 + # Enable -DDEBUG slow verifiers (expression verifier, operator + # round-trips, etc.) without changing the optimization level. + FORCE_DEBUG: 1 + FORCE_ASSERT: 1 + ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: 'true' + - name: Install tools + run: python3 duckdb/scripts/ci/retry.py -- make -C duckdb toolsci + - name: Fix ASan runtime + # libclang_rt.asan_static.a is missing in ubuntu 24.04 — workaround + # mirrored from upstream Main.yml. + run: | + asan_static_dir="/usr/lib/llvm-20/lib/clang/20/lib/x86_64-pc-linux-gnu" + asan_static_target="/usr/lib/llvm-20/lib/clang/20/lib/linux/libclang_rt.asan_static-x86_64.a" + if [[ ! -e "${asan_static_dir}/libclang_rt.asan_static.a" && -e "${asan_static_target}" ]]; then + sudo mkdir -p "${asan_static_dir}" + sudo ln -sf "${asan_static_target}" "${asan_static_dir}/libclang_rt.asan_static.a" + fi + - name: Setup Ccache + uses: hendrikmuhs/ccache-action@main + with: + max-size: 5GB + evict-old-files: job + - name: Build (relassert → ASan + UBSan + LSan) + uses: duckdb/duckdb-ci/build-duckdb@main + with: + build-type: relassert + build: python3 duckdb/scripts/ci/retry.py -- make relassert + test: make unittest_relassert + vcpkg-commit: 84bab45d415d22042bd0b9081aea57f362da3f35 diff --git a/Makefile b/Makefile index 855ed4613..6a9fb3385 100644 --- a/Makefile +++ b/Makefile @@ -9,9 +9,18 @@ EXT_CONFIG=${PROJ_DIR}extension_config.cmake # We need this for testing CORE_EXTENSIONS='httpfs;parquet;tpch' +# Stabilize all tests in CI +ifdef CI +TEST_FLAGS:=--stabilize-tests +endif +T ?= $(TEST_FLAGS) "test/*" + # Include the Makefile from extension-ci-tools include extension-ci-tools/makefiles/duckdb_extension.Makefile +unittest_relassert: + build/relassert/test/run $(T) + include make/util.mk include make/catalogs/fixture.mk include make/catalogs/lakekeeper.mk diff --git a/duckdb b/duckdb index c4e1422ba..3a0e82f91 160000 --- a/duckdb +++ b/duckdb @@ -1 +1 @@ -Subproject commit c4e1422ba48270f49d710957af7a9c1bfe69d092 +Subproject commit 3a0e82f9129d0bf9dc0999e5c29ab5e5366412e2 From 75b474f0b802d142037a1fe55afbaacf4fc7360b Mon Sep 17 00:00:00 2001 From: Sander Mathijs van Veen Date: Tue, 23 Jun 2026 15:12:15 +0200 Subject: [PATCH 02/14] Add required env var and test config in CI --- .github/workflows/MainDistributionPipeline.yml | 2 ++ Makefile | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/MainDistributionPipeline.yml b/.github/workflows/MainDistributionPipeline.yml index bb31f6a12..fe7accd3a 100644 --- a/.github/workflows/MainDistributionPipeline.yml +++ b/.github/workflows/MainDistributionPipeline.yml @@ -81,6 +81,8 @@ jobs: evict-old-files: job - name: Build (relassert → ASan + UBSan + LSan) uses: duckdb/duckdb-ci/build-duckdb@main + env: + CATALOG_TEST_CONFIG_SETUP: 1 with: build-type: relassert build: python3 duckdb/scripts/ci/retry.py -- make relassert diff --git a/Makefile b/Makefile index 6a9fb3385..9f70927fc 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ CORE_EXTENSIONS='httpfs;parquet;tpch' ifdef CI TEST_FLAGS:=--stabilize-tests endif -T ?= $(TEST_FLAGS) "test/*" +T ?= $(TEST_FLAGS) --test-config "$(PWD)/test/configs/fixture.json" "test/*" # Include the Makefile from extension-ci-tools include extension-ci-tools/makefiles/duckdb_extension.Makefile From 745a39a6e55c2304ea8401b2585ff4043299c24d Mon Sep 17 00:00:00 2001 From: Tishj Date: Wed, 24 Jun 2026 11:36:21 +0200 Subject: [PATCH 03/14] attempt to fix CI --- .github/workflows/BuildIceberg.yml | 82 +++++++++++++------ .github/workflows/test-fixture-catalog.yml | 28 ++++--- .github/workflows/test-lakekeeper-catalog.yml | 16 ++-- .github/workflows/test-local-catalog.yml | 8 +- .github/workflows/test-nessie-catalog.yml | 16 ++-- .github/workflows/test-polaris-catalog.yml | 16 ++-- 6 files changed, 102 insertions(+), 64 deletions(-) diff --git a/.github/workflows/BuildIceberg.yml b/.github/workflows/BuildIceberg.yml index 5381079af..60f0056e8 100644 --- a/.github/workflows/BuildIceberg.yml +++ b/.github/workflows/BuildIceberg.yml @@ -13,38 +13,40 @@ env: jobs: build_iceberg: name: Build - runs-on: ubuntu-latest + runs-on: ${{ github.repository_owner == 'duckdb' && 'namespace-profile-linux-x64' || 'ubuntu-latest' }} env: - VCPKG_TARGET_TRIPLET: 'x64-linux-release' GEN: ninja - VCPKG_FEATURE_FLAGS: "-binarycaching" - VCPKG_TOOLCHAIN_PATH: ${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake - PIP_BREAK_SYSTEM_PACKAGES: 1 + CC: clang-20 + CXX: clang++-20 + steps: - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: 'true' - - - name: Setup vcpkg - uses: lukka/run-vcpkg@v11.1 - with: - vcpkgGitCommitId: 84bab45d415d22042bd0b9081aea57f362da3f35 - - - name: Install Ninja - shell: bash - run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build - + - name: Install tools + run: python3 duckdb/scripts/ci/retry.py -- make -C duckdb toolsci + - name: Fix ASan runtime + # libclang_rt.asan_static.a is missing in ubuntu 24.04 — workaround + # mirrored from upstream Main.yml. + run: | + asan_static_dir="/usr/lib/llvm-20/lib/clang/20/lib/x86_64-pc-linux-gnu" + asan_static_target="/usr/lib/llvm-20/lib/clang/20/lib/linux/libclang_rt.asan_static-x86_64.a" + if [[ ! -e "${asan_static_dir}/libclang_rt.asan_static.a" && -e "${asan_static_target}" ]]; then + sudo mkdir -p "${asan_static_dir}" + sudo ln -sf "${asan_static_target}" "${asan_static_dir}/libclang_rt.asan_static.a" + fi - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb' }} + max-size: 5GB + evict-old-files: job #- name: Build extension Not linked # env: - # GEN: ninja # STATIC_LIBCPP: 1 # DONT_LINK: 1 # run: | @@ -57,31 +59,59 @@ jobs: # path: build/release/ # retention-days: 3 - - name: Build extension + #- name: Build extension + # env: + # STATIC_LIBCPP: 1 + # ENABLE_EXTENSION_AUTOLOADING: 1 + # ENABLE_EXTENSION_AUTOINSTALL: 1 + # run: | + # make release + + + - name: Build (relassert → ASan + UBSan + LSan) + uses: duckdb/duckdb-ci/build-duckdb@main env: - GEN: ninja + CATALOG_TEST_CONFIG_SETUP: 1 STATIC_LIBCPP: 1 ENABLE_EXTENSION_AUTOLOADING: 1 ENABLE_EXTENSION_AUTOINSTALL: 1 - run: | - make release + # Enable -DDEBUG slow verifiers (expression verifier, operator + # round-trips, etc.) without changing the optimization level. + FORCE_DEBUG: 1 + FORCE_ASSERT: 1 + with: + build-type: relassert + build: python3 duckdb/scripts/ci/retry.py -- make relassert + vcpkg-commit: 84bab45d415d22042bd0b9081aea57f362da3f35 - name: Upload DuckDB-Iceberg release folder uses: actions/upload-artifact@v4 with: name: duckdb-iceberg - path: build/release/ + path: build/relassert/ retention-days: 3 - - name: Build extension Enable Equality Delete + #- name: Build extension Enable Equality Delete + # env: + # GEN: ninja + # STATIC_LIBCPP: 1 + # ENABLE_EXTENSION_AUTOLOADING: 1 + # ENABLE_EXTENSION_AUTOINSTALL: 1 + # EXT_FLAGS: -DICEBERG_ENABLE_EQUALITY_DELETE_WRITES=1 + # run: | + # make release + + - name: Build (release) + uses: duckdb/duckdb-ci/build-duckdb@main env: - GEN: ninja STATIC_LIBCPP: 1 ENABLE_EXTENSION_AUTOLOADING: 1 ENABLE_EXTENSION_AUTOINSTALL: 1 EXT_FLAGS: -DICEBERG_ENABLE_EQUALITY_DELETE_WRITES=1 - run: | - make release + with: + build-type: release + build: python3 duckdb/scripts/ci/retry.py -- make release + vcpkg-commit: 84bab45d415d22042bd0b9081aea57f362da3f35 - name: Upload DuckDB-Iceberg release folder with Equality Delete uses: actions/upload-artifact@v4 @@ -96,6 +126,7 @@ jobs: uses: ./.github/workflows/test-fixture-catalog.yml with: artifact-name: duckdb-iceberg + build-path: build/relassert #test-fixture-no-link: # name: Test against fixture catalog no link @@ -112,6 +143,7 @@ jobs: with: artifact-name: duckdb-iceberg-equality-delete-support equality-delete-writes-enabled: 1 + build-path: build/release test-nessie: name: Test against Nessie Catalog diff --git a/.github/workflows/test-fixture-catalog.yml b/.github/workflows/test-fixture-catalog.yml index 2be6a3d51..61762132d 100644 --- a/.github/workflows/test-fixture-catalog.yml +++ b/.github/workflows/test-fixture-catalog.yml @@ -16,6 +16,10 @@ on: required: false type: number default: 0 + build-path: + description: "The path to the build artifact" + required: true + type: string jobs: test-spark: @@ -23,6 +27,8 @@ jobs: runs-on: ubuntu-latest env: HTTP_PROXY_PUBLIC: http://localhost:8878 + ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" steps: - name: Checkout repository @@ -35,12 +41,12 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.artifact-name }} - path: build/release + path: ${{ inputs.build-path }} - name: Restore permissions run: | - find ./build/release -type f -name 'duckdb*' -exec chmod +x {} \; - find ./build/release -type f -name 'unittest*' -exec chmod +x {} \; + find ${{ inputs.build-path }} -type f -name 'duckdb*' -exec chmod +x {} \; + find ${{ inputs.build-path }} -type f -name 'unittest*' -exec chmod +x {} \; - name: Set up Java uses: actions/setup-java@v4 @@ -105,16 +111,16 @@ jobs: FIXTURE_SERVER_AVAILABLE: 1 EQUALITY_DELETE_WRITES_ENABLED: ${{ inputs.equality-delete-writes-enabled }} run: | - ./build/release/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --list-test-names-only || true - ./build/release/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --test-config test/configs/fixture.json + ${{ inputs.build-path }}/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --list-test-names-only || true + ${{ inputs.build-path }}/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --test-config test/configs/fixture.json - name: Run other tests if: inputs.local-extension-repo == '' env: FIXTURE_SERVER_AVAILABLE: 1 run: | - ./build/release/test/unittest --order lex "$PWD/test/*" --list-test-names-only || true - ./build/release/test/unittest --order lex "$PWD/test/*" + ${{ inputs.build-path }}/test/unittest --order lex "$PWD/test/*" --list-test-names-only || true + ${{ inputs.build-path }}/test/unittest --order lex "$PWD/test/*" - name: Test reads with PyIceberg and Spark if: inputs.local-extension-repo == '' @@ -125,16 +131,16 @@ jobs: run: | # test with spark v4 source .venv-spark4/bin/activate - python3 -m pytest -vv test/python --unittest-binary ./build/release/test/unittest --test-python-verbosity verbose + python3 -m pytest -vv test/python --unittest-binary ${{ inputs.build-path }}/test/unittest --test-python-verbosity verbose deactivate # test with spark v3 python3 -m venv .venv-spark3 source .venv-spark3/bin/activate python3 -m pip install pyspark==3.5.2 pytest pyiceberg==0.9.1 pyarrow pydantic==2.9.0 - python3 -m pytest -vv test/python --unittest-binary ./build/release/test/unittest --test-python-verbosity verbose + python3 -m pytest -vv test/python --unittest-binary ${{ inputs.build-path }}/test/unittest --test-python-verbosity verbose #- name: Run all duckdb/duckdb tests # if: inputs.local-extension-repo == '' # run: | - # ./build/release/test/unittest --order lex --test-dir duckdb "test/sql/*" --list-test-names-only || true - # ./build/release/test/unittest --order lex --test-dir duckdb "test/sql/*" --test-config test/configs/fixture_duckdb_tests.json + # ${{ inputs.build-path }}/test/unittest --order lex --test-dir duckdb "test/sql/*" --list-test-names-only || true + # ${{ inputs.build-path }}/test/unittest --order lex --test-dir duckdb "test/sql/*" --test-config test/configs/fixture_duckdb_tests.json diff --git a/.github/workflows/test-lakekeeper-catalog.yml b/.github/workflows/test-lakekeeper-catalog.yml index ccc7d583a..dc1870ba1 100644 --- a/.github/workflows/test-lakekeeper-catalog.yml +++ b/.github/workflows/test-lakekeeper-catalog.yml @@ -22,7 +22,7 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.artifact-name }} - path: build/release + path: build/relassert - name: Set up Java uses: actions/setup-java@v4 @@ -36,8 +36,8 @@ jobs: - name: Restore permissions run: | - find ./build/release -type f -name 'duckdb*' -exec chmod +x {} \; - find ./build/release -type f -name 'unittest*' -exec chmod +x {} \; + find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; + find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; - name: Install Lakekeeper dependencies run: | @@ -52,20 +52,20 @@ jobs: env: LAKEKEEPER_SERVER_AVAILABLE: 1 run: | - ./build/release/test/unittest --order lex "$PWD/test/*" --list-test-names-only || true - ./build/release/test/unittest --order lex "$PWD/test/*" + ./build/relassert/test/unittest --order lex "$PWD/test/*" --list-test-names-only || true + ./build/relassert/test/unittest --order lex "$PWD/test/*" - name: Run Generic IRC Tests env: CATALOG_TEST_CONFIG_SETUP: 1 LAKEKEEPER_SERVER_AVAILABLE: 1 run: | - ./build/release/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --list-test-names-only || true - ./build/release/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --test-config test/configs/lakekeeper.json + ./build/relassert/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --list-test-names-only || true + ./build/relassert/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --test-config test/configs/lakekeeper.json - name: Test reads with PyIceberg and Spark env: CATALOG_TEST_CONFIG_SETUP: 1 run: | source .venv-spark4/bin/activate - python3 -m pytest -vv test/python --unittest-binary ./build/release/test/unittest --test-python-verbosity verbose + python3 -m pytest -vv test/python --unittest-binary ./build/relassert/test/unittest --test-python-verbosity verbose diff --git a/.github/workflows/test-local-catalog.yml b/.github/workflows/test-local-catalog.yml index 712b8bb27..ad32414ba 100644 --- a/.github/workflows/test-local-catalog.yml +++ b/.github/workflows/test-local-catalog.yml @@ -23,12 +23,12 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.artifact-name }} - path: build/release + path: build/relassert - name: Restore permissions run: | - find ./build/release -type f -name 'duckdb*' -exec chmod +x {} \; - find ./build/release -type f -name 'unittest*' -exec chmod +x {} \; + find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; + find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; - name: Set up Java uses: actions/setup-java@v4 @@ -64,5 +64,5 @@ jobs: env: DUCKDB_ICEBERG_HAVE_GENERATED_DATA: 1 run: | - ./build/release/test/unittest --order lex "$PWD/test/*" --list-test-names-only || true ./build/release/test/unittest --order lex "$PWD/test/*" + ./build/relassert/test/unittest --order lex "$PWD/test/*" --list-test-names-only || true ./build/relassert/test/unittest --order lex "$PWD/test/*" diff --git a/.github/workflows/test-nessie-catalog.yml b/.github/workflows/test-nessie-catalog.yml index 90cd6d073..aebc67d7a 100644 --- a/.github/workflows/test-nessie-catalog.yml +++ b/.github/workflows/test-nessie-catalog.yml @@ -23,12 +23,12 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.artifact-name }} - path: build/release + path: build/relassert - name: Restore permissions run: | - find ./build/release -type f -name 'duckdb*' -exec chmod +x {} \; - find ./build/release -type f -name 'unittest*' -exec chmod +x {} \; + find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; + find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; - name: Set up Java uses: actions/setup-java@v4 @@ -87,8 +87,8 @@ jobs: env: NESSIE_SERVER_AVAILABLE: 1 run: | - ./build/release/test/unittest --order lex "$PWD/test/sql/local/catalog_custom_setup/nessie/*" --list-test-names-only || true - ./build/release/test/unittest --order lex "$PWD/test/sql/local/catalog_custom_setup/nessie/*" + ./build/relassert/test/unittest --order lex "$PWD/test/sql/local/catalog_custom_setup/nessie/*" --list-test-names-only || true + ./build/relassert/test/unittest --order lex "$PWD/test/sql/local/catalog_custom_setup/nessie/*" - name: Generate data run: | @@ -99,8 +99,8 @@ jobs: CATALOG_TEST_CONFIG_SETUP: 1 NESSIE_SERVER_AVAILABLE: 1 run: | - ./build/release/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --list-test-names-only || true - ./build/release/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --test-config test/configs/nessie.json + ./build/relassert/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --list-test-names-only || true + ./build/relassert/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --test-config test/configs/nessie.json - name: Test reads with PyIceberg and Spark env: @@ -108,4 +108,4 @@ jobs: run: | source .venv-spark4/bin/activate python3 -m pip install s3fs - python3 -m pytest -vv test/python --unittest-binary ./build/release/test/unittest --test-python-verbosity verbose + python3 -m pytest -vv test/python --unittest-binary ./build/relassert/test/unittest --test-python-verbosity verbose diff --git a/.github/workflows/test-polaris-catalog.yml b/.github/workflows/test-polaris-catalog.yml index 4cce0113c..524755d02 100644 --- a/.github/workflows/test-polaris-catalog.yml +++ b/.github/workflows/test-polaris-catalog.yml @@ -23,12 +23,12 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.artifact-name }} - path: build/release + path: build/relassert - name: Restore permissions run: | - find ./build/release -type f -name 'duckdb*' -exec chmod +x {} \; - find ./build/release -type f -name 'unittest*' -exec chmod +x {} \; + find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; + find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; - name: Set up Java uses: actions/setup-java@v4 @@ -54,23 +54,23 @@ jobs: env: POLARIS_SERVER_AVAILABLE: 1 run: | - ./build/release/test/unittest --order lex "$PWD/test/*" --list-test-names-only || true - ./build/release/test/unittest --order lex "$PWD/test/*" + ./build/relassert/test/unittest --order lex "$PWD/test/*" --list-test-names-only || true + ./build/relassert/test/unittest --order lex "$PWD/test/*" - name: Run Generic IRC tests env: CATALOG_TEST_CONFIG_SETUP: 1 POLARIS_SERVER_AVAILABLE: 1 run: | - ./build/release/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --list-test-names-only || true - ./build/release/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --test-config test/configs/polaris.json + ./build/relassert/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --list-test-names-only || true + ./build/relassert/test/unittest --order lex "$PWD/test/sql/local/catalog_test_config_setup/*" --test-config test/configs/polaris.json - name: Test reads with PyIceberg and Spark env: CATALOG_TEST_CONFIG_SETUP: 1 run: | source .venv-spark4/bin/activate - python3 -m pytest -vv test/python --unittest-binary ./build/release/test/unittest --test-python-verbosity verbose + python3 -m pytest -vv test/python --unittest-binary ./build/relassert/test/unittest --test-python-verbosity verbose - name: Upload Polaris Logs if: always() From cd10125687a1c7e607931f7fd4cd9c20a32898a6 Mon Sep 17 00:00:00 2001 From: Tishj Date: Wed, 24 Jun 2026 11:37:36 +0200 Subject: [PATCH 04/14] attempt to fix CI --- .../workflows/MainDistributionPipeline.yml | 45 ------------------- 1 file changed, 45 deletions(-) diff --git a/.github/workflows/MainDistributionPipeline.yml b/.github/workflows/MainDistributionPipeline.yml index fe7accd3a..c19237a3e 100644 --- a/.github/workflows/MainDistributionPipeline.yml +++ b/.github/workflows/MainDistributionPipeline.yml @@ -43,48 +43,3 @@ jobs: duckdb_version: c4e1422ba48270f49d710957af7a9c1bfe69d092 ci_tools_version: main format_checks: 'format' - - relassert: - name: Build relassert - runs-on: ${{ github.repository_owner == 'duckdb' && 'namespace-profile-linux-x64' || 'ubuntu-latest' }} - env: - GEN: ninja - CC: clang-20 - CXX: clang++-20 - # Enable -DDEBUG slow verifiers (expression verifier, operator - # round-trips, etc.) without changing the optimization level. - FORCE_DEBUG: 1 - FORCE_ASSERT: 1 - ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" - UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: 'true' - - name: Install tools - run: python3 duckdb/scripts/ci/retry.py -- make -C duckdb toolsci - - name: Fix ASan runtime - # libclang_rt.asan_static.a is missing in ubuntu 24.04 — workaround - # mirrored from upstream Main.yml. - run: | - asan_static_dir="/usr/lib/llvm-20/lib/clang/20/lib/x86_64-pc-linux-gnu" - asan_static_target="/usr/lib/llvm-20/lib/clang/20/lib/linux/libclang_rt.asan_static-x86_64.a" - if [[ ! -e "${asan_static_dir}/libclang_rt.asan_static.a" && -e "${asan_static_target}" ]]; then - sudo mkdir -p "${asan_static_dir}" - sudo ln -sf "${asan_static_target}" "${asan_static_dir}/libclang_rt.asan_static.a" - fi - - name: Setup Ccache - uses: hendrikmuhs/ccache-action@main - with: - max-size: 5GB - evict-old-files: job - - name: Build (relassert → ASan + UBSan + LSan) - uses: duckdb/duckdb-ci/build-duckdb@main - env: - CATALOG_TEST_CONFIG_SETUP: 1 - with: - build-type: relassert - build: python3 duckdb/scripts/ci/retry.py -- make relassert - test: make unittest_relassert - vcpkg-commit: 84bab45d415d22042bd0b9081aea57f362da3f35 From ca3722a0454d438e8e74297cbad75009d55b881b Mon Sep 17 00:00:00 2001 From: Tishj Date: Wed, 24 Jun 2026 12:30:00 +0200 Subject: [PATCH 05/14] remove remnants --- Makefile | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Makefile b/Makefile index 9f70927fc..855ed4613 100644 --- a/Makefile +++ b/Makefile @@ -9,18 +9,9 @@ EXT_CONFIG=${PROJ_DIR}extension_config.cmake # We need this for testing CORE_EXTENSIONS='httpfs;parquet;tpch' -# Stabilize all tests in CI -ifdef CI -TEST_FLAGS:=--stabilize-tests -endif -T ?= $(TEST_FLAGS) --test-config "$(PWD)/test/configs/fixture.json" "test/*" - # Include the Makefile from extension-ci-tools include extension-ci-tools/makefiles/duckdb_extension.Makefile -unittest_relassert: - build/relassert/test/run $(T) - include make/util.mk include make/catalogs/fixture.mk include make/catalogs/lakekeeper.mk From cf48654aa0f03ec221861c5dbcf0467f75f61755 Mon Sep 17 00:00:00 2001 From: Tishj Date: Thu, 25 Jun 2026 22:56:54 +0200 Subject: [PATCH 06/14] stack suppressions on top of duckdb's own suppressions --- .github/workflows/test-fixture-catalog.yml | 7 +++++++ .github/workflows/test-lakekeeper-catalog.yml | 10 ++++++++++ .github/workflows/test-local-catalog.yml | 11 ++++++++++- .github/workflows/test-nessie-catalog.yml | 10 ++++++++++ .github/workflows/test-polaris-catalog.yml | 10 ++++++++++ .sanitizer-leak-suppressions.txt | 7 +++++++ 6 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 .sanitizer-leak-suppressions.txt diff --git a/.github/workflows/test-fixture-catalog.yml b/.github/workflows/test-fixture-catalog.yml index 3229cfd16..f040eaedd 100644 --- a/.github/workflows/test-fixture-catalog.yml +++ b/.github/workflows/test-fixture-catalog.yml @@ -28,6 +28,7 @@ jobs: env: HTTP_PROXY_PUBLIC: http://localhost:8878 ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + LSAN_OPTIONS: "suppressions=${{ github.workspace }}/.combined-sanitizer-leak-suppressions.txt" UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" steps: @@ -48,6 +49,12 @@ jobs: find ${{ inputs.build-path }} -type f -name 'duckdb*' -exec chmod +x {} \; find ${{ inputs.build-path }} -type f -name 'unittest*' -exec chmod +x {} \; + - name: Prepare leak suppressions + run: | + cp duckdb/.sanitizer-leak-suppressions.txt .combined-sanitizer-leak-suppressions.txt + printf '\n' >> .combined-sanitizer-leak-suppressions.txt + cat .sanitizer-leak-suppressions.txt >> .combined-sanitizer-leak-suppressions.txt + - name: Set up Java uses: actions/setup-java@v4 with: diff --git a/.github/workflows/test-lakekeeper-catalog.yml b/.github/workflows/test-lakekeeper-catalog.yml index f319288b9..223adecdc 100644 --- a/.github/workflows/test-lakekeeper-catalog.yml +++ b/.github/workflows/test-lakekeeper-catalog.yml @@ -11,6 +11,10 @@ jobs: test-lakekeeper: name: Test against Lakekeeper Catalog runs-on: ubuntu-latest + env: + ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + LSAN_OPTIONS: "suppressions=${{ github.workspace }}/.combined-sanitizer-leak-suppressions.txt" + UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" steps: - name: Checkout repository uses: actions/checkout@v4 @@ -39,6 +43,12 @@ jobs: find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; + - name: Prepare leak suppressions + run: | + cp duckdb/.sanitizer-leak-suppressions.txt .combined-sanitizer-leak-suppressions.txt + printf '\n' >> .combined-sanitizer-leak-suppressions.txt + cat .sanitizer-leak-suppressions.txt >> .combined-sanitizer-leak-suppressions.txt + - name: Install Lakekeeper dependencies run: | sudo apt update -y -qq diff --git a/.github/workflows/test-local-catalog.yml b/.github/workflows/test-local-catalog.yml index ad32414ba..97f323539 100644 --- a/.github/workflows/test-local-catalog.yml +++ b/.github/workflows/test-local-catalog.yml @@ -11,6 +11,10 @@ jobs: test-spark: name: Test against local catalog runs-on: ubuntu-latest + env: + ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + LSAN_OPTIONS: "suppressions=${{ github.workspace }}/.combined-sanitizer-leak-suppressions.txt" + UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" steps: - name: Checkout repository @@ -30,6 +34,12 @@ jobs: find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; + - name: Prepare leak suppressions + run: | + cp duckdb/.sanitizer-leak-suppressions.txt .combined-sanitizer-leak-suppressions.txt + printf '\n' >> .combined-sanitizer-leak-suppressions.txt + cat .sanitizer-leak-suppressions.txt >> .combined-sanitizer-leak-suppressions.txt + - name: Set up Java uses: actions/setup-java@v4 with: @@ -65,4 +75,3 @@ jobs: DUCKDB_ICEBERG_HAVE_GENERATED_DATA: 1 run: | ./build/relassert/test/unittest --order lex "$PWD/test/*" --list-test-names-only || true ./build/relassert/test/unittest --order lex "$PWD/test/*" - diff --git a/.github/workflows/test-nessie-catalog.yml b/.github/workflows/test-nessie-catalog.yml index 7fbeddc8c..3303af1e7 100644 --- a/.github/workflows/test-nessie-catalog.yml +++ b/.github/workflows/test-nessie-catalog.yml @@ -11,6 +11,10 @@ jobs: test-nessie: name: Test against Nessie Catalog runs-on: ubuntu-latest + env: + ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + LSAN_OPTIONS: "suppressions=${{ github.workspace }}/.combined-sanitizer-leak-suppressions.txt" + UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" steps: - name: Checkout repository @@ -30,6 +34,12 @@ jobs: find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; + - name: Prepare leak suppressions + run: | + cp duckdb/.sanitizer-leak-suppressions.txt .combined-sanitizer-leak-suppressions.txt + printf '\n' >> .combined-sanitizer-leak-suppressions.txt + cat .sanitizer-leak-suppressions.txt >> .combined-sanitizer-leak-suppressions.txt + - name: Set up Java uses: actions/setup-java@v4 with: diff --git a/.github/workflows/test-polaris-catalog.yml b/.github/workflows/test-polaris-catalog.yml index 189ff56c4..535bb46a8 100644 --- a/.github/workflows/test-polaris-catalog.yml +++ b/.github/workflows/test-polaris-catalog.yml @@ -11,6 +11,10 @@ jobs: test-polaris: name: Test against Polaris Catalog runs-on: ubuntu-latest + env: + ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + LSAN_OPTIONS: "suppressions=${{ github.workspace }}/.combined-sanitizer-leak-suppressions.txt" + UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" steps: - name: Checkout repository @@ -30,6 +34,12 @@ jobs: find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; + - name: Prepare leak suppressions + run: | + cp duckdb/.sanitizer-leak-suppressions.txt .combined-sanitizer-leak-suppressions.txt + printf '\n' >> .combined-sanitizer-leak-suppressions.txt + cat .sanitizer-leak-suppressions.txt >> .combined-sanitizer-leak-suppressions.txt + - name: Set up Java uses: actions/setup-java@v4 with: diff --git a/.sanitizer-leak-suppressions.txt b/.sanitizer-leak-suppressions.txt new file mode 100644 index 000000000..a86f88ef2 --- /dev/null +++ b/.sanitizer-leak-suppressions.txt @@ -0,0 +1,7 @@ +# Temporary suppressions for duckdb-aws leak: +# https://github.com/duckdb/duckdb-aws/issues/146 +# +# This file is additive on top of duckdb/.sanitizer-leak-suppressions.txt. +leak:duckdb::AWSInput::ExecuteRequestLegacy +leak:duckdb::InitAWSAPI +leak:Aws::InitAPI From e9dd38e913dd0d2df4e082e95d1e4a416dd31e39 Mon Sep 17 00:00:00 2001 From: Tishj Date: Fri, 26 Jun 2026 00:03:25 +0200 Subject: [PATCH 07/14] export symbols --- .github/workflows/BuildIceberg.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/BuildIceberg.yml b/.github/workflows/BuildIceberg.yml index 60f0056e8..81091c41b 100644 --- a/.github/workflows/BuildIceberg.yml +++ b/.github/workflows/BuildIceberg.yml @@ -77,6 +77,7 @@ jobs: ENABLE_EXTENSION_AUTOINSTALL: 1 # Enable -DDEBUG slow verifiers (expression verifier, operator # round-trips, etc.) without changing the optimization level. + EXPORT_DYNAMIC_SYMBOLS: 1 FORCE_DEBUG: 1 FORCE_ASSERT: 1 with: From 2f40d1686cb4dff4ea36f29a9fe7e21378d1fb2c Mon Sep 17 00:00:00 2001 From: Sander Mathijs van Veen Date: Fri, 26 Jun 2026 09:39:22 +0200 Subject: [PATCH 08/14] Add missing llvm-symbolizer to CI jobs --- .github/workflows/test-fixture-catalog.yml | 5 +++-- .github/workflows/test-lakekeeper-catalog.yml | 5 +++-- .github/workflows/test-local-catalog.yml | 5 +++-- .github/workflows/test-nessie-catalog.yml | 5 +++-- .github/workflows/test-polaris-catalog.yml | 5 +++-- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test-fixture-catalog.yml b/.github/workflows/test-fixture-catalog.yml index f040eaedd..21d95d1ff 100644 --- a/.github/workflows/test-fixture-catalog.yml +++ b/.github/workflows/test-fixture-catalog.yml @@ -27,7 +27,8 @@ jobs: runs-on: ubuntu-latest env: HTTP_PROXY_PUBLIC: http://localhost:8878 - ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + ASAN_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer" + ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0:external_symbolizer_path=/usr/bin/llvm-symbolizer" LSAN_OPTIONS: "suppressions=${{ github.workspace }}/.combined-sanitizer-leak-suppressions.txt" UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" @@ -67,7 +68,7 @@ jobs: - name: Install fixture catalog dependencies run: | sudo apt update -y -qq - sudo apt install -y -qq python3-venv tar pkg-config + sudo apt install -y -qq python3-venv tar pkg-config llvm - name: Install CMake 3.x run: | diff --git a/.github/workflows/test-lakekeeper-catalog.yml b/.github/workflows/test-lakekeeper-catalog.yml index 223adecdc..845cb6149 100644 --- a/.github/workflows/test-lakekeeper-catalog.yml +++ b/.github/workflows/test-lakekeeper-catalog.yml @@ -12,7 +12,8 @@ jobs: name: Test against Lakekeeper Catalog runs-on: ubuntu-latest env: - ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + ASAN_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer" + ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0:external_symbolizer_path=/usr/bin/llvm-symbolizer" LSAN_OPTIONS: "suppressions=${{ github.workspace }}/.combined-sanitizer-leak-suppressions.txt" UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" steps: @@ -52,7 +53,7 @@ jobs: - name: Install Lakekeeper dependencies run: | sudo apt update -y -qq - sudo apt install -y -qq python3-venv + sudo apt install -y -qq python3-venv llvm - name: Setup Lakekeeper run: | diff --git a/.github/workflows/test-local-catalog.yml b/.github/workflows/test-local-catalog.yml index 97f323539..32517d212 100644 --- a/.github/workflows/test-local-catalog.yml +++ b/.github/workflows/test-local-catalog.yml @@ -12,7 +12,8 @@ jobs: name: Test against local catalog runs-on: ubuntu-latest env: - ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + ASAN_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer" + ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0:external_symbolizer_path=/usr/bin/llvm-symbolizer" LSAN_OPTIONS: "suppressions=${{ github.workspace }}/.combined-sanitizer-leak-suppressions.txt" UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" @@ -49,7 +50,7 @@ jobs: - name: Install fixture catalog dependencies run: | sudo apt update -y -qq - sudo apt install -y -qq python3-venv tar pkg-config + sudo apt install -y -qq python3-venv tar pkg-config llvm - name: Install CMake 3.x run: | diff --git a/.github/workflows/test-nessie-catalog.yml b/.github/workflows/test-nessie-catalog.yml index 3303af1e7..1c7a18229 100644 --- a/.github/workflows/test-nessie-catalog.yml +++ b/.github/workflows/test-nessie-catalog.yml @@ -12,7 +12,8 @@ jobs: name: Test against Nessie Catalog runs-on: ubuntu-latest env: - ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + ASAN_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer" + ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0:external_symbolizer_path=/usr/bin/llvm-symbolizer" LSAN_OPTIONS: "suppressions=${{ github.workspace }}/.combined-sanitizer-leak-suppressions.txt" UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" @@ -52,7 +53,7 @@ jobs: - name: Install Nessie dependencies run: | sudo apt update -y -qq - sudo apt install -y -qq python3-venv + sudo apt install -y -qq python3-venv llvm - uses: actions/setup-python@v6 with: diff --git a/.github/workflows/test-polaris-catalog.yml b/.github/workflows/test-polaris-catalog.yml index 535bb46a8..0180a48f9 100644 --- a/.github/workflows/test-polaris-catalog.yml +++ b/.github/workflows/test-polaris-catalog.yml @@ -12,7 +12,8 @@ jobs: name: Test against Polaris Catalog runs-on: ubuntu-latest env: - ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0" + ASAN_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer" + ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1:abort_on_error=0:external_symbolizer_path=/usr/bin/llvm-symbolizer" LSAN_OPTIONS: "suppressions=${{ github.workspace }}/.combined-sanitizer-leak-suppressions.txt" UBSAN_OPTIONS: "halt_on_error=1:print_stacktrace=1" @@ -50,7 +51,7 @@ jobs: run: | sudo apt update -y -qq sudo apt-get install -y docker-ce docker-ce-cli containerd.io - sudo apt install -y -qq python3-venv + sudo apt install -y -qq python3-venv llvm - uses: actions/setup-python@v6 with: From dd17dd58fbf3e1899f5d58975f2414d12173bca6 Mon Sep 17 00:00:00 2001 From: Sander Mathijs van Veen Date: Fri, 26 Jun 2026 09:44:55 +0200 Subject: [PATCH 09/14] Bundle and upload specific release/relassert files --- .github/workflows/BuildIceberg.yml | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/.github/workflows/BuildIceberg.yml b/.github/workflows/BuildIceberg.yml index 81091c41b..5aa3d2f2f 100644 --- a/.github/workflows/BuildIceberg.yml +++ b/.github/workflows/BuildIceberg.yml @@ -84,13 +84,8 @@ jobs: build-type: relassert build: python3 duckdb/scripts/ci/retry.py -- make relassert vcpkg-commit: 84bab45d415d22042bd0b9081aea57f362da3f35 - - - name: Upload DuckDB-Iceberg release folder - uses: actions/upload-artifact@v4 - with: - name: duckdb-iceberg - path: build/relassert/ - retention-days: 3 + bundle: bash duckdb/scripts/prepare_build_artifact.sh relassert + upload-name: duckdb-iceberg #- name: Build extension Enable Equality Delete # env: @@ -113,13 +108,8 @@ jobs: build-type: release build: python3 duckdb/scripts/ci/retry.py -- make release vcpkg-commit: 84bab45d415d22042bd0b9081aea57f362da3f35 - - - name: Upload DuckDB-Iceberg release folder with Equality Delete - uses: actions/upload-artifact@v4 - with: - name: duckdb-iceberg-equality-delete-support - path: build/release/ - retention-days: 3 + bundle: bash duckdb/scripts/prepare_build_artifact.sh release + upload-name: duckdb-iceberg-equality-delete-support test-fixture: name: Test against fixture catalog @@ -172,4 +162,4 @@ jobs: needs: build_iceberg uses: ./.github/workflows/test-lakekeeper-catalog.yml with: - artifact-name: duckdb-iceberg \ No newline at end of file + artifact-name: duckdb-iceberg From 2517595a2d90421fdfa9372ce673d14ee24d82ed Mon Sep 17 00:00:00 2001 From: Sander Mathijs van Veen Date: Fri, 26 Jun 2026 09:53:36 +0200 Subject: [PATCH 10/14] Reduce binary size, dynamically link and use correct path --- .github/workflows/BuildIceberg.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/BuildIceberg.yml b/.github/workflows/BuildIceberg.yml index 5aa3d2f2f..7176b79b5 100644 --- a/.github/workflows/BuildIceberg.yml +++ b/.github/workflows/BuildIceberg.yml @@ -73,11 +73,13 @@ jobs: env: CATALOG_TEST_CONFIG_SETUP: 1 STATIC_LIBCPP: 1 - ENABLE_EXTENSION_AUTOLOADING: 1 - ENABLE_EXTENSION_AUTOINSTALL: 1 + # Add debug symbol names. + # Reduce the binary size and dynamically link extensions. + EXPORT_DYNAMIC_SYMBOLS: 1 + REDUCE_SYMBOLS: 1 + EXTENSION_STATIC_BUILD: 0 # Enable -DDEBUG slow verifiers (expression verifier, operator # round-trips, etc.) without changing the optimization level. - EXPORT_DYNAMIC_SYMBOLS: 1 FORCE_DEBUG: 1 FORCE_ASSERT: 1 with: @@ -86,6 +88,7 @@ jobs: vcpkg-commit: 84bab45d415d22042bd0b9081aea57f362da3f35 bundle: bash duckdb/scripts/prepare_build_artifact.sh relassert upload-name: duckdb-iceberg + upload-path: build/relassert-artifact.tar.gz #- name: Build extension Enable Equality Delete # env: From d67ca8617d600faa3809bad4394ea3aff25de85b Mon Sep 17 00:00:00 2001 From: Sander Mathijs van Veen Date: Fri, 26 Jun 2026 10:43:58 +0200 Subject: [PATCH 11/14] Extract release/relassert artifacts --- .github/workflows/test-fixture-catalog.yml | 6 ++++++ .github/workflows/test-lakekeeper-catalog.yml | 6 ++++++ .github/workflows/test-local-catalog.yml | 6 ++++++ .github/workflows/test-nessie-catalog.yml | 6 ++++++ .github/workflows/test-polaris-catalog.yml | 6 ++++++ 5 files changed, 30 insertions(+) diff --git a/.github/workflows/test-fixture-catalog.yml b/.github/workflows/test-fixture-catalog.yml index 21d95d1ff..e8eb90df1 100644 --- a/.github/workflows/test-fixture-catalog.yml +++ b/.github/workflows/test-fixture-catalog.yml @@ -45,6 +45,12 @@ jobs: name: ${{ inputs.artifact-name }} path: ${{ inputs.build-path }} + - name: Extract release build artifact + run: | + rm -rf build/release + tar -xzf build/release-artifact.tar.gz -C build + ls -lh build/release/test/unittest + - name: Restore permissions run: | find ${{ inputs.build-path }} -type f -name 'duckdb*' -exec chmod +x {} \; diff --git a/.github/workflows/test-lakekeeper-catalog.yml b/.github/workflows/test-lakekeeper-catalog.yml index 845cb6149..9993bf5e4 100644 --- a/.github/workflows/test-lakekeeper-catalog.yml +++ b/.github/workflows/test-lakekeeper-catalog.yml @@ -29,6 +29,12 @@ jobs: name: ${{ inputs.artifact-name }} path: build/relassert + - name: Extract relassert build artifact + run: | + rm -rf build/relassert + tar -xzf build/relassert-artifact.tar.gz -C build + ls -lh build/relassert/test/unittest + - name: Set up Java uses: actions/setup-java@v4 with: diff --git a/.github/workflows/test-local-catalog.yml b/.github/workflows/test-local-catalog.yml index 32517d212..7f79a4080 100644 --- a/.github/workflows/test-local-catalog.yml +++ b/.github/workflows/test-local-catalog.yml @@ -30,6 +30,12 @@ jobs: name: ${{ inputs.artifact-name }} path: build/relassert + - name: Extract relassert build artifact + run: | + rm -rf build/relassert + tar -xzf build/relassert-artifact.tar.gz -C build + ls -lh build/relassert/test/unittest + - name: Restore permissions run: | find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; diff --git a/.github/workflows/test-nessie-catalog.yml b/.github/workflows/test-nessie-catalog.yml index 1c7a18229..083708a72 100644 --- a/.github/workflows/test-nessie-catalog.yml +++ b/.github/workflows/test-nessie-catalog.yml @@ -30,6 +30,12 @@ jobs: name: ${{ inputs.artifact-name }} path: build/relassert + - name: Extract relassert build artifact + run: | + rm -rf build/relassert + tar -xzf build/relassert-artifact.tar.gz -C build + ls -lh build/relassert/test/unittest + - name: Restore permissions run: | find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; diff --git a/.github/workflows/test-polaris-catalog.yml b/.github/workflows/test-polaris-catalog.yml index 0180a48f9..8129d32f8 100644 --- a/.github/workflows/test-polaris-catalog.yml +++ b/.github/workflows/test-polaris-catalog.yml @@ -30,6 +30,12 @@ jobs: name: ${{ inputs.artifact-name }} path: build/relassert + - name: Extract relassert build artifact + run: | + rm -rf build/relassert + tar -xzf build/relassert-artifact.tar.gz -C build + ls -lh build/relassert/test/unittest + - name: Restore permissions run: | find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; From c49d9a87190bd425c1300eb3f08f1c509169fe48 Mon Sep 17 00:00:00 2001 From: Sander Mathijs van Veen Date: Fri, 26 Jun 2026 10:55:36 +0200 Subject: [PATCH 12/14] Use build-path --- .github/workflows/test-fixture-catalog.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test-fixture-catalog.yml b/.github/workflows/test-fixture-catalog.yml index e8eb90df1..a9bde3aca 100644 --- a/.github/workflows/test-fixture-catalog.yml +++ b/.github/workflows/test-fixture-catalog.yml @@ -45,11 +45,11 @@ jobs: name: ${{ inputs.artifact-name }} path: ${{ inputs.build-path }} - - name: Extract release build artifact + - name: Extract build artifact run: | - rm -rf build/release - tar -xzf build/release-artifact.tar.gz -C build - ls -lh build/release/test/unittest + rm -rf "${{ inputs.build-path }}" + tar -xzf "${{ inputs.build-path }}-artifact.tar.gz" -C build + ls -lh "${{ inputs.build-path }}"test/unittest - name: Restore permissions run: | From 910c4cae863218d9f192c041ea37518006d6ddb5 Mon Sep 17 00:00:00 2001 From: Sander Mathijs van Veen Date: Fri, 26 Jun 2026 11:06:08 +0200 Subject: [PATCH 13/14] Clean up --- .github/workflows/test-fixture-catalog.yml | 11 +++-------- .github/workflows/test-lakekeeper-catalog.yml | 7 +------ .github/workflows/test-local-catalog.yml | 7 +------ .github/workflows/test-nessie-catalog.yml | 7 +------ .github/workflows/test-polaris-catalog.yml | 7 +------ 5 files changed, 7 insertions(+), 32 deletions(-) diff --git a/.github/workflows/test-fixture-catalog.yml b/.github/workflows/test-fixture-catalog.yml index a9bde3aca..2740fab73 100644 --- a/.github/workflows/test-fixture-catalog.yml +++ b/.github/workflows/test-fixture-catalog.yml @@ -40,21 +40,16 @@ jobs: submodules: 'true' - name: Download DuckDB-Iceberg artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: ${{ inputs.artifact-name }} - path: ${{ inputs.build-path }} + path: build - name: Extract build artifact run: | rm -rf "${{ inputs.build-path }}" tar -xzf "${{ inputs.build-path }}-artifact.tar.gz" -C build - ls -lh "${{ inputs.build-path }}"test/unittest - - - name: Restore permissions - run: | - find ${{ inputs.build-path }} -type f -name 'duckdb*' -exec chmod +x {} \; - find ${{ inputs.build-path }} -type f -name 'unittest*' -exec chmod +x {} \; + ls -lh "${{ inputs.build-path }}"/test/unittest - name: Prepare leak suppressions run: | diff --git a/.github/workflows/test-lakekeeper-catalog.yml b/.github/workflows/test-lakekeeper-catalog.yml index 9993bf5e4..487bcd8fc 100644 --- a/.github/workflows/test-lakekeeper-catalog.yml +++ b/.github/workflows/test-lakekeeper-catalog.yml @@ -27,7 +27,7 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.artifact-name }} - path: build/relassert + path: build - name: Extract relassert build artifact run: | @@ -45,11 +45,6 @@ jobs: with: python-version: '3.13' - - name: Restore permissions - run: | - find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; - find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; - - name: Prepare leak suppressions run: | cp duckdb/.sanitizer-leak-suppressions.txt .combined-sanitizer-leak-suppressions.txt diff --git a/.github/workflows/test-local-catalog.yml b/.github/workflows/test-local-catalog.yml index 7f79a4080..f79e85c3f 100644 --- a/.github/workflows/test-local-catalog.yml +++ b/.github/workflows/test-local-catalog.yml @@ -28,7 +28,7 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.artifact-name }} - path: build/relassert + path: build - name: Extract relassert build artifact run: | @@ -36,11 +36,6 @@ jobs: tar -xzf build/relassert-artifact.tar.gz -C build ls -lh build/relassert/test/unittest - - name: Restore permissions - run: | - find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; - find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; - - name: Prepare leak suppressions run: | cp duckdb/.sanitizer-leak-suppressions.txt .combined-sanitizer-leak-suppressions.txt diff --git a/.github/workflows/test-nessie-catalog.yml b/.github/workflows/test-nessie-catalog.yml index 083708a72..577d557f1 100644 --- a/.github/workflows/test-nessie-catalog.yml +++ b/.github/workflows/test-nessie-catalog.yml @@ -28,7 +28,7 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.artifact-name }} - path: build/relassert + path: build - name: Extract relassert build artifact run: | @@ -36,11 +36,6 @@ jobs: tar -xzf build/relassert-artifact.tar.gz -C build ls -lh build/relassert/test/unittest - - name: Restore permissions - run: | - find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; - find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; - - name: Prepare leak suppressions run: | cp duckdb/.sanitizer-leak-suppressions.txt .combined-sanitizer-leak-suppressions.txt diff --git a/.github/workflows/test-polaris-catalog.yml b/.github/workflows/test-polaris-catalog.yml index 8129d32f8..2edcdef25 100644 --- a/.github/workflows/test-polaris-catalog.yml +++ b/.github/workflows/test-polaris-catalog.yml @@ -28,7 +28,7 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.artifact-name }} - path: build/relassert + path: build - name: Extract relassert build artifact run: | @@ -36,11 +36,6 @@ jobs: tar -xzf build/relassert-artifact.tar.gz -C build ls -lh build/relassert/test/unittest - - name: Restore permissions - run: | - find ./build/relassert -type f -name 'duckdb*' -exec chmod +x {} \; - find ./build/relassert -type f -name 'unittest*' -exec chmod +x {} \; - - name: Prepare leak suppressions run: | cp duckdb/.sanitizer-leak-suppressions.txt .combined-sanitizer-leak-suppressions.txt From 9ced473d39619f7fd6b179df42cb4dafdb8be805 Mon Sep 17 00:00:00 2001 From: Sander Mathijs van Veen Date: Fri, 26 Jun 2026 11:19:27 +0200 Subject: [PATCH 14/14] Add leak suppression for CRYPTO_zalloc --- .sanitizer-leak-suppressions.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/.sanitizer-leak-suppressions.txt b/.sanitizer-leak-suppressions.txt index a86f88ef2..0d0257056 100644 --- a/.sanitizer-leak-suppressions.txt +++ b/.sanitizer-leak-suppressions.txt @@ -5,3 +5,4 @@ leak:duckdb::AWSInput::ExecuteRequestLegacy leak:duckdb::InitAWSAPI leak:Aws::InitAPI +leak:CRYPTO_zalloc