name: LinuxRelease on: workflow_call: inputs: override_git_describe: type: string git_ref: type: string skip_tests: type: string workflow_dispatch: inputs: override_git_describe: description: 'Version tag to override git describe' type: string git_ref: description: 'Git ref' type: string skip_tests: description: 'Pass "true" to skip tests' type: string push: branches-ignore: - 'main' - 'feature' - 'v*.*-*' paths-ignore: - '**.md' - 'test/configs/**' - 'tools/**' - '!tools/shell/**' - '.github/patches/duckdb-wasm/**' - '.github/workflows/**' - '!.github/workflows/LinuxRelease.yml' merge_group: pull_request: types: [opened, reopened, ready_for_review, converted_to_draft] paths-ignore: - '**.md' - 'test/configs/**' - 'tools/**' - '!tools/shell/**' - '.github/patches/duckdb-wasm/**' - '.github/workflows/**' - '!.github/workflows/LinuxRelease.yml' concurrency: group: linuxrelease-${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || '' }}-${{ github.base_ref || '' }}-${{ github.ref != 'refs/heads/main' || github.sha }}-${{ inputs.override_git_describe }} cancel-in-progress: true env: GH_TOKEN: ${{ secrets.GH_TOKEN }} OVERRIDE_GIT_DESCRIBE: ${{ inputs.override_git_describe }} 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-release-cli: needs: - check-draft strategy: fail-fast: false matrix: config: [ { runner: ubuntu-latest, arch: amd64, image: x86_64}, {runner: ubuntu-24.04-arm, arch: arm64, image: aarch64}] name: Linux CLI (${{ matrix.config.arch }}) runs-on: ${{ matrix.config.runner }} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 ref: ${{ inputs.git_ref }} - name: Install pytest run: | python3 -m pip install pytest - name: Build shell: bash run: | export PWD=`pwd` docker run \ -v$PWD:$PWD \ -e CMAKE_BUILD_PARALLEL_LEVEL=2 \ -e OVERRIDE_GIT_DESCRIBE=$OVERRIDE_GIT_DESCRIBE \ -e EXTENSION_CONFIGS="$PWD/.github/config/bundled_extensions.cmake" \ -e ENABLE_EXTENSION_AUTOLOADING=1 \ -e ENABLE_EXTENSION_AUTOINSTALL=1 \ -e BUILD_BENCHMARK=1 \ -e FORCE_WARN_UNUSED=1 \ quay.io/pypa/manylinux_2_28_${{ matrix.config.image }} \ bash -c " set -e yum install -y perl-IPC-Cmd gcc-toolset-12 gcc-toolset-12-gcc-c++ source /opt/rh/gcc-toolset-12/enable export CC=gcc export CXX=g++ git config --global --add safe.directory $PWD make -C $PWD " - name: Print platform shell: bash run: ./build/release/duckdb -c "PRAGMA platform;" - name: Deploy shell: bash env: AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} run: | python3 scripts/amalgamation.py zip -j duckdb_cli-linux-${{ matrix.config.arch }}.zip build/release/duckdb gzip -9 -k -n -c build/release/duckdb > duckdb_cli-linux-${{ matrix.config.arch }}.gz zip -j libduckdb-linux-${{ matrix.config.arch }}.zip build/release/src/libduckdb*.* src/amalgamation/duckdb.hpp src/include/duckdb.h ./scripts/upload-assets-to-staging.sh github_release libduckdb-linux-${{ matrix.config.arch }}.zip duckdb_cli-linux-${{ matrix.config.arch }}.zip duckdb_cli-linux-${{ matrix.config.arch }}.gz - uses: actions/upload-artifact@v4 with: name: duckdb-binaries-linux-${{ matrix.config.arch }} path: | libduckdb-linux-${{ matrix.config.arch }}.zip duckdb_cli-linux-${{ matrix.config.arch }}.zip duckdb_cli-linux-${{ matrix.config.arch }}.gz - name: Test shell: bash if: ${{ inputs.skip_tests != 'true' }} run: | python3 scripts/run_tests_one_by_one.py build/release/test/unittest "*" --time_execution - name: Tools Tests shell: bash if: ${{ inputs.skip_tests != 'true' }} run: | python3 -m pytest tools/shell/tests --shell-binary build/release/duckdb - name: Examples shell: bash if: ${{ inputs.skip_tests != 'true' }} run: | build/release/benchmark/benchmark_runner benchmark/micro/update/update_with_join.benchmark build/release/duckdb -c "COPY (SELECT 42) TO '/dev/stdout' (FORMAT PARQUET)" | cat upload-libduckdb-src: name: Upload libduckdb-src.zip needs: linux-release-cli runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 ref: ${{ inputs.git_ref }} - name: Deploy shell: bash env: AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} run: | python3 scripts/amalgamation.py zip -j libduckdb-src.zip src/amalgamation/duckdb.hpp src/amalgamation/duckdb.cpp src/include/duckdb.h src/include/duckdb_extension.h ./scripts/upload-assets-to-staging.sh github_release libduckdb-src.zip symbol-leakage: name: Symbol Leakage runs-on: ubuntu-22.04 needs: linux-release-cli if: ${{ inputs.skip_tests != 'true' }} env: GEN: ninja steps: - uses: actions/checkout@v3 with: fetch-depth: 0 ref: ${{ inputs.git_ref }} - 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: ${{ vars.BRANCHES_TO_BE_CACHED == '' || contains(vars.BRANCHES_TO_BE_CACHED, github.ref) }} - name: Build shell: bash run: make - name: Symbol Leakage Test shell: bash run: python3 scripts/exported_symbols_check.py build/release/src/libduckdb*.so