Skip to content

Commit

Permalink
merge main
Browse files Browse the repository at this point in the history
  • Loading branch information
Maxxen committed May 23, 2024
2 parents 87bf6d6 + 6826755 commit e3cbdbc
Show file tree
Hide file tree
Showing 4 changed files with 396 additions and 13 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/MainDistributionPipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,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: spatial
Expand Down
381 changes: 381 additions & 0 deletions .github/workflows/_extension_distribution.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,381 @@
# 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:
# <ext_name>-<duckdb_version>-extension-<arch><optional_postfix>
#
# 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/[email protected] # 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/[email protected]
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@v3
with:
if-no-files-found: error
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/[email protected]
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@v3
with:
if-no-files-found: error
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/[email protected]
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@v3
with:
if-no-files-found: error
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/[email protected]
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:
if-no-files-found: error
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
Loading

0 comments on commit e3cbdbc

Please sign in to comment.