generated from duckdb/extension-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1ff6075
commit c74210e
Showing
2 changed files
with
373 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,7 +14,7 @@ concurrency: | |
jobs: | ||
duckdb-stable-build: | ||
name: Build extension binaries | ||
uses: duckdb/extension-ci-tools/.github/workflows/[email protected] | ||
uses: ./.github/workflows/[email protected] | ||
with: | ||
duckdb_version: v0.10.1 | ||
extension_name: deltatable | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,372 @@ | ||
# Reusable workflow for extension building | ||
|
||
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 | ||
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 | ||
- name: Test extension | ||
if: always() | ||
run: | | ||
echo "ERROR LOG" | ||
cat build/release/rust/src/delta_kernel-stamp/delta_kernel-build-*.log | ||
- 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 | ||
with: | ||
key: ${{ github.job }}-${{ matrix.duckdb_arch }} | ||
|
||
- uses: actions/setup-python@v5 | ||
with: | ||
python-version: '3.7' | ||
|
||
- 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@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.7' | ||
|
||
- 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 | ||
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.38")" >> $OVERLAY_TRIPLET_DST | ||
- name: Build & test extension | ||
env: | ||
VCPKG_OVERLAY_TRIPLETS: "${{ github.workspace }}/overlay_triplets" | ||
DUCKDB_PLATFORM: ${{ matrix.duckdb_arch }} | ||
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/[email protected] | ||
with: | ||
vcpkgGitCommitId: ${{ inputs.vcpkg_commit }} | ||
|
||
- name: Setup Ccache | ||
uses: hendrikmuhs/ccache-action@main | ||
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 }}/${{ inputs.extension_name }}.duckdb_extension.wasm |