Skip to content

Commit 29d80be

Browse files
xaionaro@dx.centerxaionaro@dx.center
authored andcommitted
refactor(ci): move release build logic into Makefile dist targets
Add dist, dist-jnictl-linux, dist-jnictl-android, dist-jniservice, dist-dex targets to the root Makefile. The release workflow now calls make dist with DIST_GOARCH instead of inline shell scripts. Also fixes android/amd64 build failure (requires CGO_ENABLED=1 with NDK cross-compiler for external linking).
1 parent e7e6105 commit 29d80be

2 files changed

Lines changed: 55 additions & 47 deletions

File tree

.github/workflows/release.yml

Lines changed: 6 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,7 @@ jobs:
1414
runs-on: ubuntu-latest
1515
strategy:
1616
matrix:
17-
include:
18-
- goarch: arm64
19-
android_abi: arm64-v8a
20-
ndk_triple: aarch64-linux-android
21-
- goarch: amd64
22-
android_abi: x86_64
23-
ndk_triple: x86_64-linux-android
17+
goarch: [arm64, amd64]
2418

2519
steps:
2620
- uses: actions/checkout@v4
@@ -42,46 +36,12 @@ jobs:
4236
- name: Install Android NDK and build-tools
4337
run: sdkmanager --install "ndk;27.0.12077973" "build-tools;35.0.0" "platforms;android-35"
4438

45-
- name: Build jnictl (linux)
39+
- name: Build all artifacts
40+
run: make dist
4641
env:
47-
CGO_ENABLED: '0'
48-
GOOS: linux
49-
GOARCH: ${{ matrix.goarch }}
50-
run: go build -o dist/jnictl-linux-${{ matrix.goarch }} ./cmd/jnictl/
51-
52-
- name: Build jnictl (android)
53-
env:
54-
CGO_ENABLED: '1'
55-
GOOS: android
56-
GOARCH: ${{ matrix.goarch }}
57-
NDK_HOME: /usr/local/lib/android/sdk/ndk/27.0.12077973
58-
CC_TRIPLE: ${{ matrix.ndk_triple }}
59-
run: |
60-
CC=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/${CC_TRIPLE}30-clang \
61-
go build -o dist/jnictl-android-${{ matrix.goarch }} ./cmd/jnictl/
62-
63-
- name: Build jniservice shared library
64-
env:
65-
CGO_ENABLED: '1'
66-
GOOS: android
67-
GOARCH: ${{ matrix.goarch }}
68-
NDK_HOME: /usr/local/lib/android/sdk/ndk/27.0.12077973
69-
CC_TRIPLE: ${{ matrix.ndk_triple }}
70-
run: |
71-
CC=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/${CC_TRIPLE}30-clang \
72-
go build -buildmode=c-shared \
73-
-o dist/libjniservice-${{ matrix.android_abi }}.so \
74-
./cmd/jniservice/
75-
76-
- name: Compile Java wrapper and create classes.dex
77-
env:
78-
ANDROID_SDK_ROOT: /usr/local/lib/android/sdk
79-
run: |
80-
javac --release 17 -d dist cmd/jniservice/JNIService.java
81-
$ANDROID_SDK_ROOT/build-tools/35.0.0/d8 \
82-
--lib $ANDROID_SDK_ROOT/platforms/android-35/android.jar \
83-
--output dist dist/JNIService.class
84-
rm -f dist/JNIService.class
42+
DIST_GOARCH: ${{ matrix.goarch }}
43+
ANDROID_SDK: /usr/local/lib/android/sdk
44+
DIST_NDK: /usr/local/lib/android/sdk/ndk/27.0.12077973
8545

8646
- name: Upload artifacts
8747
uses: actions/upload-artifact@v4

Makefile

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
.PHONY: generate specs jni java proto protoc grpc cli clean lint test test-tools test-e2e test-emulator build build-server list-commands
1+
.PHONY: generate specs jni java proto protoc grpc cli clean lint test test-tools test-e2e test-emulator \
2+
build build-server list-commands dist dist-jnictl-linux dist-jnictl-android dist-jniservice dist-dex
23

34
# JDK detection for host tests (jni.h and libjvm.so).
45
JDK_HOME ?= $(shell readlink -f $$(which javac) 2>/dev/null | sed 's|/bin/javac$$||')
@@ -102,3 +103,50 @@ test-e2e:
102103
# Full pipeline: build, push, start server, forward port, run tests, stop server.
103104
test-emulator:
104105
$(MAKE) -C tests/e2e-grpc test
106+
107+
# ---- Release artifacts ----
108+
# Usage: make dist GOARCH=arm64 (or GOARCH=amd64)
109+
# Builds all release artifacts into dist/.
110+
111+
DIST_GOARCH ?= arm64
112+
ANDROID_SDK ?= $(HOME)/Android/Sdk
113+
DIST_NDK ?= $(shell ls -d $(ANDROID_SDK)/ndk/* 2>/dev/null | sort -V | tail -1)
114+
DIST_API_LEVEL ?= 30
115+
116+
# Derive platform-specific values from GOARCH.
117+
ifeq ($(DIST_GOARCH),arm64)
118+
DIST_NDK_TRIPLE := aarch64-linux-android
119+
DIST_ANDROID_ABI := arm64-v8a
120+
else
121+
DIST_NDK_TRIPLE := x86_64-linux-android
122+
DIST_ANDROID_ABI := x86_64
123+
endif
124+
125+
DIST_CC := $(DIST_NDK)/toolchains/llvm/prebuilt/linux-x86_64/bin/$(DIST_NDK_TRIPLE)$(DIST_API_LEVEL)-clang
126+
127+
# Build all release artifacts for a single GOARCH.
128+
dist: dist-jnictl-linux dist-jnictl-android dist-jniservice dist-dex
129+
130+
dist-jnictl-linux:
131+
@mkdir -p dist
132+
CGO_ENABLED=0 GOOS=linux GOARCH=$(DIST_GOARCH) \
133+
go build -o dist/jnictl-linux-$(DIST_GOARCH) ./cmd/jnictl/
134+
135+
dist-jnictl-android:
136+
@mkdir -p dist
137+
CGO_ENABLED=1 GOOS=android GOARCH=$(DIST_GOARCH) CC=$(DIST_CC) \
138+
go build -o dist/jnictl-android-$(DIST_GOARCH) ./cmd/jnictl/
139+
140+
dist-jniservice:
141+
@mkdir -p dist
142+
CGO_ENABLED=1 GOOS=android GOARCH=$(DIST_GOARCH) CC=$(DIST_CC) \
143+
go build -buildmode=c-shared \
144+
-o dist/libjniservice-$(DIST_ANDROID_ABI).so ./cmd/jniservice/
145+
146+
dist-dex:
147+
@mkdir -p dist
148+
javac --release 17 -d dist cmd/jniservice/JNIService.java
149+
$(ANDROID_SDK)/build-tools/$$(ls $(ANDROID_SDK)/build-tools | sort -V | tail -1)/d8 \
150+
--lib $$(ls -d $(ANDROID_SDK)/platforms/android-* | sort -V | tail -1)/android.jar \
151+
--output dist dist/JNIService.class
152+
rm -f dist/JNIService.class

0 commit comments

Comments
 (0)