Skip to content

Fix JNI exception class name casing, pin Rust toolchain, and remove deprecated surrealdb_unstable flag #272

Fix JNI exception class name casing, pin Rust toolchain, and remove deprecated surrealdb_unstable flag

Fix JNI exception class name casing, pin Rust toolchain, and remove deprecated surrealdb_unstable flag #272

Workflow file for this run

name: Cross-Compile
on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
inputs:
run_optional_task:
description: 'Publish?'
required: false
default: 'false'
jobs:
android:
strategy:
matrix:
include:
- target: x86_64-linux-android
ndk: x86_64
- target: aarch64-linux-android
ndk: arm64-v8a
- target: i686-linux-android
ndk: x86
- target: armv7-linux-androideabi
ndk: armeabi-v7a
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Cache Rust
uses: Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae # v2
- name: Install dependencies
run: sudo apt-get update -y
- name: Set up Rust
uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
with:
targets: ${{ matrix.target }}
- name: Install cargo-ndk
run: cargo install cargo-ndk
- name: Build
run: cargo ndk -t ${{ matrix.ndk }} build --release
- name: Upload so lib
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/*.so
linux:
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
linker: CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=gcc
apt-get: gcc
- target: aarch64-unknown-linux-gnu
linker: CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc
apt-get: gcc-aarch64-linux-gnu
- target: i686-unknown-linux-gnu
linker: CARGO_TARGET_I686_UNKNOWN_LINUX_GNU_LINKER=gcc
apt-get: gcc-multilib
- target: armv7-unknown-linux-gnueabihf
linker: CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc
apt-get: gcc-arm-linux-gnueabihf
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Cache Rust
uses: Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae # v2
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y ${{ matrix.apt-get }}
- name: Set up Rust
uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
with:
targets: ${{ matrix.target }}
- name: Build
run: |
export ${{ matrix.linker }}
cargo build --target ${{ matrix.target }} --release
- name: Upload artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/*.so
windows:
strategy:
matrix:
arch: [ x86_64, i686 ]
runs-on: windows-latest
steps:
- name: Checkout repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Cache Rust
uses: Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae # v2
- name: Set up Rust
uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
with:
target: ${{ matrix.arch }}-pc-windows-msvc
- name: Build
run: cargo build --target ${{ matrix.arch }}-pc-windows-msvc --release
- name: Upload artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: ${{ matrix.arch }}-pc-windows-msvc
path: target/${{ matrix.arch }}-pc-windows-msvc/release/*.dll
macos:
strategy:
matrix:
include:
- arch: x86_64
runs-on: macos-15-intel
- arch: aarch64
runs-on: macos-latest
runs-on: ${{ matrix.runs-on }}
steps:
- name: Checkout repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Cache Rust
uses: Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae # v2
- name: Set up Rust
uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
- name: Build
run: cargo build --target ${{ matrix.arch }}-apple-darwin --release
- name: Upload artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: ${{ matrix.arch }}-apple-darwin
path: target/${{ matrix.arch }}-apple-darwin/release/*.dylib
aggregated-jar:
runs-on: ubuntu-latest
needs:
- android
- linux
- windows
- macos
steps:
- name: Install dependencies
run: sudo apt-get update
- name: Checkout repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up JDK
uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
distribution: 'temurin'
java-version: 25
- name: Gradle
run: chmod +x gradlew
- name: Create directories for artifacts
run: |
mkdir -p src/main/resources/natives/android_64
mkdir -p src/main/resources/natives/android_32
mkdir -p src/main/resources/natives/android_arm64
mkdir -p src/main/resources/natives/android_arm32
mkdir -p src/main/resources/natives/linux_64
mkdir -p src/main/resources/natives/linux_32
mkdir -p src/main/resources/natives/linux_arm64
mkdir -p src/main/resources/natives/linux_arm32
mkdir -p src/main/resources/natives/osx_64
mkdir -p src/main/resources/natives/osx_arm64
mkdir -p src/main/resources/natives/windows_64
mkdir -p src/main/resources/natives/windows_32
- name: Download Android 64 intel
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: x86_64-linux-android
path: src/main/resources/natives/android_64
- name: Download Android 32 intel
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: i686-linux-android
path: src/main/resources/natives/android_32
- name: Download Android 64 arm
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: aarch64-linux-android
path: src/main/resources/natives/android_arm64
- name: Download Android 32 arm
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: armv7-linux-androideabi
path: src/main/resources/natives/android_arm32
- name: Download Linux 64 intel
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: x86_64-unknown-linux-gnu
path: src/main/resources/natives/linux_64
- name: Download Linux 32 intel
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
continue-on-error: true
with:
name: i686-unknown-linux-gnu
path: src/main/resources/natives/linux_32
- name: Download Linux 64 arm
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: aarch64-unknown-linux-gnu
path: src/main/resources/natives/linux_arm64
- name: Download Linux 32 arm
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: armv7-unknown-linux-gnueabihf
path: src/main/resources/natives/linux_arm32
- name: Download Darwin 64 intel
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: x86_64-apple-darwin
path: src/main/resources/natives/osx_64
- name: Download Darwin 64 arm
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: aarch64-apple-darwin
path: src/main/resources/natives/osx_arm64
- name: Download Windows 64 intel
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: x86_64-pc-windows-msvc
path: src/main/resources/natives/windows_64
- name: Download Windows 32 intel
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: i686-pc-windows-msvc
path: src/main/resources/natives/windows_32
- name: Extract version
id: version
run: echo "VERSION=$(grep '^version ' build.gradle | sed "s/version '\(.*\)'/\1/")" >> $GITHUB_OUTPUT
- name: Build JAR
run: ./gradlew jar
- name: Upload JAR artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: surrealdb
path: build/libs/surrealdb-${{ steps.version.outputs.VERSION }}.jar
- name: Start SurrealDB
uses: surrealdb/setup-surreal@7c103070ba4f544240cd287432ba70d6f50163a5 # v2
with:
surrealdb_version: v3.0.4
surrealdb_port: 8000
surrealdb_auth: false
surrealdb_strict: false
surrealdb_log: info
surrealdb_additional_args: --allow-all
surrealdb_retry_count: 30
- name: Linux Integration Test
run: ./gradlew -i integrationTest
integration-tests:
strategy:
matrix:
os: [ macos-14, macos-latest, windows-latest, ubuntu-latest ]
runs-on: ${{ matrix.os }}
needs:
- aggregated-jar
steps:
- name: Checkout repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up JDK
uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
distribution: 'temurin'
java-version: 25
- name: Gradle
run: chmod +x gradlew
- name: Create directory native
run: mkdir -p native
- name: Download JAR
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: surrealdb
path: native
- name: Start SurrealDB
if: runner.os != 'Windows'
uses: surrealdb/setup-surreal@7c103070ba4f544240cd287432ba70d6f50163a5 # v2
with:
surrealdb_version: v3.0.4
surrealdb_port: 8000
surrealdb_auth: false
surrealdb_strict: false
surrealdb_log: info
surrealdb_additional_args: --allow-all
surrealdb_retry_count: 30
- name: Tests
run: ./gradlew -i integrationTest
publish:
needs:
- aggregated-jar
- integration-tests
if: github.event_name == 'workflow_dispatch' && github.event.inputs.run_optional_task == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up JDK
uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
distribution: 'temurin'
java-version: 25
- name: Create directory native
run: mkdir -p native
- name: Download JAR
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: surrealdb
path: native
- name: Publish Jar (Maven Central)
run: |
VERSION=$(grep '^version ' build.gradle | sed "s/version '\(.*\)'/\1/")
if [[ "$VERSION" == *-SNAPSHOT ]]; then
echo "Publishing SNAPSHOT to snapshots repository..."
./gradlew publishAggregationToCentralSnapshots
else
echo "Publishing release to Central Portal..."
./gradlew publishAggregationToCentralPortal
fi
env:
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
SIGNING_KEY_PASS: ${{ secrets.SIGNING_KEY_PASS }}
- name: Publish Jar (GitHub Packages)
run: ./gradlew publishMavenJavaPublicationToGitHubPackagesRepository
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
SIGNING_KEY_PASS: ${{ secrets.SIGNING_KEY_PASS }}