tmp13 #152
Workflow file for this run
This file contains hidden or 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
name: Java JDBC | |
on: | |
push: | |
pull_request: | |
workflow_dispatch: | |
inputs: | |
skip_tests: | |
description: 'Skip test runs' | |
required: false | |
default: 'false' | |
type: 'string' | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} | |
jobs: | |
spark-test: | |
name: Spark Test | |
runs-on: ubuntu-latest | |
env: | |
#https://blobs.duckdb.org/ci/spark-3.5.3-bin-hadoop3.tgz | |
DUCKDB_JDBC_JAR: ${{ github.workspace }}/build/release/duckdb_jdbc.jar | |
SPARK_SQL_EXE: ${{ github.workspace }}/spark-3.5.3-bin-hadoop3/bin/spark-sql | |
POSTGRES_HOST: 127.0.0.1 | |
POSTGRES_PORT: 5432 | |
POSTGRES_MAINTENANCE_DB: postgres | |
POSTGRES_USERNAME: postgres | |
POSTGRES_PASSWORD: postgres | |
DUCKLAKE_CATALOG_DB: lake_test | |
PARQUET_FILE_URL: https://blobs.duckdb.org/data/taxi_2019_04.parquet | |
SESSION_INIT_SQL_FILE: ${{ github.workspace }}/build/release/spark-session-init.sql | |
MINIO_EXE: ${{ github.workspace }}/minio | |
MINIO_PID: ${{ github.workspace }}/minio.pid | |
MC_EXE: ${{ github.workspace }}/mc | |
MINIO_DATA: ${{ github.workspace }}/minio_data | |
MINIO_HOST: 127.0.0.1 | |
MINIO_PORT: 9000 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Configure Resources | |
run: | | |
mkdir build | |
cd build | |
mkdir release | |
cd release | |
cmake ../.. | |
- name: Setup Postgres | |
uses: ikalnytskyi/action-setup-postgres@v7 | |
with: | |
postgres-version: '17' | |
username: ${{ env.POSTGRES_USERNAME }} | |
password: ${{ env.POSTGRES_PASSWORD }} | |
database: ${{ env.POSTGRES_MAINTENANCE_DB }} | |
port: ${{ env.POSTGRES_PORT }} | |
ssl: true | |
- name: Setup Minio | |
run: | | |
wget -nv https://dl.min.io/server/minio/release/linux-amd64/minio | |
chmod +x minio | |
./minio --version | |
wget -nv https://dl.min.io/client/mc/release/linux-amd64/mc | |
chmod +x mc | |
./mc --version | |
java -version | |
java ./src/test/external/SetupMinio.java | |
- name: Setup DuckLake | |
run: | | |
wget -nv https://github.com/staticlibs/jdbc_bin_temp/raw/refs/heads/master/duckdb_jdbc.jar | |
wget -nv https://github.com/pgjdbc/pgjdbc/releases/download/REL42.7.7/postgresql-42.7.7.jar | |
java -version | |
java -cp duckdb_jdbc.jar:postgresql-42.7.7.jar ./src/test/external/SetupDuckLake.java | |
format-check: | |
if: ${{ false }} | |
name: Format Check | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- run: | | |
python3 -m pip install --user clang_format==11.0.1 | |
make format-check | |
java-linux-amd64: | |
name: Java Linux (amd64) | |
runs-on: ubuntu-latest | |
needs: format-check | |
env: | |
MANYLINUX_IMAGE: quay.io/pypa/manylinux_2_28_x86_64 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Build | |
shell: bash | |
run: | | |
docker run \ | |
-v.:/duckdb \ | |
-e GEN=ninja \ | |
-e JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk \ | |
${{ env.MANYLINUX_IMAGE }} \ | |
bash -c " | |
set -e | |
cat /etc/os-release | |
dnf install -y \ | |
java-1.8.0-openjdk-devel \ | |
ninja-build \ | |
gcc-toolset-12-gcc-c++ | |
source /opt/rh/gcc-toolset-12/enable | |
make -C /duckdb release | |
" | |
- name: JDBC Tests EL8 | |
shell: bash | |
if: ${{ inputs.skip_tests != 'true' }} | |
run: | | |
docker run \ | |
-v.:/duckdb \ | |
${{ env.MANYLINUX_IMAGE }} \ | |
bash -c " | |
set -e | |
cat /etc/os-release | |
dnf install -y \ | |
java-1.8.0-openjdk | |
/usr/lib/jvm/jre-1.8.0-openjdk/bin/java -version | |
cd /duckdb | |
/usr/lib/jvm/jre-1.8.0-openjdk/bin/java \ | |
-cp ./build/release/duckdb_jdbc_tests.jar:./build/release/duckdb_jdbc.jar \ | |
org.duckdb.TestDuckDBJDBC | |
rm ./test1.db | |
" | |
- name: JDBC Tests | |
shell: bash | |
if: ${{ inputs.skip_tests != 'true' }} | |
run: | | |
cat /etc/os-release | |
${JAVA_HOME_21_X64}/bin/java -version | |
${JAVA_HOME_21_X64}/bin/java \ | |
-cp ./build/release/duckdb_jdbc_tests.jar:./build/release/duckdb_jdbc.jar \ | |
org.duckdb.TestDuckDBJDBC | |
- name: Checkout Platform TCK | |
if: ${{ inputs.skip_tests != 'true' }} | |
uses: actions/checkout@v4 | |
with: | |
repository: jakartaee/platform-tck | |
ref: 10.0.6 | |
path: platform-tck | |
- name: Checkout CTS Runner | |
if: ${{ inputs.skip_tests != 'true' }} | |
uses: actions/checkout@v4 | |
with: | |
repository: duckdb/jdbc_compatibility_test_suite_runner | |
path: jdbc_compatibility_test_suite_runner | |
- name: CTS tests | |
if: ${{ inputs.skip_tests != 'true' }} | |
shell: bash | |
run: | | |
docker run \ | |
-v.:/duckdb \ | |
-e JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk \ | |
-e DUCKDB_JAR=/duckdb/build/release/duckdb_jdbc.jar \ | |
-e PLATFORM_TCK_DIR=/duckdb/platform-tck \ | |
${{ env.MANYLINUX_IMAGE }} \ | |
bash -c " | |
set -e | |
cat /etc/os-release | |
dnf install -y \ | |
java-1.8.0-openjdk-devel | |
make -C /duckdb/jdbc_compatibility_test_suite_runner test | |
" | |
- name: Deploy | |
shell: bash | |
run: | | |
cp build/release/duckdb_jdbc.jar duckdb_jdbc-linux-amd64.jar | |
./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-linux-amd64.jar | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: java-linux-amd64 | |
path: | | |
build/release/duckdb_jdbc.jar | |
java-linux-aarch64: | |
name: Java Linux (aarch64) | |
runs-on: ubuntu-24.04-arm | |
needs: java-linux-amd64 | |
env: | |
MANYLINUX_IMAGE: quay.io/pypa/manylinux_2_28_aarch64 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Build | |
shell: bash | |
run: | | |
docker run \ | |
-v.:/duckdb \ | |
-e GEN=ninja \ | |
-e JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk \ | |
${{ env.MANYLINUX_IMAGE }} \ | |
bash -c " | |
set -e | |
cat /etc/os-release | |
dnf install -y \ | |
java-1.8.0-openjdk-devel \ | |
ninja-build \ | |
gcc-toolset-12-gcc-c++ | |
source /opt/rh/gcc-toolset-12/enable | |
make -C /duckdb release | |
" | |
- name: JDBC Tests EL8 | |
shell: bash | |
if: ${{ inputs.skip_tests != 'true' }} | |
run: | | |
docker run \ | |
-v.:/duckdb \ | |
${{ env.MANYLINUX_IMAGE }} \ | |
bash -c " | |
set -e | |
cat /etc/os-release | |
dnf install -y \ | |
java-1.8.0-openjdk | |
/usr/lib/jvm/jre-1.8.0-openjdk/bin/java -version | |
cd /duckdb | |
/usr/lib/jvm/jre-1.8.0-openjdk/bin/java \ | |
-cp ./build/release/duckdb_jdbc_tests.jar:./build/release/duckdb_jdbc.jar \ | |
org.duckdb.TestDuckDBJDBC | |
rm ./test1.db | |
" | |
- name: JDBC Tests | |
shell: bash | |
if: ${{ inputs.skip_tests != 'true' }} | |
run: | | |
cat /etc/os-release | |
${JAVA_HOME_21_X64}/bin/java -version | |
${JAVA_HOME_21_X64}/bin/java \ | |
-cp ./build/release/duckdb_jdbc_tests.jar:./build/release/duckdb_jdbc.jar \ | |
org.duckdb.TestDuckDBJDBC | |
- name: Deploy | |
shell: bash | |
run: | | |
cp build/release/duckdb_jdbc.jar duckdb_jdbc-linux-aarch64.jar | |
./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-linux-aarch64.jar | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: java-linux-aarch64 | |
path: | | |
build/release/duckdb_jdbc.jar | |
java-linux-amd64-musl: | |
name: Java Linux (amd64-musl) | |
runs-on: ubuntu-latest | |
needs: java-linux-amd64 | |
env: | |
ALPINE_IMAGE: alpine:3.21 | |
ALPINE_PACKAGES: cmake g++ make openjdk8-jdk samurai | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Build | |
shell: bash | |
run: | | |
docker run \ | |
-v.:/duckdb \ | |
-e GEN=ninja \ | |
-e JAVA_HOME=/usr/lib/jvm/java-8-openjdk \ | |
${{ env.ALPINE_IMAGE }} \ | |
sh -c 'apk add ${{ env.ALPINE_PACKAGES }} && make -C /duckdb release' | |
- name: JDBC Tests | |
shell: bash | |
if: ${{ inputs.skip_tests != 'true' }} | |
run: | | |
docker run \ | |
-v.:/duckdb \ | |
-e GEN=ninja \ | |
-e JAVA_HOME=/usr/lib/jvm/java-8-openjdk \ | |
${{ env.ALPINE_IMAGE }} \ | |
sh -c 'apk add ${{ env.ALPINE_PACKAGES }} && make -C /duckdb test' | |
- name: Deploy | |
shell: bash | |
run: | | |
cp build/release/duckdb_jdbc.jar duckdb_jdbc-linux-amd64-musl.jar | |
./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-linux-amd64-musl.jar | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: java-linux-amd64-musl | |
path: | | |
build/release/duckdb_jdbc.jar | |
java-linux-aarch64-musl: | |
name: Java Linux (aarch64-musl) | |
runs-on: ubuntu-24.04-arm | |
needs: java-linux-amd64 | |
env: | |
ALPINE_IMAGE: alpine:3.21 | |
ALPINE_PACKAGES: cmake g++ make openjdk8-jdk samurai | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Build | |
shell: bash | |
run: | | |
docker run \ | |
-v.:/duckdb \ | |
-e GEN=ninja \ | |
-e JAVA_HOME=/usr/lib/jvm/java-8-openjdk \ | |
${{ env.ALPINE_IMAGE }} \ | |
sh -c 'apk add ${{ env.ALPINE_PACKAGES }} && make -C /duckdb release' | |
# Test runs are failing because of linux_arm64_musl extensions missing | |
- name: JDBC Tests | |
shell: bash | |
if: ${{ inputs.skip_tests != 'true' }} | |
run: | | |
docker run \ | |
-v.:/duckdb \ | |
-e GEN=ninja \ | |
-e JAVA_HOME=/usr/lib/jvm/java-8-openjdk \ | |
${{ env.ALPINE_IMAGE }} \ | |
sh -c 'apk add ${{ env.ALPINE_PACKAGES }} && (make -C /duckdb test || true)' | |
- name: Deploy | |
shell: bash | |
run: | | |
cp build/release/duckdb_jdbc.jar duckdb_jdbc-linux-aarch64-musl.jar | |
./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-linux-aarch64-musl.jar | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: java-linux-aarch64-musl | |
path: | | |
build/release/duckdb_jdbc.jar | |
java-windows-amd64: | |
name: Java Windows (amd64) | |
runs-on: windows-latest | |
needs: java-linux-amd64 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ inputs.git_ref }} | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
- name: Build | |
shell: bash | |
run: make release | |
- name: Java Tests | |
if: ${{ inputs.skip_tests != 'true' }} | |
shell: bash | |
run: | | |
ls -R . | |
make test | |
- name: Deploy | |
shell: bash | |
run: | | |
cp build/release/duckdb_jdbc.jar duckdb_jdbc-windows-amd64.jar | |
./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-windows-amd64.jar | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: java-windows-amd64 | |
path: | | |
build/release/duckdb_jdbc.jar | |
java-osx-universal: | |
name: Java OSX (Universal) | |
runs-on: macos-14 | |
needs: java-linux-amd64 | |
env: | |
GEN: ninja | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Build | |
shell: bash | |
run: make release | |
- name: Java Tests | |
if: ${{ inputs.skip_tests != 'true' }} | |
shell: bash | |
run: make test | |
- name: See if this actually universal | |
shell: bash | |
run: lipo -archs build/release/libduckdb_java.so_osx_universal | grep "x86_64 arm64" | |
- name: Deploy | |
shell: bash | |
run: | | |
cp build/release/duckdb_jdbc.jar duckdb_jdbc-osx-universal.jar | |
./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-osx-universal.jar | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: java-osx-universal | |
path: | | |
build/release/duckdb_jdbc.jar | |
java-combine: | |
if: ${{ github.repository == 'duckdb/duckdb-java' && inputs.override_git_describe == '' && startsWith(github.ref, 'refs/tags/') }} | |
name: Java Combine | |
runs-on: ubuntu-latest | |
needs: | |
- java-linux-amd64 | |
- java-linux-aarch64 | |
- java-linux-amd64-musl | |
- java-linux-aarch64-musl | |
- java-windows-amd64 | |
- java-osx-universal | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- shell: bash | |
run: mkdir jdbc-artifacts | |
- uses: actions/download-artifact@v4 | |
with: | |
name: java-linux-amd64 | |
path: jdbc-artifacts/java-linux-amd64 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: java-linux-aarch64 | |
path: jdbc-artifacts/java-linux-aarch64 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: java-linux-amd64-musl | |
path: jdbc-artifacts/java-linux-amd64-musl | |
- uses: actions/download-artifact@v4 | |
with: | |
name: java-linux-aarch64-musl | |
path: jdbc-artifacts/java-linux-aarch64-musl | |
- uses: actions/download-artifact@v4 | |
with: | |
name: java-windows-amd64 | |
path: jdbc-artifacts/java-windows-amd64 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: java-osx-universal | |
path: jdbc-artifacts/java-osx-universal | |
- name: Combine JARs | |
shell: bash | |
env: | |
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} | |
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} | |
run: | | |
mkdir -m 700 -p ~/.gnupg | |
echo -e "passphrase asdf\npinentry-mode loopback\nno-tty\nbatch\n" > ~/.gnupg/gpg.conf | |
echo "${{ secrets.MAVEN_PGP_PK }}" | base64 -d > maven_pgp_key | |
gpg --batch --import maven_pgp_key | |
python ./scripts/jdbc_maven_deploy.py ${{ github.ref_name }} jdbc-artifacts . | |
- name: Upload artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: java-jars | |
path: | | |
jdbc-artifacts | |
java-merge-vendoring-pr: | |
name: Merge vendoring PR | |
if: ${{ github.repository == 'duckdb/duckdb-java' && github.event_name == 'pull_request' && github.head_ref == format('vendoring-{0}', github.base_ref) }} | |
needs: | |
- java-linux-amd64 | |
- java-linux-aarch64 | |
- java-linux-amd64-musl | |
- java-linux-aarch64-musl | |
- java-windows-amd64 | |
- java-osx-universal | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Merge vendoring PR | |
id: merge_vendoring_pr | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
echo "Merging PR number: ${{ github.event.pull_request.number }} with message: ${{ github.event.pull_request.title }}" | |
gh pr merge vendoring-${{ github.base_ref }} \ | |
--rebase \ | |
--subject "${{ github.event.pull_request.title }}" \ | |
--body "" | |
- name: Update vendoring branch | |
id: update_vendoring_branch | |
if: ${{ steps.merge_vendoring_pr.outcome == 'success' }} | |
run: | | |
# Delete vendoring-${{ github.base_ref }} branch and re-create it for future PRs | |
git push --delete origin vendoring-${{ github.base_ref }} | |
git checkout --track origin/${{ github.base_ref }} | |
git pull --ff-only | |
git branch vendoring-${{ github.base_ref }} | |
git push origin vendoring-${{ github.base_ref }} |