Skip to content

Commit 682155b

Browse files
Add optional keystore upload inputs to release workflow for consistent APK signing
Agent-Logs-Url: https://github.com/winnerspiros/osu/sessions/c9e6ebec-a8b6-4aa8-b446-27812ab3b780 Co-authored-by: winnerspiros <1675249+winnerspiros@users.noreply.github.com>
1 parent d8c4c7e commit 682155b

1 file changed

Lines changed: 48 additions & 8 deletions

File tree

.github/workflows/release.yml

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,21 @@ on:
1717
required: false
1818
default: true
1919
type: boolean
20+
keystore_base64:
21+
description: "Base64-encoded keystore (from SAVE-THESE-SECRETS.txt). Overrides ANDROID_KEYSTORE_BASE64 secret."
22+
required: false
23+
default: ""
24+
type: string
25+
key_alias:
26+
description: "Signing key alias (from SAVE-THESE-SECRETS.txt). Overrides ANDROID_SIGNING_KEY_ALIAS secret."
27+
required: false
28+
default: ""
29+
type: string
30+
key_password:
31+
description: "Signing key password (from SAVE-THESE-SECRETS.txt). Overrides ANDROID_SIGNING_KEY_PASSWORD secret."
32+
required: false
33+
default: ""
34+
type: string
2035

2136
jobs:
2237
build-android:
@@ -82,17 +97,34 @@ jobs:
8297
run: |
8398
KS_PATH="${{ github.workspace }}/osu.Android/osu.keystore"
8499
85-
if [ -n "$KEYSTORE_BASE64" ]; then
86-
# ── User provided a persistent keystore secret ──────────────
87-
echo "$KEYSTORE_BASE64" | base64 --decode > "$KS_PATH"
100+
# Priority: workflow_dispatch inputs > repository secrets > auto-generate.
101+
# This lets users paste values from SAVE-THESE-SECRETS.txt directly into
102+
# the "Run workflow" form so they don't need to set up repo secrets.
103+
EFFECTIVE_KS="${INPUT_KEYSTORE_BASE64:-$KEYSTORE_BASE64}"
104+
EFFECTIVE_ALIAS="${INPUT_KEY_ALIAS:-$KEY_ALIAS_SECRET}"
105+
EFFECTIVE_PASS="${INPUT_KEY_PASSWORD:-$KEY_PASS_SECRET}"
106+
EFFECTIVE_STORE_PASS="${INPUT_KEY_PASSWORD:-$STORE_PASS_SECRET}"
107+
108+
# Mask passwords so they never appear in logs.
109+
if [ -n "$EFFECTIVE_PASS" ]; then echo "::add-mask::$EFFECTIVE_PASS"; fi
110+
if [ -n "$EFFECTIVE_STORE_PASS" ]; then echo "::add-mask::$EFFECTIVE_STORE_PASS"; fi
111+
112+
if [ -n "$EFFECTIVE_KS" ]; then
113+
# ── User provided a keystore (via input or secret) ──────────────
114+
echo "$EFFECTIVE_KS" | base64 --decode > "$KS_PATH"
88115
echo "has_keystore=true" >> "$GITHUB_OUTPUT"
89116
echo "generated=false" >> "$GITHUB_OUTPUT"
90-
echo "key_alias=$KEY_ALIAS_SECRET" >> "$GITHUB_OUTPUT"
91-
echo "key_pass=$KEY_PASS_SECRET" >> "$GITHUB_OUTPUT"
92-
echo "store_pass=$STORE_PASS_SECRET" >> "$GITHUB_OUTPUT"
93-
echo "✅ Using saved keystore from repository secrets."
117+
echo "key_alias=${EFFECTIVE_ALIAS:-osu-release}" >> "$GITHUB_OUTPUT"
118+
echo "key_pass=${EFFECTIVE_PASS}" >> "$GITHUB_OUTPUT"
119+
echo "store_pass=${EFFECTIVE_STORE_PASS}" >> "$GITHUB_OUTPUT"
120+
121+
if [ -n "$INPUT_KEYSTORE_BASE64" ]; then
122+
echo "✅ Using keystore from workflow dispatch inputs."
123+
else
124+
echo "✅ Using saved keystore from repository secrets."
125+
fi
94126
else
95-
# ── No secret → auto-generate a keystore for this build ─────
127+
# ── No keystore → auto-generate one for this build ──────────────
96128
# The APK will install fine on any device, but UPDATING from a
97129
# previous build signed with a DIFFERENT key will fail.
98130
# To avoid that, save the generated keystore as a secret
@@ -141,6 +173,9 @@ jobs:
141173
KEY_ALIAS_SECRET: ${{ secrets.ANDROID_SIGNING_KEY_ALIAS }}
142174
KEY_PASS_SECRET: ${{ secrets.ANDROID_SIGNING_KEY_PASSWORD }}
143175
STORE_PASS_SECRET: ${{ secrets.ANDROID_SIGNING_STORE_PASSWORD }}
176+
INPUT_KEYSTORE_BASE64: ${{ inputs.keystore_base64 }}
177+
INPUT_KEY_ALIAS: ${{ inputs.key_alias }}
178+
INPUT_KEY_PASSWORD: ${{ inputs.key_password }}
144179

145180
- name: Determine version
146181
id: version
@@ -308,6 +343,11 @@ jobs:
308343
echo ""
309344
echo " ⚡ After saving the secrets, all future builds will use the"
310345
echo " same keystore automatically — no more setup needed."
346+
echo ""
347+
echo " 💡 QUICK OPTION: You can also paste the values from"
348+
echo " SAVE-THESE-SECRETS.txt directly into the workflow"
349+
echo " dispatch inputs (keystore_base64, key_alias, key_password)"
350+
echo " when running the 'Build Android APK' workflow manually."
311351
echo "=================================================================="
312352
313353
# Create a GitHub Release with the APK attached.

0 commit comments

Comments
 (0)