Skip to content

Commit a5d19b9

Browse files
committed
update: workflows
1 parent eb67492 commit a5d19b9

3 files changed

Lines changed: 360 additions & 70 deletions

File tree

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
name: Build APKs (Pre-Release)
2+
3+
on:
4+
workflow_dispatch:
5+
6+
permissions:
7+
contents: write
8+
9+
jobs:
10+
11+
# Reads the version info and appends the short commit SHA so this pre-release is easy to trace back to its commit.
12+
prepare:
13+
name: Read Version Info
14+
runs-on: ubuntu-latest
15+
outputs:
16+
version_name: ${{ steps.version.outputs.version_name }}
17+
tag: ${{ steps.version.outputs.tag }}
18+
19+
steps:
20+
- name: Checkout code
21+
uses: actions/checkout@v4
22+
23+
- name: Extract version name with commit SHA appended
24+
id: version
25+
run: |
26+
BASE_VERSION_NAME=$(grep -oP 'versionName "\K[^"]*' music/build.gradle)
27+
COMMIT_ID=$(git rev-parse --short HEAD)
28+
VERSION_NAME="${BASE_VERSION_NAME}-${COMMIT_ID}"
29+
TAG=$(echo "$VERSION_NAME" | tr '[:upper:]' '[:lower:]')
30+
31+
echo "version_name=$VERSION_NAME" >> $GITHUB_OUTPUT
32+
echo "tag=$TAG" >> $GITHUB_OUTPUT
33+
34+
# Builds the pre-release APK targeting arm64-v8a devices only.
35+
build-arm64:
36+
name: Build arm64-v8a
37+
runs-on: ubuntu-latest
38+
needs: prepare
39+
40+
steps:
41+
- name: Checkout code
42+
uses: actions/checkout@v4
43+
44+
- name: Set up Java and Android SDK
45+
uses: actions/setup-java@v4
46+
with:
47+
java-version: '21'
48+
distribution: 'temurin'
49+
50+
- name: Decode keystore
51+
uses: timheuer/base64-to-file@v1
52+
with:
53+
fileName: 'keystore/key.jks'
54+
encodedString: ${{ secrets.SIGN_KEY }}
55+
56+
- name: Accept Android SDK licenses
57+
run: yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
58+
59+
- name: Build arm64-v8a release APK
60+
run: |
61+
chmod +x ./gradlew
62+
./gradlew clean assembleFossRelease -Pandroid.injected.build.abi=arm64-v8a --no-build-cache --rerun-tasks
63+
env:
64+
SIGNING_KEY_ALIAS: ${{ secrets.ALIAS }}
65+
SIGNING_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
66+
SIGNING_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
67+
68+
- name: Rename APK to felicity-foss-arm64-v8a.apk
69+
run: |
70+
mkdir -p ${{ runner.temp }}/apks
71+
APK=$(find music/ -name "*.apk" | head -n 1)
72+
mv "$APK" "${{ runner.temp }}/apks/felicity-foss-arm64-v8a.apk"
73+
74+
- name: Upload arm64-v8a APK
75+
uses: actions/upload-artifact@v4
76+
with:
77+
name: felicity-foss-arm64-v8a
78+
path: ${{ runner.temp }}/apks/felicity-foss-arm64-v8a.apk
79+
retention-days: 1
80+
if-no-files-found: error
81+
82+
# Builds the pre-release APK targeting x86_64 devices only.
83+
build-x86_64:
84+
name: Build x86_64
85+
runs-on: ubuntu-latest
86+
needs: prepare
87+
88+
steps:
89+
- name: Checkout code
90+
uses: actions/checkout@v4
91+
92+
- name: Set up Java and Android SDK
93+
uses: actions/setup-java@v4
94+
with:
95+
java-version: '21'
96+
distribution: 'temurin'
97+
98+
- name: Decode keystore
99+
uses: timheuer/base64-to-file@v1
100+
with:
101+
fileName: 'keystore/key.jks'
102+
encodedString: ${{ secrets.SIGN_KEY }}
103+
104+
- name: Accept Android SDK licenses
105+
run: yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
106+
107+
- name: Build x86_64 release APK
108+
run: |
109+
chmod +x ./gradlew
110+
./gradlew clean assembleFossRelease -Pandroid.injected.build.abi=x86_64 --no-build-cache --rerun-tasks
111+
env:
112+
SIGNING_KEY_ALIAS: ${{ secrets.ALIAS }}
113+
SIGNING_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
114+
SIGNING_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
115+
116+
- name: Rename APK to felicity-foss-x86_64.apk
117+
run: |
118+
mkdir -p ${{ runner.temp }}/apks
119+
APK=$(find music/ -name "*.apk" | head -n 1)
120+
mv "$APK" "${{ runner.temp }}/apks/felicity-foss-x86_64.apk"
121+
122+
- name: Upload x86_64 APK
123+
uses: actions/upload-artifact@v4
124+
with:
125+
name: felicity-foss-x86_64
126+
path: ${{ runner.temp }}/apks/felicity-foss-x86_64.apk
127+
retention-days: 1
128+
if-no-files-found: error
129+
130+
# Waits for both arch builds, then publishes a pre-release on GitHub with both APKs attached.
131+
publish:
132+
name: Publish Pre-Release
133+
runs-on: ubuntu-latest
134+
needs: [ prepare, build-arm64, build-x86_64 ]
135+
136+
steps:
137+
- name: Download arm64-v8a APK
138+
uses: actions/download-artifact@v4
139+
with:
140+
name: felicity-foss-arm64-v8a
141+
path: artifacts/
142+
143+
- name: Download x86_64 APK
144+
uses: actions/download-artifact@v4
145+
with:
146+
name: felicity-foss-x86_64
147+
path: artifacts/
148+
149+
- name: Create GitHub Pre-Release
150+
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631
151+
with:
152+
files: |
153+
artifacts/felicity-foss-arm64-v8a.apk
154+
artifacts/felicity-foss-x86_64.apk
155+
name: ${{ needs.prepare.outputs.version_name }}
156+
tag_name: ${{ needs.prepare.outputs.tag }}
157+
prerelease: true
158+
body: |
159+
This is a pre-release build. It may be unstable or incomplete.
160+
161+
**Commit:** ${{ github.sha }}
162+
env:
163+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
164+
Lines changed: 76 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,35 @@
11
name: Build APKs (Preview)
22

