Skip to content

Commit 8bc5dd9

Browse files
committed
Add github workflow
1 parent c7eb394 commit 8bc5dd9

3 files changed

Lines changed: 208 additions & 1 deletion

File tree

.github/workflows/build.yml

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
name: Build
2+
3+
on:
4+
push:
5+
branches: ['**']
6+
tags: ['v*']
7+
pull_request:
8+
workflow_dispatch:
9+
10+
jobs:
11+
# ---------- Native builds ----------
12+
13+
android-native:
14+
name: android/${{ matrix.abi }}
15+
runs-on: ubuntu-latest
16+
strategy:
17+
fail-fast: false
18+
matrix:
19+
include:
20+
- abi: armeabi-v7a
21+
target: armv7-linux-androideabi
22+
cc: armv7a-linux-androideabi16-clang
23+
- abi: arm64-v8a
24+
target: aarch64-linux-android
25+
cc: aarch64-linux-android21-clang
26+
- abi: x86
27+
target: i686-linux-android
28+
cc: i686-linux-android16-clang
29+
- abi: x86_64
30+
target: x86_64-linux-android
31+
cc: x86_64-linux-android21-clang
32+
steps:
33+
- uses: actions/checkout@v4
34+
35+
- uses: actions-rust-lang/setup-rust-toolchain@v1
36+
with:
37+
target: ${{ matrix.target }}
38+
cache-key: android-${{ matrix.target }}
39+
rustflags: ""
40+
41+
- name: Install pinned Android NDK
42+
run: echo y | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "ndk;21.3.6528147"
43+
44+
- name: Put NDK toolchain on PATH
45+
run: echo "$ANDROID_HOME/ndk/21.3.6528147/toolchains/llvm/prebuilt/linux-x86_64/bin" >> $GITHUB_PATH
46+
47+
- name: Build
48+
env:
49+
CC: ${{ matrix.cc }}
50+
run: |
51+
triple_upper=$(echo "${{ matrix.target }}" | tr 'a-z-' 'A-Z_')
52+
export "CARGO_TARGET_${triple_upper}_LINKER=${{ matrix.cc }}"
53+
mkdir -p "$RUNNER_TEMP/libunwind-stub"
54+
printf '!<arch>\n' > "$RUNNER_TEMP/libunwind-stub/libunwind.a"
55+
export RUSTFLAGS="-L $RUNNER_TEMP/libunwind-stub -C link-arg=-Wl,-z,max-page-size=16384"
56+
cargo build --target ${{ matrix.target }} --release
57+
58+
- name: Upload native lib
59+
uses: actions/upload-artifact@v4
60+
with:
61+
name: android-${{ matrix.abi }}
62+
path: target/${{ matrix.target }}/release/libetebase_jni.so
63+
if-no-files-found: error
64+
65+
- name: Upload generated Java (once)
66+
if: matrix.abi == 'arm64-v8a'
67+
uses: actions/upload-artifact@v4
68+
with:
69+
name: android-generated-java
70+
path: client/src/main/java/com/etebase/client/*.java
71+
if-no-files-found: error
72+
73+
desktop-native:
74+
name: desktop/${{ matrix.subdir }}
75+
runs-on: ${{ matrix.runner }}
76+
strategy:
77+
fail-fast: false
78+
matrix:
79+
include:
80+
- runner: macos-latest
81+
subdir: macos-aarch64
82+
target: aarch64-apple-darwin
83+
libfile: libetebase_jni.dylib
84+
- runner: macos-latest
85+
subdir: macos-x86_64
86+
target: x86_64-apple-darwin
87+
libfile: libetebase_jni.dylib
88+
- runner: ubuntu-22.04
89+
subdir: linux-x86_64
90+
target: x86_64-unknown-linux-gnu
91+
libfile: libetebase_jni.so
92+
- runner: ubuntu-22.04-arm
93+
subdir: linux-aarch64
94+
target: aarch64-unknown-linux-gnu
95+
libfile: libetebase_jni.so
96+
- runner: windows-latest
97+
subdir: windows-x86_64
98+
target: x86_64-pc-windows-msvc
99+
libfile: etebase_jni.dll
100+
steps:
101+
- uses: actions/checkout@v4
102+
103+
- uses: actions-rust-lang/setup-rust-toolchain@v1
104+
with:
105+
target: ${{ matrix.target }}
106+
cache-key: desktop-${{ matrix.target }}
107+
rustflags: ""
108+
109+
- name: Build
110+
shell: bash
111+
run: cargo build --target ${{ matrix.target }} --release --no-default-features --features jvm
112+
113+
- name: Upload native lib
114+
uses: actions/upload-artifact@v4
115+
with:
116+
name: desktop-${{ matrix.subdir }}
117+
path: target/${{ matrix.target }}/release/${{ matrix.libfile }}
118+
if-no-files-found: error
119+
120+
- name: Upload generated Java (once)
121+
if: matrix.subdir == 'linux-x86_64'
122+
uses: actions/upload-artifact@v4
123+
with:
124+
name: desktop-generated-java
125+
path: client-jvm/src/main/java/com/etebase/client/*.java
126+
if-no-files-found: error
127+
128+
# ---------- Assembly ----------
129+
130+
assemble-android:
131+
name: Assemble AAR
132+
needs: android-native
133+
runs-on: ubuntu-latest
134+
steps:
135+
- uses: actions/checkout@v4
136+
137+
- uses: actions/setup-java@v4
138+
with:
139+
distribution: temurin
140+
java-version: '11'
141+
142+
- name: Install pinned Android NDK
143+
run: echo y | JAVA_HOME="$JAVA_HOME_17_X64" $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "ndk;21.3.6528147"
144+
145+
- name: Download native libs
146+
uses: actions/download-artifact@v4
147+
with:
148+
pattern: android-*
149+
path: artifacts/
150+
151+
- name: Stage jniLibs and generated Java
152+
run: |
153+
for abi in armeabi-v7a arm64-v8a x86 x86_64; do
154+
mkdir -p client/src/main/jniLibs/$abi
155+
cp artifacts/android-$abi/libetebase_jni.so client/src/main/jniLibs/$abi/
156+
done
157+
mkdir -p client/src/main/java/com/etebase/client
158+
cp artifacts/android-generated-java/*.java client/src/main/java/com/etebase/client/
159+
160+
- name: Assemble AAR
161+
run: ./gradlew :client:assembleRelease --no-daemon
162+
163+
- name: Upload AAR
164+
uses: actions/upload-artifact@v4
165+
with:
166+
name: etebase-client-aar
167+
path: client/build/outputs/aar/*.aar
168+
if-no-files-found: error
169+
170+
assemble-jvm:
171+
name: Assemble JAR
172+
needs: desktop-native
173+
runs-on: ubuntu-latest
174+
steps:
175+
- uses: actions/checkout@v4
176+
177+
- uses: actions/setup-java@v4
178+
with:
179+
distribution: temurin
180+
java-version: '11'
181+
182+
- name: Download native libs
183+
uses: actions/download-artifact@v4
184+
with:
185+
pattern: desktop-*
186+
path: artifacts/
187+
188+
- name: Stage native libs and generated Java
189+
run: |
190+
for subdir in macos-aarch64 macos-x86_64 linux-x86_64 linux-aarch64 windows-x86_64; do
191+
mkdir -p client-jvm/src/main/resources/com/etebase/client/native/$subdir
192+
cp artifacts/desktop-$subdir/* client-jvm/src/main/resources/com/etebase/client/native/$subdir/
193+
done
194+
mkdir -p client-jvm/src/main/java/com/etebase/client
195+
cp artifacts/desktop-generated-java/*.java client-jvm/src/main/java/com/etebase/client/
196+
197+
- name: Assemble JAR
198+
run: ./gradlew :client-jvm:assemble --no-daemon
199+
200+
- name: Upload JAR
201+
uses: actions/upload-artifact@v4
202+
with:
203+
name: etebase-client-jvm-jar
204+
path: client-jvm/build/libs/*.jar
205+
if-no-files-found: error

build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ do
3232
cp "target/$target/release/libetebase_jni.so" "$jniDir"
3333
done
3434

35-
./gradlew clean build
35+
./gradlew clean :client:build

rust-toolchain.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[toolchain]
2+
channel = "1.95.0"

0 commit comments

Comments
 (0)