Skip to content

Add github workflow

Add github workflow #1

Workflow file for this run

name: Build
on:
push:
branches: ['**']
tags: ['v*']
pull_request:
workflow_dispatch:
jobs:
# ---------- Native builds ----------
android-native:
name: android/${{ matrix.abi }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- abi: armeabi-v7a
target: armv7-linux-androideabi
cc: armv7a-linux-androideabi16-clang
- abi: arm64-v8a
target: aarch64-linux-android
cc: aarch64-linux-android21-clang
- abi: x86
target: i686-linux-android
cc: i686-linux-android16-clang
- abi: x86_64
target: x86_64-linux-android
cc: x86_64-linux-android21-clang
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
with:
key: android-${{ matrix.target }}
- name: Put NDK toolchain on PATH
run: echo "$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin" >> $GITHUB_PATH
- name: Build
env:
CC: ${{ matrix.cc }}
run: cargo build --target ${{ matrix.target }} --release
- name: Upload native lib
uses: actions/upload-artifact@v4
with:
name: android-${{ matrix.abi }}
path: target/${{ matrix.target }}/release/libetebase_jni.so
if-no-files-found: error
# Flapigen output is deterministic across ABIs within a variant, so upload
# it exactly once (from any one matrix leg).
- name: Upload generated Java (once)
if: matrix.abi == 'arm64-v8a'
uses: actions/upload-artifact@v4
with:
name: android-generated-java
path: client/src/main/java/com/etebase/client/*.java
if-no-files-found: error
desktop-native:
name: desktop/${{ matrix.subdir }}
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- runner: macos-latest
subdir: macos-aarch64
target: aarch64-apple-darwin
libfile: libetebase_jni.dylib
- runner: macos-latest
subdir: macos-x86_64
target: x86_64-apple-darwin
libfile: libetebase_jni.dylib
- runner: ubuntu-latest
subdir: linux-x86_64
target: x86_64-unknown-linux-gnu
libfile: libetebase_jni.so
- runner: ubuntu-24.04-arm
subdir: linux-aarch64
target: aarch64-unknown-linux-gnu
libfile: libetebase_jni.so
- runner: windows-latest
subdir: windows-x86_64
target: x86_64-pc-windows-msvc
libfile: etebase_jni.dll
- runner: windows-latest
subdir: windows-aarch64
target: aarch64-pc-windows-msvc
libfile: etebase_jni.dll
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
with:
key: desktop-${{ matrix.target }}
- name: Build
shell: bash
run: cargo build --target ${{ matrix.target }} --release --no-default-features --features jvm
- name: Upload native lib
uses: actions/upload-artifact@v4
with:
name: desktop-${{ matrix.subdir }}
path: target/${{ matrix.target }}/release/${{ matrix.libfile }}
if-no-files-found: error
- name: Upload generated Java (once)
if: matrix.subdir == 'linux-x86_64'
uses: actions/upload-artifact@v4
with:
name: desktop-generated-java
path: client-jvm/src/main/java/com/etebase/client/*.java
if-no-files-found: error
# ---------- Assembly ----------
assemble-android:
name: Assemble AAR
needs: android-native
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '11'
- name: Install pinned Android NDK
run: |
echo y | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "ndk;21.3.6528147"
- name: Download native libs
uses: actions/download-artifact@v4
with:
pattern: android-*
path: artifacts/
- name: Stage jniLibs and generated Java
run: |
for abi in armeabi-v7a arm64-v8a x86 x86_64; do
mkdir -p client/src/main/jniLibs/$abi
cp artifacts/android-$abi/libetebase_jni.so client/src/main/jniLibs/$abi/
done
mkdir -p client/src/main/java/com/etebase/client
cp artifacts/android-generated-java/*.java client/src/main/java/com/etebase/client/
- name: Assemble AAR
run: ./gradlew :client:assemble --no-daemon
- name: Upload AAR
uses: actions/upload-artifact@v4
with:
name: etebase-client-aar
path: client/build/outputs/aar/*.aar
if-no-files-found: error
assemble-jvm:
name: Assemble JAR
needs: desktop-native
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '11'
- name: Download native libs
uses: actions/download-artifact@v4
with:
pattern: desktop-*
path: artifacts/
- name: Stage native libs and generated Java
run: |
for subdir in macos-aarch64 macos-x86_64 linux-x86_64 linux-aarch64 windows-x86_64 windows-aarch64; do
mkdir -p client-jvm/src/main/resources/com/etebase/client/native/$subdir
cp artifacts/desktop-$subdir/* client-jvm/src/main/resources/com/etebase/client/native/$subdir/
done
mkdir -p client-jvm/src/main/java/com/etebase/client
cp artifacts/desktop-generated-java/*.java client-jvm/src/main/java/com/etebase/client/
- name: Assemble JAR
run: ./gradlew :client-jvm:assemble --no-daemon
- name: Upload JAR
uses: actions/upload-artifact@v4
with:
name: etebase-client-jvm-jar
path: client-jvm/build/libs/*.jar
if-no-files-found: error