33
on:
4-
workflow_dispatch: # Allow manual triggering
4+
workflow_dispatch:
55

66
jobs:
7-
build:
8-
name: Build Preview APK
7+
8+
# Reads the version info and appends the short commit SHA so the preview APK is traceable.
9+
prepare:
10+
name: Read Version Info
911
runs-on: ubuntu-latest
12+
outputs:
13+
version_name: ${{ steps.version.outputs.version_name }}
14+
15+
steps:
16+
- name: Checkout code
17+
uses: actions/checkout@v4
18+
19+
- name: Extract version name with commit SHA appended
20+
id: version
21+
run: |
22+
BASE_VERSION_NAME=$(grep -oP 'versionName "\K[^"]*' music/build.gradle)
23+
COMMIT_ID=$(git rev-parse --short HEAD)
24+
VERSION_NAME="${BASE_VERSION_NAME}-${COMMIT_ID}"
25+
26+
echo "version_name=$VERSION_NAME" >> $GITHUB_OUTPUT
27+
28+
# Builds the preview APK targeting arm64-v8a devices only.
29+
build-arm64:
30+
name: Build arm64-v8a
31+
runs-on: ubuntu-latest
32+
needs: prepare
1033

1134
steps:
1235
- name: Checkout code
@@ -15,56 +38,83 @@ jobs:
1538
- name: Set up Java and Android SDK
1639
uses: actions/setup-java@v4
1740
with:
18-
java-version: '21' # Adjust the Java version as needed
41+
java-version: '21'
1942
distribution: 'temurin'
2043

21-
- name: Decode Keystore
22-
id: decode_keystore
44+
- name: Decode keystore
2345
uses: timheuer/base64-to-file@v1
2446
with:
2547
fileName: 'keystore/key.jks'
2648
encodedString: ${{ secrets.SIGN_KEY }}
2749

