From 2a1f30907e50602ea6b9494e6ebb4394fafe651f Mon Sep 17 00:00:00 2001 From: Carlo Piovesan Date: Fri, 17 May 2024 10:54:17 +0200 Subject: [PATCH] Fixup paths in extension_distribution --- .../workflows/MainDistributionPipeline.yml | 2 +- .github/workflows/_extension_distribution.yml | 377 ++++++++++++++++++ 2 files changed, 378 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/_extension_distribution.yml diff --git a/.github/workflows/MainDistributionPipeline.yml b/.github/workflows/MainDistributionPipeline.yml index 605224d..ca003eb 100644 --- a/.github/workflows/MainDistributionPipeline.yml +++ b/.github/workflows/MainDistributionPipeline.yml @@ -14,7 +14,7 @@ concurrency: jobs: duckdb-stable-build: name: Build extension binaries - uses: duckdb/extension-ci-tools/.github/workflows/_extension_distribution.yml@main + uses: ./.github/workflows/_extension_distribution.yml with: duckdb_version: main extension_name: sqlite_scanner diff --git a/.github/workflows/_extension_distribution.yml b/.github/workflows/_extension_distribution.yml new file mode 100644 index 0000000..a650522 --- /dev/null +++ b/.github/workflows/_extension_distribution.yml @@ -0,0 +1,377 @@ +# Reusable workflow for building DuckDB extensions using a standardized environment +# +# The workflow: +# - builds the extension using the CI workflow from the corresponding DuckDB version +# - uploads the extensions as gh actions artifacts in the following format: +# --extension- +# +# note: extensions are simply uploaded to GitHub actions, deploying the extensions is done a separate step. More info on +# this can be found in https://github.com/duckdb/extension-template + +name: Extension distribution +on: + workflow_call: + inputs: + # The name with which the extension will be built + extension_name: + required: true + type: string + # DuckDB version to build against, should in most cases be identical to + duckdb_version: + required: true + type: string + # ';' separated list of architectures to exclude, for example: 'linux_amd64;osx_arm64' + exclude_archs: + required: false + type: string + default: "" + # Postfix added to artifact names. Can be used to guarantee unique names when this workflow is called multiple times + artifact_postfix: + required: false + type: string + default: "" + # Override the default vcpkg commit used by this version of DuckDB + vcpkg_commit: + required: false + type: string + default: "a1a1cbc975abf909a6c8985a6a2b8fe20bbd9bd6" + # Override the default script producing the matrices. Allows specifying custom matrices. + matrix_parse_script: + required: false + type: string + default: "./duckdb/scripts/modify_distribution_matrix.py" + # Enable building the DuckDB Shell + build_duckdb_shell: + required: false + type: boolean + default: true + +jobs: + generate_matrix: + name: Generate matrix + runs-on: ubuntu-latest + outputs: + linux_matrix: ${{ steps.set-matrix-linux.outputs.linux_matrix }} + windows_matrix: ${{ steps.set-matrix-windows.outputs.windows_matrix }} + osx_matrix: ${{ steps.set-matrix-osx.outputs.osx_matrix }} + wasm_matrix: ${{ steps.set-matrix-wasm.outputs.wasm_matrix }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + submodules: 'true' + + - name: Checkout DuckDB to version + run: | + cd duckdb + git checkout ${{ inputs.duckdb_version }} + + - id: parse-matrices + run: | + python3 ${{ inputs.matrix_parse_script }} --input ./duckdb/.github/config/distribution_matrix.json --select_os linux --output linux_matrix.json --exclude "${{ inputs.exclude_archs }}" --pretty + python3 ${{ inputs.matrix_parse_script }} --input ./duckdb/.github/config/distribution_matrix.json --select_os osx --output osx_matrix.json --exclude "${{ inputs.exclude_archs }}" --pretty + python3 ${{ inputs.matrix_parse_script }} --input ./duckdb/.github/config/distribution_matrix.json --select_os windows --output windows_matrix.json --exclude "${{ inputs.exclude_archs }}" --pretty + python3 ${{ inputs.matrix_parse_script }} --input ./duckdb/.github/config/distribution_matrix.json --select_os wasm --output wasm_matrix.json --exclude "${{ inputs.exclude_archs }}" --pretty + + - id: set-matrix-linux + run: | + linux_matrix="`cat linux_matrix.json`" + echo linux_matrix=$linux_matrix >> $GITHUB_OUTPUT + echo `cat $GITHUB_OUTPUT` + + - id: set-matrix-osx + run: | + osx_matrix="`cat osx_matrix.json`" + echo osx_matrix=$osx_matrix >> $GITHUB_OUTPUT + echo `cat $GITHUB_OUTPUT` + + - id: set-matrix-windows + run: | + windows_matrix="`cat windows_matrix.json`" + echo windows_matrix=$windows_matrix >> $GITHUB_OUTPUT + echo `cat $GITHUB_OUTPUT` + + - id: set-matrix-wasm + run: | + wasm_matrix="`cat wasm_matrix.json`" + echo wasm_matrix=$wasm_matrix >> $GITHUB_OUTPUT + echo `cat $GITHUB_OUTPUT` + + linux: + name: Linux + runs-on: ubuntu-latest + container: ${{ matrix.container }} + needs: generate_matrix + if: ${{ needs.generate_matrix.outputs.linux_matrix != '{}' && needs.generate_matrix.outputs.linux_matrix != '' }} + strategy: + matrix: ${{fromJson(needs.generate_matrix.outputs.linux_matrix)}} + env: + VCPKG_TARGET_TRIPLET: ${{ matrix.vcpkg_triplet }} + VCPKG_TOOLCHAIN_PATH: ${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake + GEN: Ninja + BUILD_SHELL: ${{ inputs.build_duckdb_shell && '1' || '0' }} + DUCKDB_PLATFORM: ${{ matrix.duckdb_arch }} + + steps: + - name: Install required ubuntu packages + if: ${{ matrix.duckdb_arch == 'linux_amd64' || matrix.duckdb_arch == 'linux_arm64' }} + run: | + apt-get update -y -qq + apt-get install -y -qq software-properties-common + add-apt-repository ppa:git-core/ppa + apt-get update -y -qq + apt-get install -y -qq ninja-build make gcc-multilib g++-multilib libssl-dev wget openjdk-8-jdk zip maven unixodbc-dev libc6-dev-i386 lib32readline6-dev libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext unzip build-essential checkinstall libffi-dev curl libz-dev openssh-client + + - name: Install Git 2.18.5 + if: ${{ matrix.duckdb_arch == 'linux_amd64' || matrix.duckdb_arch == 'linux_arm64' }} + run: | + wget https://github.com/git/git/archive/refs/tags/v2.18.5.tar.gz + tar xvf v2.18.5.tar.gz + cd git-2.18.5 + make + make prefix=/usr install + git --version + + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + submodules: 'true' + + - name: Checkout DuckDB to version + run: | + cd duckdb + git checkout ${{ inputs.duckdb_version }} + + - name: Setup ManyLinux2014 + if: ${{ matrix.duckdb_arch == 'linux_amd64_gcc4' }} + run: | + ./duckdb/scripts/setup_manylinux2014.sh general aws-cli ccache ssh python_alias openssl + + - name: Setup Ccache + uses: hendrikmuhs/ccache-action@v1.2.11 # Note: pinned due to GLIBC incompatibility in later releases + continue-on-error: true + with: + key: ${{ github.job }}-${{ matrix.duckdb_arch }} + + - name: Setup Ubuntu + if: ${{ matrix.duckdb_arch == 'linux_amd64' || matrix.duckdb_arch == 'linux_arm64' }} + uses: ./duckdb/.github/actions/ubuntu_18_setup + with: + aarch64_cross_compile: ${{ matrix.duckdb_arch == 'linux_arm64' && 1 }} + + - name: Setup vcpkg + uses: lukka/run-vcpkg@v11.1 + with: + vcpkgGitCommitId: ${{ inputs.vcpkg_commit }} + + - name: Build extension + env: + GEN: ninja + CC: ${{ matrix.duckdb_arch == 'linux_arm64' && 'aarch64-linux-gnu-gcc' || '' }} + CXX: ${{ matrix.duckdb_arch == 'linux_arm64' && 'aarch64-linux-gnu-g++' || '' }} + DUCKDB_PLATFORM: ${{ matrix.duckdb_arch }} + run: | + make release + + - name: Test extension + if: ${{ matrix.duckdb_arch != 'linux_arm64'}} + run: | + make test + + - uses: actions/upload-artifact@v2 + with: + name: ${{ inputs.extension_name }}-${{ inputs.duckdb_version }}-extension-${{matrix.duckdb_arch}}${{inputs.artifact_postfix}} + path: | + build/release/extension/${{ inputs.extension_name }}/${{ inputs.extension_name }}.duckdb_extension + + macos: + name: MacOS + runs-on: macos-latest + needs: generate_matrix + if: ${{ needs.generate_matrix.outputs.osx_matrix != '{}' && needs.generate_matrix.outputs.osx_matrix != '' }} + strategy: + matrix: ${{fromJson(needs.generate_matrix.outputs.osx_matrix)}} + env: + VCPKG_TOOLCHAIN_PATH: ${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake + VCPKG_TARGET_TRIPLET: ${{ matrix.vcpkg_triplet }} + OSX_BUILD_ARCH: ${{ matrix.osx_build_arch }} + GEN: Ninja + BUILD_SHELL: ${{ inputs.build_duckdb_shell && '1' || '0' }} + DUCKDB_PLATFORM: ${{ matrix.duckdb_arch }} + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + submodules: 'true' + + - name: Install Ninja + run: | + brew install ninja + + - name: Setup Ccache + uses: hendrikmuhs/ccache-action@main + continue-on-error: true + with: + key: ${{ github.job }}-${{ matrix.duckdb_arch }} + + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Checkout DuckDB to version + run: | + cd duckdb + git checkout ${{ inputs.duckdb_version }} + + - name: Setup vcpkg + uses: lukka/run-vcpkg@v11.1 + with: + vcpkgGitCommitId: ${{ inputs.vcpkg_commit }} + + - name: Build extension + shell: bash + env: + DUCKDB_PLATFORM: ${{ matrix.duckdb_arch }} + run: | + make release + + - name: Test Extension + if: ${{ matrix.osx_build_arch == 'x86_64'}} + shell: bash + run: | + make test + + - uses: actions/upload-artifact@v2 + with: + name: ${{ inputs.extension_name }}-${{ inputs.duckdb_version }}-extension-${{matrix.duckdb_arch}}${{inputs.artifact_postfix}} + path: | + build/release/extension/${{ inputs.extension_name }}/${{ inputs.extension_name }}.duckdb_extension + + windows: + name: Windows + runs-on: windows-latest + needs: generate_matrix + if: ${{ needs.generate_matrix.outputs.windows_matrix != '{}' && needs.generate_matrix.outputs.windows_matrix != '' }} + strategy: + matrix: ${{fromJson(needs.generate_matrix.outputs.windows_matrix)}} + env: + GEN: Ninja + VCPKG_TOOLCHAIN_PATH: ${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake + VCPKG_TARGET_TRIPLET: ${{ matrix.vcpkg_triplet }} + BUILD_SHELL: ${{ inputs.build_duckdb_shell && '1' || '0' }} + DUCKDB_PLATFORM: ${{ matrix.duckdb_arch }} + CC: ${{ matrix.duckdb_arch == 'windows_amd64_rtools' && 'gcc' || '' }} + CXX: ${{ matrix.duckdb_arch == 'windows_amd64_rtools' && 'g++' || '' }} + + steps: + - name: Keep \n line endings + shell: bash + run: | + git config --global core.autocrlf false + git config --global core.eol lf + + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + submodules: 'true' + + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - uses: r-lib/actions/setup-r@v2 + if: matrix.duckdb_arch == 'windows_amd64_rtools' + with: + r-version: 'devel' + update-rtools: true + rtools-version: '42' # linker bug in 43 + + - name: Checkout DuckDB to version + run: | + cd duckdb + git checkout ${{ inputs.duckdb_version }} + + - name: Setup Ccache + uses: hendrikmuhs/ccache-action@main + continue-on-error: true + with: + key: ${{ github.job }}-${{ matrix.duckdb_arch }} + + - name: Setup vcpkg + uses: lukka/run-vcpkg@v11.1 + with: + vcpkgGitCommitId: ${{ inputs.vcpkg_commit }} + + - name: Fix for MSVC issue + shell: bash + env: + OVERLAY_TRIPLET_SRC: ${{ github.workspace }}/vcpkg/triplets/community/x64-windows-static-md.cmake + OVERLAY_TRIPLET_DST: ${{ github.workspace }}/overlay_triplets/x64-windows-static-md.cmake + run: | + mkdir overlay_triplets + cp $OVERLAY_TRIPLET_SRC $OVERLAY_TRIPLET_DST + echo "set(VCPKG_PLATFORM_TOOLSET_VERSION "14.39")" >> $OVERLAY_TRIPLET_DST + + - name: Build & test extension + env: + VCPKG_OVERLAY_TRIPLETS: "${{ github.workspace }}/overlay_triplets" + DUCKDB_PLATFORM: ${{ matrix.duckdb_arch }} + DUCKDB_PLATFORM_RTOOLS: ${{ matrix.duckdb_arch == 'windows_amd64_rtools' && 1 || 0 }} + run: | + make test_release + + - uses: actions/upload-artifact@v2 + with: + name: ${{ inputs.extension_name }}-${{ inputs.duckdb_version }}-extension-${{matrix.duckdb_arch}}${{inputs.artifact_postfix}} + path: | + build/release/extension/${{ inputs.extension_name }}/${{ inputs.extension_name }}.duckdb_extension + + wasm: + name: DuckDB-Wasm + runs-on: ubuntu-latest + needs: generate_matrix + if: ${{ needs.generate_matrix.outputs.wasm_matrix != '{}' && needs.generate_matrix.outputs.wasm_matrix != '' }} + strategy: + matrix: ${{fromJson(needs.generate_matrix.outputs.wasm_matrix)}} + env: + VCPKG_TARGET_TRIPLET: ${{ matrix.vcpkg_triplet }} + VCPKG_TOOLCHAIN_PATH: ${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake + GEN: Ninja + DUCKDB_PLATFORM: ${{ matrix.duckdb_arch }} + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + submodules: 'true' + + - name: Checkout DuckDB to version + run: | + cd duckdb + git checkout ${{ inputs.duckdb_version }} + + - uses: mymindstorm/setup-emsdk@v13 + with: + version: 'latest' + + - name: Setup vcpkg + uses: lukka/run-vcpkg@v11.1 + with: + vcpkgGitCommitId: ${{ inputs.vcpkg_commit }} + + - name: Setup Ccache + uses: hendrikmuhs/ccache-action@main + continue-on-error: true + with: + key: ${{ github.job }}-${{ matrix.duckdb_arch }} + + - name: Build Wasm module + run: | + make ${{ matrix.duckdb_arch }} + + - uses: actions/upload-artifact@v3 + with: + name: ${{ inputs.extension_name }}-${{ inputs.duckdb_version }}-extension-${{matrix.duckdb_arch}}${{inputs.artifact_postfix}} + path: | + build/${{ matrix.duckdb_arch }}/extension/${{ inputs.extension_name }}/${{ inputs.extension_name }}.duckdb_extension.wasm