Skip to content

tmp13

tmp13 #152

Workflow file for this run

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 }}