-
Notifications
You must be signed in to change notification settings - Fork 4
153 lines (124 loc) · 4.52 KB
/
Copy pathandroid-release.yml
File metadata and controls
153 lines (124 loc) · 4.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
name: Android Release
on:
push:
tags:
- "*"
permissions:
contents: write
env:
ANDROID_NDK_VERSION: "26.3.11579264"
jobs:
verify:
name: Verify
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.24.1"
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
- name: Install Android NDK
run: |
yes | sdkmanager --licenses >/dev/null || true
sdkmanager --install "ndk;$ANDROID_NDK_VERSION"
- name: Make Gradle executable
run: chmod +x ./gradlew
- name: Android unit tests
run: ./gradlew :app:testDebugUnitTest --stacktrace
- name: DNSTT helper tests
working-directory: dnstt-helper
run: go test ./...
build-apks:
name: Build APKs
runs-on: ubuntu-latest
needs: verify
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.24.1"
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
- name: Install Android NDK
run: |
yes | sdkmanager --licenses >/dev/null || true
sdkmanager --install "ndk;$ANDROID_NDK_VERSION"
- name: Make Gradle executable
run: chmod +x ./gradlew
- name: Decode release keystore
env:
RELEASE_KEYSTORE_BASE64: ${{ secrets.RELEASE_KEYSTORE_BASE64 }}
RELEASE_STORE_PASSWORD: ${{ secrets.RELEASE_STORE_PASSWORD }}
RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }}
RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
run: |
set -euo pipefail
for secret_name in RELEASE_KEYSTORE_BASE64 RELEASE_STORE_PASSWORD RELEASE_KEY_ALIAS RELEASE_KEY_PASSWORD; do
if [ -z "${!secret_name:-}" ]; then
echo "::error::$secret_name is required for signed release builds."
exit 1
fi
done
signing_dir="$RUNNER_TEMP/android-signing"
mkdir -p "$signing_dir"
keystore_path="$signing_dir/range-scout-release.jks"
printf '%s' "$RELEASE_KEYSTORE_BASE64" | base64 --decode > "$keystore_path"
{
echo "RELEASE_STORE_FILE=$keystore_path"
echo "RELEASE_STORE_PASSWORD=$RELEASE_STORE_PASSWORD"
echo "RELEASE_KEY_ALIAS=$RELEASE_KEY_ALIAS"
echo "RELEASE_KEY_PASSWORD=$RELEASE_KEY_PASSWORD"
} >> "$GITHUB_ENV"
- name: Build release APKs
run: ./gradlew :app:assembleRelease --stacktrace
- name: List APKs
run: find app/build/outputs/apk/release -name "*.apk" -print | sort
- name: Prepare release assets
env:
TAG_NAME: ${{ github.ref_name }}
run: bash scripts/prepare-release-apks.sh
- name: List release assets
run: find app/build/release-assets -name "*.apk" -print | sort
- name: Upload APK artifacts
uses: actions/upload-artifact@v4
with:
name: range-scout-apks-${{ github.ref_name }}
path: app/build/release-assets/*.apk
if-no-files-found: error
- name: Create GitHub release
env:
GH_TOKEN: ${{ github.token }}
TAG_NAME: ${{ github.ref_name }}
run: |
set -euo pipefail
shopt -s nullglob
assets=(app/build/release-assets/*.apk)
if [ "${#assets[@]}" -eq 0 ]; then
echo "No APK files found for release upload."
exit 1
fi
if gh release view "$TAG_NAME" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
while IFS= read -r asset_name; do
if [[ "$asset_name" == *.apk ]]; then
gh release delete-asset "$TAG_NAME" "$asset_name" --repo "$GITHUB_REPOSITORY" -y
fi
done < <(gh release view "$TAG_NAME" --repo "$GITHUB_REPOSITORY" --json assets --jq '.assets[].name')
gh release upload "$TAG_NAME" "${assets[@]}" --repo "$GITHUB_REPOSITORY" --clobber
else
gh release create "$TAG_NAME" "${assets[@]}" --repo "$GITHUB_REPOSITORY" --title "Range Scout $TAG_NAME" --generate-notes
fi