Repository navigation
133 lines (124 loc) · 4.68 KB
/
Copy pathandroid.yml
File metadata and controls
133 lines (124 loc) · 4.68 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
on:
push:
branches:
- '**'
tags:
- '*'
release:
types: [published]
jobs:
build_android:
runs-on: ubuntu22.04_x64
environment: RELEASE_ENVIRONMENT
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
submodules: true
- name: Set version environment variables
if: github.event_name == 'release'
run: |
echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
echo "RELEASE_VERSION_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Set dev version environment variables
if: github.event_name != 'release'
run: |
echo "RELEASE_VERSION=0.0.0.${{ github.run_number }}" >> $GITHUB_ENV
echo "RELEASE_VERSION_NAME=0.0.0.${{ github.run_number }}-$(echo "${GITHUB_REF_NAME}" | tr '/' '-')-$(git rev-parse --short HEAD)-dev" >> $GITHUB_ENV
- name: Set environment variables
run: |
echo "PATH=$CMDLINE_TOOLS:$PATH" >> $GITHUB_ENV
echo "ANDROID_HOME=$ANDROID_HOME" >> $GITHUB_ENV
echo "KEY_ALIAS=$KEY_ALIAS" >> $GITHUB_ENV
echo "KEY_PASSWORD=$KEY_PASSWORD" >> $GITHUB_ENV
echo "STORE_PASSWORD=$STORE_PASSWORD" >> $GITHUB_ENV
echo "KEYSTORE_PATH=$KEYSTORE_PATH" >> $GITHUB_ENV
env:
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }}
KEYSTORE_PATH: ${{ vars.KEYSTORE_PATH }}
ANDROID_HOME: ${{ vars.ANDROID_HOME }}
CMDLINE_TOOLS: ${{ vars.CMDLINE_TOOLS }}
- name: Create local.properties
run: echo "sdk.dir=$ANDROID_HOME" > local.properties
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Print Release Version
if: github.event_name == 'release'
run: |
echo "Release Version: $RELEASE_VERSION"
- name: Build project
run: ./gradlew assembleFossRelease
- name: Run tests
run: ./gradlew test
- name: Collect dev APKs
if: github.event_name != 'release'
run: |
mkdir -p dev-apks
for f in app/build/outputs/apk/foss/release/*.apk; do
[ -f "$f" ] || continue
suffix=$(basename "$f")
cp -v "$f" "dev-apks/fptn-android-${RELEASE_VERSION_NAME}-${suffix#app-foss-}"
done
- name: Upload dev APK artifact
if: github.event_name != 'release'
uses: actions/upload-artifact@v5
with:
name: fptn-dev-${{ env.RELEASE_VERSION_NAME }}
path: dev-apks/*.apk
if-no-files-found: error
- name: Build APK and AAB
if: github.event_name == 'release'
run: |
# APKs from the `foss` flavor (no Google/Firebase) -> sideload / non-GMS devices.
# AAB from the `gms` flavor (with Firebase) -> Google Play.
# NOTE: run as two separate Gradle invocations. The Google plugins are applied
# per-invocation when a task name contains "Gms"; mixing a foss task into the
# same call would apply them module-wide and leak google-services into foss.
./gradlew assembleFossRelease
./gradlew bundleGmsRelease
AAB_FILE=app/build/outputs/bundle/gmsRelease/app-gms-release.aab
if [ -f "$AAB_FILE" ]; then
cp -v "$AAB_FILE" "fptn-android-${RELEASE_VERSION_NAME}.aab"
else
echo "Error: AAB file not found at $AAB_FILE"
exit 1
fi
UNIVERSAL_APK=app/build/outputs/apk/foss/release/app-foss-universal-release.apk
if [ -f "$UNIVERSAL_APK" ]; then
cp -v "$UNIVERSAL_APK" "fptn-android-${RELEASE_VERSION_NAME}-all-platforms-universal.apk"
else
echo "Error: Universal APK not found at $UNIVERSAL_APK"
exit 1
fi
for ARCH in arm64-v8a armeabi-v7a x86_64; do
ABI_APK="app/build/outputs/apk/foss/release/app-foss-${ARCH}-release.apk"
if [ -f "$ABI_APK" ]; then
cp -v "$ABI_APK" "fptn-android-${RELEASE_VERSION_NAME}-${ARCH}.apk"
else
echo "Error: APK not found for arch $ARCH at $ABI_APK"
exit 1
fi
done
- name: Upload APK to Release
if: github.event_name == 'release'
uses: AButler/upload-release-assets@v3.0
with:
files: "*.apk"
repo-token: ${{ secrets.CI_TOKEN }}
- name: Upload AAB to Release
if: github.event_name == 'release'
uses: AButler/upload-release-assets@v3.0
with:
files: "*.aab"
repo-token: ${{ secrets.CI_TOKEN }}
- name: Upload Build Artifacts
if: github.event_name == 'release'
uses: actions/upload-artifact@v5
with:
name: AndroidArtifacts
path: |
*.apk
*.aab
if-no-files-found: warn