|
17 | 17 | required: false |
18 | 18 | default: true |
19 | 19 | 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 |
20 | 35 |
|
21 | 36 | jobs: |
22 | 37 | build-android: |
@@ -82,17 +97,37 @@ jobs: |
82 | 97 | run: | |
83 | 98 | KS_PATH="${{ github.workspace }}/osu.Android/osu.keystore" |
84 | 99 |
|
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 | + # Note: the auto-generated keystore uses the same password for both key and |
| 104 | + # store, so a single key_password input covers both. Users with separate |
| 105 | + # passwords should use repository secrets instead of workflow inputs. |
| 106 | + EFFECTIVE_KS="${INPUT_KEYSTORE_BASE64:-$KEYSTORE_BASE64}" |
| 107 | + EFFECTIVE_ALIAS="${INPUT_KEY_ALIAS:-$KEY_ALIAS_SECRET}" |
| 108 | + EFFECTIVE_PASS="${INPUT_KEY_PASSWORD:-$KEY_PASS_SECRET}" |
| 109 | + EFFECTIVE_STORE_PASS="${INPUT_KEY_PASSWORD:-${STORE_PASS_SECRET:-$EFFECTIVE_PASS}}" |
| 110 | +
|
| 111 | + # Mask passwords so they never appear in logs. |
| 112 | + if [ -n "$EFFECTIVE_PASS" ]; then echo "::add-mask::$EFFECTIVE_PASS"; fi |
| 113 | + if [ -n "$EFFECTIVE_STORE_PASS" ]; then echo "::add-mask::$EFFECTIVE_STORE_PASS"; fi |
| 114 | +
|
| 115 | + if [ -n "$EFFECTIVE_KS" ]; then |
| 116 | + # ── User provided a keystore (via input or secret) ────────────── |
| 117 | + echo "$EFFECTIVE_KS" | base64 --decode > "$KS_PATH" |
88 | 118 | echo "has_keystore=true" >> "$GITHUB_OUTPUT" |
89 | 119 | 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." |
| 120 | + echo "key_alias=${EFFECTIVE_ALIAS:-osu-release}" >> "$GITHUB_OUTPUT" |
| 121 | + echo "key_pass=${EFFECTIVE_PASS}" >> "$GITHUB_OUTPUT" |
| 122 | + echo "store_pass=${EFFECTIVE_STORE_PASS}" >> "$GITHUB_OUTPUT" |
| 123 | +
|
| 124 | + if [ -n "$INPUT_KEYSTORE_BASE64" ]; then |
| 125 | + echo "✅ Using keystore from workflow dispatch inputs." |
| 126 | + else |
| 127 | + echo "✅ Using saved keystore from repository secrets." |
| 128 | + fi |
94 | 129 | else |
95 | | - # ── No secret → auto-generate a keystore for this build ───── |
| 130 | + # ── No keystore → auto-generate one for this build ────────────── |
96 | 131 | # The APK will install fine on any device, but UPDATING from a |
97 | 132 | # previous build signed with a DIFFERENT key will fail. |
98 | 133 | # To avoid that, save the generated keystore as a secret |
@@ -141,6 +176,9 @@ jobs: |
141 | 176 | KEY_ALIAS_SECRET: ${{ secrets.ANDROID_SIGNING_KEY_ALIAS }} |
142 | 177 | KEY_PASS_SECRET: ${{ secrets.ANDROID_SIGNING_KEY_PASSWORD }} |
143 | 178 | STORE_PASS_SECRET: ${{ secrets.ANDROID_SIGNING_STORE_PASSWORD }} |
| 179 | + INPUT_KEYSTORE_BASE64: ${{ inputs.keystore_base64 }} |
| 180 | + INPUT_KEY_ALIAS: ${{ inputs.key_alias }} |
| 181 | + INPUT_KEY_PASSWORD: ${{ inputs.key_password }} |
144 | 182 |
|
145 | 183 | - name: Determine version |
146 | 184 | id: version |
@@ -308,6 +346,11 @@ jobs: |
308 | 346 | echo "" |
309 | 347 | echo " ⚡ After saving the secrets, all future builds will use the" |
310 | 348 | echo " same keystore automatically — no more setup needed." |
| 349 | + echo "" |
| 350 | + echo " 💡 QUICK OPTION: You can also paste the values from" |
| 351 | + echo " SAVE-THESE-SECRETS.txt directly into the workflow" |
| 352 | + echo " dispatch inputs (keystore_base64, key_alias, key_password)" |
| 353 | + echo " when running the 'Build Android APK' workflow manually." |
311 | 354 | echo "==================================================================" |
312 | 355 |
|
313 | 356 | # Create a GitHub Release with the APK attached. |
|
0 commit comments