Skip to content

Commit d96bd4b

Browse files
committed
fix: release workflow
1 parent 86625a5 commit d96bd4b

4 files changed

Lines changed: 102 additions & 53 deletions

File tree

.github/workflows/build.yml

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,42 +188,81 @@ jobs:
188188
name: Build snd-android
189189
runs-on: ubuntu-latest
190190
needs: build-frontend
191+
191192
steps:
192193
- name: Checkout Repo
193-
uses: actions/checkout@v3
194+
uses: actions/checkout@v4
195+
194196
- name: Download Frontend
195197
uses: actions/download-artifact@v4
196198
with:
197199
name: snd-frontend
198200
path: frontend/dist
201+
199202
- name: Setup Go environment
200-
uses: actions/setup-go@v3
203+
uses: actions/setup-go@v5
201204
with:
202205
cache: true
203206
go-version-file: go.mod
204207
cache-dependency-path: go.sum
208+
205209
- name: Setup Java
206210
uses: actions/setup-java@v4
207211
with:
208212
distribution: temurin
209213
java-version: 17
214+
210215
- name: Setup Android SDK
211216
uses: android-actions/setup-android@v3
217+
212218
- name: Setup Gradle
213219
uses: gradle/actions/setup-gradle@v4
214-
with:
215-
gradle-version: 9.5.1
220+
216221
- name: Install gomobile
217222
run: |
218223
go install golang.org/x/mobile/cmd/gomobile@latest
219224
gomobile init
225+
226+
- name: Restore Android signing keystore
227+
shell: bash
228+
env:
229+
KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
230+
run: |
231+
printf '%s' "$KEYSTORE_BASE64" \
232+
| base64 --decode \
233+
> "$RUNNER_TEMP/release-key.jks"
234+
220235
- name: Build Android release APK
221236
run: ./build_android.sh
222237
env:
223238
SND_ANDROID_GRADLE_TASK: assembleRelease
224239
SND_ANDROID_INSTALL_NDK: "true"
225240
SND_SKIP_FRONTEND_BUILD: "true"
226241
SND_RELEASE_DIR: build/release
242+
243+
ANDROID_KEYSTORE_PATH: ${{ runner.temp }}/release-key.jks
244+
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
245+
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
246+
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
247+
248+
- name: Verify APK signature
249+
shell: bash
250+
run: |
251+
APK="$(find build/release -name '*.apk' -type f | head -n 1)"
252+
253+
if [ -z "$APK" ]; then
254+
echo "No APK found"
255+
exit 1
256+
fi
257+
258+
APKSIGNER="$(find "$ANDROID_HOME/build-tools" \
259+
-name apksigner \
260+
-type f \
261+
| sort -V \
262+
| tail -n 1)"
263+
264+
"$APKSIGNER" verify --verbose --print-certs "$APK"
265+
227266
- name: Archive Android Build
228267
uses: actions/upload-artifact@v4
229268
with:

Dockerfile

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
11
# Build image
2-
FROM golang:1.25.5-bullseye AS build-stage
3-
4-
ENV SND_TAGS=LIBUSB
5-
ENV SND_RELEASE_DIR=/app
6-
ENV SND_APP_NAME=snd
7-
8-
WORKDIR /build
9-
RUN mkdir /app
10-
11-
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash
12-
RUN apt-get update -y &&\
13-
apt-get -y install libusb-1.0-0-dev pkg-config nodejs bzip2 &&\
14-
apt-get -y clean &&\
15-
apt-get autoremove &&\
16-
rm -rf /var/lib/apt/lists/*
17-
COPY . .
18-
RUN cd /build/frontend && npm ci && npm cache clean --force && npm run build
19-
20-
RUN ./build.sh
21-
22-
# Release image
23-
FROM ubuntu:latest
24-
WORKDIR /app
25-
26-
RUN apt-get -y update &&\
27-
apt-get -y install \
28-
libusb-1.0.0-dev \
29-
pkg-config \
30-
curl &&\
31-
curl -LO https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb &&\
32-
apt-get install -y ./google-chrome-stable_current_amd64.deb &&\
33-
apt-get -y clean &&\
34-
apt-get autoremove &&\
35-
rm -rf /var/lib/apt/lists/* &&\
36-
rm google-chrome-stable_current_amd64.deb
37-
38-
COPY --from=build-stage /app /app
39-
RUN adduser --system --group --home /home/app app && chown app:app /app
40-
USER app
41-
EXPOSE 7123
42-
CMD ["/app/snd"]
2+
FROM golang:1.25-bookworm AS build-stage
3+
4+
ENV SND_TAGS=LIBUSB
5+
ENV SND_RELEASE_DIR=/app
6+
ENV SND_APP_NAME=snd
7+
8+
WORKDIR /build
9+
RUN mkdir /app
10+
11+
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash
12+
RUN apt-get update -y &&\
13+
apt-get -y install libusb-1.0-0-dev pkg-config nodejs bzip2 &&\
14+
apt-get -y clean &&\
15+
apt-get autoremove &&\
16+
rm -rf /var/lib/apt/lists/*
17+
COPY . .
18+
RUN cd /build/frontend && npm ci && npm cache clean --force && npm run build
19+
20+
RUN ./build.sh
21+
22+
# Release image
23+
FROM ubuntu:latest
24+
WORKDIR /app
25+
26+
RUN apt-get -y update &&\
27+
apt-get -y install \
28+
libusb-1.0.0-dev \
29+
pkg-config \
30+
curl &&\
31+
curl -LO https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb &&\
32+
apt-get install -y ./google-chrome-stable_current_amd64.deb &&\
33+
apt-get -y clean &&\
34+
apt-get autoremove &&\
35+
rm -rf /var/lib/apt/lists/* &&\
36+
rm google-chrome-stable_current_amd64.deb
37+
38+
COPY --from=build-stage /app /app
39+
RUN adduser --system --group --home /home/app app && chown app:app /app
40+
USER app
41+
EXPOSE 7123
42+
CMD ["/app/snd"]

android/app/build.gradle.kts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
plugins {
2-
id("com.android.application")
3-
id("org.jetbrains.kotlin.android")
4-
}
1+
fun requiredEnv(name: String): String =
2+
System.getenv(name)
3+
?: error("Missing required environment variable: $name")
54

65
android {
76
namespace = "app.salesanddungeons"
@@ -20,13 +19,24 @@ android {
2019
targetCompatibility = JavaVersion.VERSION_17
2120
}
2221

22+
signingConfigs {
23+
create("release") {
24+
storeFile = file(requiredEnv("ANDROID_KEYSTORE_PATH"))
25+
storePassword = requiredEnv("ANDROID_KEYSTORE_PASSWORD")
26+
keyAlias = requiredEnv("ANDROID_KEY_ALIAS")
27+
keyPassword = requiredEnv("ANDROID_KEY_PASSWORD")
28+
}
29+
}
30+
31+
buildTypes {
32+
getByName("release") {
33+
signingConfig = signingConfigs.getByName("release")
34+
}
35+
}
36+
2337
kotlinOptions {
2438
jvmTarget = "17"
2539
}
2640

2741
sourceSets["main"].assets.srcDir("../../frontend/dist")
2842
}
29-
30-
dependencies {
31-
implementation(files("libs/sndmobile.aar"))
32-
}

release-key.jks

2.68 KB
Binary file not shown.

0 commit comments

Comments
 (0)