28-
- name: Extract Version Name and Version Code
50+
- name: Accept Android SDK licenses
51+
run: yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
52+
53+
- name: Build arm64-v8a release APK
2954
run: |
30-
# Extract versionName and versionCode from build.gradle
31-
BASE_VERSION_NAME=$(cat music/build.gradle | grep -oP 'versionName "\K[^"]*')
32-
VERSION_CODE=$(cat music/build.gradle | grep -oP 'versionCode \K\d+')
55+
chmod +x ./gradlew
56+
./gradlew clean assembleFossRelease -Pandroid.injected.build.abi=arm64-v8a --no-build-cache --rerun-tasks
57+
env:
58+
SIGNING_KEY_ALIAS: ${{ secrets.ALIAS }}
59+
SIGNING_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
60+
SIGNING_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
3361

34-
# Get the short Git commit SHA (first 7 characters)
35-
COMMIT_ID=$(git rev-parse --short HEAD)
62+
- name: Rename APK to felicity-foss-arm64-v8a.apk
63+
run: |
64+
mkdir -p ${{ runner.temp }}/apks
65+
APK=$(find music/ -name "*.apk" | head -n 1)
66+
mv "$APK" "${{ runner.temp }}/apks/felicity-foss-arm64-v8a.apk"
3667
37-
# Append the commit ID to the version name
38-
VERSION_NAME="${BASE_VERSION_NAME}-${COMMIT_ID}"
68+
- name: Upload arm64-v8a APK
69+
uses: actions/upload-artifact@v4
70+
with:
71+
name: felicity-foss-arm64-v8a-${{ needs.prepare.outputs.version_name }}
72+
path: ${{ runner.temp }}/apks/felicity-foss-arm64-v8a.apk
73+
if-no-files-found: error
3974

40-
echo "Version Name: $VERSION_NAME"
41-
echo "Version Code: $VERSION_CODE"
75+
# Builds the preview APK targeting x86_64 devices only.
76+
build-x86_64:
77+
name: Build x86_64
78+
runs-on: ubuntu-latest
79+
needs: prepare
4280

43-
# Set these values as environment variables for later steps
44-
echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV
45-
echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV
81+
steps:
82+
- name: Checkout code
83+
uses: actions/checkout@v4
84+
85+
- name: Set up Java and Android SDK
86+
uses: actions/setup-java@v4
87+
with:
88+
java-version: '21'
89+
distribution: 'temurin'
90+
91+
- name: Decode keystore
92+
uses: timheuer/base64-to-file@v1
93+
with:
94+
fileName: 'keystore/key.jks'
95+
encodedString: ${{ secrets.SIGN_KEY }}
4696

4797
- name: Accept Android SDK licenses
4898
run: yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
4999

50-
- name: Build Release APK
100+
- name: Build x86_64 release APK
51101
run: |
52102
chmod +x ./gradlew
53-
./gradlew clean assembleFossRelease --no-build-cache --rerun-tasks
103+
./gradlew clean assembleFossRelease -Pandroid.injected.build.abi=x86_64 --no-build-cache --rerun-tasks
54104
env:
55105
SIGNING_KEY_ALIAS: ${{ secrets.ALIAS }}
56106
SIGNING_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
57107
SIGNING_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
58108

59-
- name: Rename and Move APK to Temporary Directory
109+
- name: Rename APK to felicity-foss-x86_64.apk
60110
run: |
61111
mkdir -p ${{ runner.temp }}/apks
62112
APK=$(find music/ -name "*.apk" | head -n 1)
63-
mv "$APK" "${{ runner.temp }}/apks/felicity-foss-${{ env.VERSION_NAME }}.apk"
113+
mv "$APK" "${{ runner.temp }}/apks/felicity-foss-x86_64.apk"
64114
65-
- name: Archive APK
115+
- name: Upload x86_64 APK
66116
uses: actions/upload-artifact@v4
67117
with:
68-
name: ${{ env.VERSION_NAME }}
69-
path: ${{ runner.temp }}/apks/felicity-foss-${{ env.VERSION_NAME }}.apk
118+
name: felicity-foss-x86_64-${{ needs.prepare.outputs.version_name }}
119+
path: ${{ runner.temp }}/apks/felicity-foss-x86_64.apk
70120
if-no-files-found: error

0 commit comments

Comments
 (0)