name: NightlyTests on: workflow_dispatch: repository_dispatch: push: branches-ignore: - 'main' - 'feature' - 'v*.*-*' paths-ignore: - '**' - '!.github/workflows/NightlyTests.yml' - '!.github/patches/duckdb-wasm/**' pull_request: types: [opened, reopened, ready_for_review, converted_to_draft] paths-ignore: - '**' - '!.github/workflows/NightlyTests.yml' - '!.github/patches/duckdb-wasm/**' concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || '' }}-${{ github.base_ref || '' }}-${{ github.ref != 'refs/heads/main' || github.sha }} cancel-in-progress: true env: GH_TOKEN: ${{ secrets.GH_TOKEN }} DUCKDB_WASM_VERSION: "cf2048bd6d669ffa05c56d7d453e09e99de8b87e" CCACHE_SAVE: ${{ vars.BRANCHES_TO_BE_CACHED == '' || contains(vars.BRANCHES_TO_BE_CACHED, github.ref) }} jobs: check-draft: # We run all other jobs on PRs only if they are not draft PR if: github.event_name != 'pull_request' || github.event.pull_request.draft == false runs-on: ubuntu-24.04 steps: - name: Preliminary checks on CI run: echo "Event name is ${{ github.event_name }}" linux-memory-leaks: name: Linux Memory Leaks needs: check-draft runs-on: ubuntu-24.04 env: GEN: ninja steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install Ninja shell: bash run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build shell: bash run: make - name: Test shell: bash run: | python3 test/memoryleak/test_memory_leaks.py release-assert: name: Release Assertions runs-on: ubuntu-latest needs: linux-memory-leaks env: GEN: ninja BUILD_JEMALLOC: 1 CORE_EXTENSIONS: "icu;tpch;tpcds;fts;json;inet;httpfs" DISABLE_SANITIZER: 1 CRASH_ON_ASSERT: 1 RUN_SLOW_VERIFIERS: 1 steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install shell: bash run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build libcurl4-openssl-dev - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build shell: bash run: UNSAFE_NUMERIC_CAST=1 make relassert - name: Test shell: bash run: | python3 scripts/run_tests_one_by_one.py build/relassert/test/unittest "*" --no-exit --timeout 1200 release-assert-osx: name: Release Assertions OSX runs-on: macos-latest needs: linux-memory-leaks env: GEN: ninja CORE_EXTENSIONS: "icu;tpch;tpcds;fts;json;inet;httpfs" DISABLE_SANITIZER: 1 CRASH_ON_ASSERT: 1 RUN_SLOW_VERIFIERS: 1 steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install Ninja run: brew install ninja llvm - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build shell: bash run: CMAKE_LLVM_PATH='/opt/homebrew/opt/llvm' UNSAFE_NUMERIC_CAST=1 make relassert - name: Test shell: bash run: | python3 scripts/run_tests_one_by_one.py build/relassert/test/unittest "*" --no-exit --timeout 1200 release-assert-osx-storage: name: Release Assertions OSX Storage runs-on: macos-latest needs: linux-memory-leaks env: GEN: ninja CORE_EXTENSIONS: "icu;tpch;tpcds;fts;json;inet" DISABLE_SANITIZER: 1 CRASH_ON_ASSERT: 1 RUN_SLOW_VERIFIERS: 1 steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install Ninja run: brew install ninja - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build shell: bash run: UNSAFE_NUMERIC_CAST=1 make relassert - name: Test shell: bash run: | python3 scripts/run_tests_one_by_one.py build/relassert/test/unittest "*" --no-exit --timeout 1200 --force-storage smaller-binary: name: Smaller Binary runs-on: ubuntu-24.04 needs: linux-memory-leaks env: GEN: ninja BUILD_JEMALLOC: 1 CORE_EXTENSIONS: "icu;tpch;tpcds;json" steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install shell: bash run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build shell: bash run: SMALLER_BINARY=1 make - name: Measure Size shell: bash run: ls -trlah build/release/src/libduckdb* - name: Test shell: bash run: | build/release/test/unittest "*" release-assert-clang: name: Release Assertions with Clang runs-on: ubuntu-latest needs: linux-memory-leaks env: CC: clang CXX: clang++ GEN: ninja BUILD_JEMALLOC: 1 CORE_EXTENSIONS: "icu;tpch;tpcds;fts;json;inet;httpfs" DISABLE_SANITIZER: 1 CRASH_ON_ASSERT: 1 RUN_SLOW_VERIFIERS: 1 steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install shell: bash run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build llvm libcurl4-openssl-dev - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build shell: bash run: UNSAFE_NUMERIC_CAST=1 make relassert - name: Test shell: bash run: | python3 scripts/run_tests_one_by_one.py build/relassert/test/unittest "*" --no-exit --timeout 1200 sqllogic: name: Sqllogic tests runs-on: ubuntu-latest # Secondary task of this CI job is to test building duckdb on latest ubuntu needs: linux-memory-leaks steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup Ccache uses: hendrikmuhs/ccache-action@v1.2.11 # Note: pinned due to GLIBC incompatibility in later releases with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} # Build is implied by 'make sqlite' that will invoke implicitly 'make release' (we make it explicit) - name: Build shell: bash run: make release - name: Test shell: bash run: make sqlite storage-initialization: name: Storage Initialization Verification runs-on: ubuntu-22.04 needs: linux-memory-leaks env: CC: gcc-10 CXX: g++-10 GEN: ninja steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install shell: bash run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build shell: bash run: make debug - name: Test shell: bash run: python3 scripts/test_zero_initialize.py extension-updating: name: Extension updating test runs-on: ubuntu-22.04 needs: linux-memory-leaks env: CC: gcc-10 CXX: g++-10 GEN: ninja steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Cleanup disk before build run: | echo "Disk usage before clean up:" df -h sudo apt-get clean sudo rm -rf /var/lib/apt/lists/* docker system prune -af || true rm -rf ~/.cache sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf "/usr/local/share/boost" sudo rm -rf "$AGENT_TOOLSDIRECTORY" echo "Disk usage after clean up:" df -h - name: Install shell: bash run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build - uses: actions/setup-python@v4 with: python-version: '3.10' - name: Install shell: bash run: pip install awscli - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build shell: bash run: CORE_EXTENSIONS="tpch" make - name: Start Minio shell: bash run: | sudo ./scripts/install_s3_test_server.sh ./scripts/generate_presigned_url.sh source ./scripts/run_s3_test_server.sh source ./scripts/set_s3_test_server_variables.sh sleep 60 - name: Build shell: bash run: | ./scripts/run_extension_medata_tests.sh regression-test-memory-safety: name: Regression Tests between safe and unsafe builds runs-on: ubuntu-22.04 needs: linux-memory-leaks env: CC: gcc-10 CXX: g++-10 GEN: ninja BUILD_BENCHMARK: 1 BUILD_JEMALLOC: 1 CORE_EXTENSIONS: "tpch;tpcds;httpfs" steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Checkout tools repo uses: actions/checkout@v3 with: fetch-depth: 0 path: unsafe - uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install shell: bash run: | sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build libcurl4-openssl-dev && pip install requests - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build shell: bash run: | make cd unsafe UNSAFE_NUMERIC_CAST=1 DISABLE_MEMORY_SAFETY=1 make - name: Set up benchmarks shell: bash run: | cp -r benchmark unsafe/ - name: Regression Test Micro if: always() shell: bash run: | python scripts/regression/test_runner.py --old unsafe/build/release/benchmark/benchmark_runner --new build/release/benchmark/benchmark_runner --benchmarks .github/regression/micro.csv --verbose --threads 2 - name: Regression Test TPCH if: always() shell: bash run: | python scripts/regression/test_runner.py --old unsafe/build/release/benchmark/benchmark_runner --new build/release/benchmark/benchmark_runner --benchmarks .github/regression/tpch.csv --verbose --threads 2 - name: Regression Test TPCDS if: always() shell: bash run: | python scripts/regression/test_runner.py --old unsafe/build/release/benchmark/benchmark_runner --new build/release/benchmark/benchmark_runner --benchmarks .github/regression/tpcds.csv --verbose --threads 2 - name: Regression Test H2OAI if: always() shell: bash run: | python scripts/regression/test_runner.py --old unsafe/build/release/benchmark/benchmark_runner --new build/release/benchmark/benchmark_runner --benchmarks .github/regression/h2oai.csv --verbose --threads 2 - name: Regression Test IMDB if: always() shell: bash run: | python scripts/regression/test_runner.py --old unsafe/build/release/benchmark/benchmark_runner --new build/release/benchmark/benchmark_runner --benchmarks .github/regression/imdb.csv --verbose --threads 2 vector-and-block-sizes: name: Tests different vector and block sizes runs-on: ubuntu-24.04 env: LSAN_OPTIONS: suppressions=${{ github.workspace }}/.sanitizer-leak-suppressions.txt needs: linux-memory-leaks steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install shell: bash run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build id: build shell: bash env: CORE_EXTENSIONS: "json;parquet;icu;tpch;tpcds" GEN: ninja STANDARD_VECTOR_SIZE: 512 run: make relassert - name: Fast and storage tests with default and small block size shell: bash run: | ./build/relassert/test/unittest ./build/relassert/test/unittest "test/sql/storage/*" ./build/relassert/test/unittest --test-config test/configs/block_size_16kB.json ./build/relassert/test/unittest "test/sql/storage/*" --test-config test/configs/block_size_16kB.json linux-debug-configs: name: Tests different configurations with a debug build runs-on: ubuntu-24.04 env: LSAN_OPTIONS: suppressions=${{ github.workspace }}/.sanitizer-leak-suppressions.txt needs: linux-memory-leaks steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install shell: bash run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build id: build shell: bash env: CORE_EXTENSIONS: "json;parquet;icu;tpch;tpcds" GEN: ninja run: make debug - name: test/configs/enable_verification_for_debug.json if: (success() || failure()) && steps.build.conclusion == 'success' shell: bash run: | ./build/debug/test/unittest --test-config test/configs/enable_verification_for_debug.json linux-wasm-experimental: name: WebAssembly duckdb-wasm builds # disable in NightlyTests if: false needs: check-draft runs-on: ubuntu-22.04 steps: - uses: mymindstorm/setup-emsdk@v12 with: version: 'latest' - name: Setup shell: bash run: | git clone https://github.com/duckdb/duckdb-wasm cd duckdb-wasm git checkout ${{ env.DUCKDB_WASM_VERSION }} shopt -s nullglob for filename in ../.github/patches/duckdb-wasm/*.patch; do git apply $filename done git submodule init git submodule update git rm -r submodules/duckdb - uses: actions/checkout@v3 with: fetch-depth: 0 path: duckdb-wasm/submodules/duckdb - name: Setup shell: bash run: | cd duckdb-wasm make patch_duckdb || echo "done" - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Print version shell: bash run: | emcc --version - name: Build WebAssembly MVP shell: bash run: | cd duckdb-wasm bash scripts/wasm_build_lib.sh relsize mvp $(pwd)/submodules/duckdb - name: Build WebAssembly EH shell: bash run: | cd duckdb-wasm bash scripts/wasm_build_lib.sh relsize eh $(pwd)/submodules/duckdb - name: Build WebAssembly COI shell: bash run: | cd duckdb-wasm bash scripts/wasm_build_lib.sh relsize coi $(pwd)/submodules/duckdb - name: Package shell: bash run: | zip -r duckdb-wasm32.zip duckdb-wasm/packages/duckdb-wasm/src/bindings - uses: actions/upload-artifact@v4 with: name: duckdb-wasm32 path: | duckdb-wasm32.zip hash-zero: name: Hash Zero runs-on: ubuntu-24.04 needs: linux-memory-leaks env: GEN: ninja CORE_EXTENSIONS: "icu;parquet;tpch;tpcds;fts;json;inet" HASH_ZERO: 1 LSAN_OPTIONS: suppressions=${{ github.workspace }}/.sanitizer-leak-suppressions.txt DUCKDB_TEST_DESCRIPTION: 'Compiled with HASH_ZERO=1. Use require no_hash_zero to skip.' steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install shell: bash run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: key: ${{ github.job }} save: ${{ env.CCACHE_SAVE }} - name: Build shell: bash run: make relassert - name: Test shell: bash run: build/relassert/test/unittest --test-config test/configs/hash_zero.json codecov: name: Code Coverage runs-on: ubuntu-22.04 needs: linux-memory-leaks env: GEN: ninja steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install shell: bash run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build lcov curl g++ zip - name: Set up Python 3.9 uses: actions/setup-python@v5 with: python-version: '3.9' - name: Install pytest run: | python3 -m pip install pytest - name: Check Coverage shell: bash continue-on-error: true run: | make coverage-check - name: Create Archive if: ${{ success() || failure() }} shell: bash run: | zip -r coverage.zip coverage_html - uses: actions/upload-artifact@v4 if: ${{ success() || failure() }} with: name: coverage path: coverage.zip if-no-files-found: error