Skip to content

Commit bdc8834

Browse files
committed
Add github workflow
1 parent c7eb394 commit bdc8834

1 file changed

Lines changed: 207 additions & 0 deletions

File tree

.github/workflows/build.yml

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
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: dtolnay/rust-toolchain@stable
36+
with:
37+
targets: ${{ matrix.target }}
38+
39+
- uses: Swatinem/rust-cache@v2
40+
with:
41+
key: android-${{ matrix.target }}
42+
43+
- name: Put NDK toolchain on PATH
44+
run: echo "$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin" >> $GITHUB_PATH
45+
46+
- name: Build
47+
env:
48+
CC: ${{ matrix.cc }}
49+
run: cargo build --target ${{ matrix.target }} --release
50+
51+
- name: Upload native lib
52+
uses: actions/upload-artifact@v4
53+
with:
54+
name: android-${{ matrix.abi }}
55+
path: target/${{ matrix.target }}/release/libetebase_jni.so
56+
if-no-files-found: error
57+
58+
# Flapigen output is deterministic across ABIs within a variant, so upload
59+
# it exactly once (from any one matrix leg).
60+
- name: Upload generated Java (once)
61+
if: matrix.abi == 'arm64-v8a'
62+
uses: actions/upload-artifact@v4
63+
with:
64+
name: android-generated-java
65+
path: client/src/main/java/com/etebase/client/*.java
66+
if-no-files-found: error
67+
68+
desktop-native:
69+
name: desktop/${{ matrix.subdir }}
70+
runs-on: ${{ matrix.runner }}
71+
strategy:
72+
fail-fast: false
73+
matrix:
74+
include:
75+
- runner: macos-latest
76+
subdir: macos-aarch64
77+
target: aarch64-apple-darwin
78+
libfile: libetebase_jni.dylib
79+
- runner: macos-latest
80+
subdir: macos-x86_64
81+
target: x86_64-apple-darwin
82+
libfile: libetebase_jni.dylib
83+
- runner: ubuntu-latest
84+
subdir: linux-x86_64
85+
target: x86_64-unknown-linux-gnu
86+
libfile: libetebase_jni.so
87+
- runner: ubuntu-24.04-arm
88+
subdir: linux-aarch64
89+
target: aarch64-unknown-linux-gnu
90+
libfile: libetebase_jni.so
91+
- runner: windows-latest
92+
subdir: windows-x86_64
93+
target: x86_64-pc-windows-msvc
94+
libfile: etebase_jni.dll
95+
- runner: windows-latest
96+
subdir: windows-aarch64
97+
target: aarch64-pc-windows-msvc
98+
libfile: etebase_jni.dll
99+
steps:
100+
- uses: actions/checkout@v4
101+
102+
- uses: dtolnay/rust-toolchain@stable
103+
with:
104+
targets: ${{ matrix.target }}
105+
106+
- uses: Swatinem/rust-cache@v2
107+
with:
108+
key: desktop-${{ matrix.target }}
109+
110+
- name: Build
111+
shell: bash
112+
run: cargo build --target ${{ matrix.target }} --release --no-default-features --features jvm
113+
114+
- name: Upload native lib
115+
uses: actions/upload-artifact@v4
116+
with:
117+
name: desktop-${{ matrix.subdir }}
118+
path: target/${{ matrix.target }}/release/${{ matrix.libfile }}
119+
if-no-files-found: error
120+
121+
- name: Upload generated Java (once)
122+
if: matrix.subdir == 'linux-x86_64'
123+
uses: actions/upload-artifact@v4
124+
with:
125+
name: desktop-generated-java
126+
path: client-jvm/src/main/java/com/etebase/client/*.java
127+
if-no-files-found: error
128+
129+
# ---------- Assembly ----------
130+
131+
assemble-android:
132+
name: Assemble AAR
133+
needs: android-native
134+
runs-on: ubuntu-latest
135+
steps:
136+
- uses: actions/checkout@v4
137+
138+
- uses: actions/setup-java@v4
139+
with:
140+
distribution: temurin
141+
java-version: '11'
142+
143+
- name: Install pinned Android NDK
144+
run: |
145+
echo y | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "ndk;21.3.6528147"
146+
147+
- name: Download native libs
148+
uses: actions/download-artifact@v4
149+
with:
150+
pattern: android-*
151+
path: artifacts/
152+
153+
- name: Stage jniLibs and generated Java
154+
run: |
155+
for abi in armeabi-v7a arm64-v8a x86 x86_64; do
156+
mkdir -p client/src/main/jniLibs/$abi
157+
cp artifacts/android-$abi/libetebase_jni.so client/src/main/jniLibs/$abi/
158+
done
159+
mkdir -p client/src/main/java/com/etebase/client
160+
cp artifacts/android-generated-java/*.java client/src/main/java/com/etebase/client/
161+
162+
- name: Assemble AAR
163+
run: ./gradlew :client:assemble --no-daemon
164+
165+
- name: Upload AAR
166+
uses: actions/upload-artifact@v4
167+
with:
168+
name: etebase-client-aar
169+
path: client/build/outputs/aar/*.aar
170+
if-no-files-found: error
171+
172+
assemble-jvm:
173+
name: Assemble JAR
174+
needs: desktop-native
175+
runs-on: ubuntu-latest
176+
steps:
177+
- uses: actions/checkout@v4
178+
179+
- uses: actions/setup-java@v4
180+
with:
181+
distribution: temurin
182+
java-version: '11'
183+
184+
- name: Download native libs
185+
uses: actions/download-artifact@v4
186+
with:
187+
pattern: desktop-*
188+
path: artifacts/
189+
190+
- name: Stage native libs and generated Java
191+
run: |
192+
for subdir in macos-aarch64 macos-x86_64 linux-x86_64 linux-aarch64 windows-x86_64 windows-aarch64; do
193+
mkdir -p client-jvm/src/main/resources/com/etebase/client/native/$subdir
194+
cp artifacts/desktop-$subdir/* client-jvm/src/main/resources/com/etebase/client/native/$subdir/
195+
done
196+
mkdir -p client-jvm/src/main/java/com/etebase/client
197+
cp artifacts/desktop-generated-java/*.java client-jvm/src/main/java/com/etebase/client/
198+
199+
- name: Assemble JAR
200+
run: ./gradlew :client-jvm:assemble --no-daemon
201+
202+
- name: Upload JAR
203+
uses: actions/upload-artifact@v4
204+
with:
205+
name: etebase-client-jvm-jar
206+
path: client-jvm/build/libs/*.jar
207+
if-no-files-found: error

0 commit comments

Comments
 (0)