44 push :
55 tags :
66 - ' v[0-9]+.[0-9]+.[0-9]+'
7+ branches :
8+ - staging
79 workflow_dispatch :
810 inputs :
911 version :
4042 VERSION="${{ github.ref_name }}"
4143 VERSION="${VERSION#v}"
4244 BUILD_NUMBER="${{ github.run_number }}"
43- else
45+ elif [ -n "${{ inputs.version }}" ]; then
4446 VERSION="${{ inputs.version }}"
4547 BUILD_NUMBER="${{ inputs.build_number }}"
48+ else
49+ VERSION="0.0.0-staging.${{ github.run_number }}"
50+ BUILD_NUMBER="${{ github.run_number }}"
4651 fi
4752 echo "version=${VERSION}" >> $GITHUB_OUTPUT
4853 echo "build_number=${BUILD_NUMBER}" >> $GITHUB_OUTPUT
@@ -114,9 +119,12 @@ jobs:
114119 VERSION="${{ github.ref_name }}"
115120 VERSION="${VERSION#v}"
116121 BUILD_NUMBER="${{ github.run_number }}"
117- else
122+ elif [ -n "${{ inputs.version }}" ]; then
118123 VERSION="${{ inputs.version }}"
119124 BUILD_NUMBER="${{ inputs.build_number }}"
125+ else
126+ VERSION="0.0.0-staging.${{ github.run_number }}"
127+ BUILD_NUMBER="${{ github.run_number }}"
120128 fi
121129 echo "version=${VERSION}" >> $GITHUB_OUTPUT
122130 echo "build_number=${BUILD_NUMBER}" >> $GITHUB_OUTPUT
@@ -161,7 +169,17 @@ jobs:
161169 env :
162170 KEYSTORE_BASE64 : ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
163171 run : |
164- echo "$KEYSTORE_BASE64" | base64 --decode > android/keystore.jks
172+ printf '%s' "$KEYSTORE_BASE64" | base64 --decode > android/keystore-orig.jks
173+ [ -s android/keystore-orig.jks ] || { echo "ERROR: ANDROID_KEYSTORE_BASE64 secret is empty or not set"; exit 1; }
174+ keytool -importkeystore \
175+ -srckeystore android/keystore-orig.jks \
176+ -destkeystore android/keystore.jks \
177+ -deststoretype pkcs12 \
178+ -srcstorepass "${{ secrets.ANDROID_STORE_PASSWORD }}" \
179+ -deststorepass "${{ secrets.ANDROID_STORE_PASSWORD }}" \
180+ -noprompt \
181+ -J-Dkeystore.pkcs12.legacy
182+ rm android/keystore-orig.jks
165183 cat > android/key.properties <<EOF
166184 storeFile=../keystore.jks
167185 storePassword=${{ secrets.ANDROID_STORE_PASSWORD }}
@@ -209,9 +227,12 @@ jobs:
209227 VERSION="${{ github.ref_name }}"
210228 VERSION="${VERSION#v}"
211229 BUILD_NUMBER="${{ github.run_number }}"
212- else
230+ elif [ -n "${{ inputs.version }}" ]; then
213231 VERSION="${{ inputs.version }}"
214232 BUILD_NUMBER="${{ inputs.build_number }}"
233+ else
234+ VERSION="0.0.0-staging.${{ github.run_number }}"
235+ BUILD_NUMBER="${{ github.run_number }}"
215236 fi
216237 echo "version=${VERSION}" >> $GITHUB_OUTPUT
217238 echo "build_number=${BUILD_NUMBER}" >> $GITHUB_OUTPUT
@@ -236,6 +257,25 @@ jobs:
236257 -b "${{ steps.ver.outputs.build_number }}" \
237258 -p windows -a stack_wallet -d -s
238259
260+ # The Actions windows-2022 runner user lacks SeCreateSymbolicLinkPrivilege,
261+ # so link_assets.sh's mklink /D calls either fail or produce broken reparse
262+ # points that Flutter's asset resolver cannot traverse. Replace each of
263+ # the five gitignored asset directories with real copies instead.
264+ - name : Replace asset symlinks with copies (CI workaround)
265+ run : |
266+ set -euo pipefail
267+ for dirname in default_themes icon lottie in_app_logo_icons svg; do
268+ target="assets/${dirname}"
269+ source="asset_sources/${dirname}/stack_wallet"
270+ # Remove whatever link_assets.sh left (reparse point, symlink, or nothing).
271+ # cmd.exe rmdir on a junction/symlink removes the link, not the target.
272+ if [ -e "$target" ] || [ -L "$target" ]; then
273+ cmd.exe /c rmdir "$(cygpath -w "$target")" 2>/dev/null || rm -rf "$target"
274+ fi
275+ mkdir -p "$target"
276+ cp -r "${source}/." "$target/"
277+ done
278+
239279 - name : Get dependencies
240280 run : flutter pub get
241281
@@ -280,16 +320,10 @@ jobs:
280320 - name : Build
281321 run : flutter build windows --release
282322
283- - name : Package
284- shell : pwsh
285- run : |
286- Compress-Archive -Path build\windows\x64\runner\Release\* `
287- -DestinationPath "stack_wallet-windows-x86_64-${{ steps.ver.outputs.version }}.zip"
288-
289323 - uses : actions/upload-artifact@v4
290324 with :
291325 name : stack_wallet-windows-x86_64-${{ steps.ver.outputs.version }}
292- path : stack_wallet- windows-x86_64-${{ steps.ver.outputs.version }}.zip
326+ path : build/ windows/x64/runner/Release/
293327
294328 build-macos :
295329 runs-on : macos-latest
@@ -306,9 +340,12 @@ jobs:
306340 VERSION="${{ github.ref_name }}"
307341 VERSION="${VERSION#v}"
308342 BUILD_NUMBER="${{ github.run_number }}"
309- else
343+ elif [ -n "${{ inputs.version }}" ]; then
310344 VERSION="${{ inputs.version }}"
311345 BUILD_NUMBER="${{ inputs.build_number }}"
346+ else
347+ VERSION="0.0.0-staging.${{ github.run_number }}"
348+ BUILD_NUMBER="${{ github.run_number }}"
312349 fi
313350 echo "version=${VERSION}" >> $GITHUB_OUTPUT
314351 echo "build_number=${BUILD_NUMBER}" >> $GITHUB_OUTPUT
@@ -380,9 +417,12 @@ jobs:
380417 VERSION="${{ github.ref_name }}"
381418 VERSION="${VERSION#v}"
382419 BUILD_NUMBER="${{ github.run_number }}"
383- else
420+ elif [ -n "${{ inputs.version }}" ]; then
384421 VERSION="${{ inputs.version }}"
385422 BUILD_NUMBER="${{ inputs.build_number }}"
423+ else
424+ VERSION="0.0.0-staging.${{ github.run_number }}"
425+ BUILD_NUMBER="${{ github.run_number }}"
386426 fi
387427 echo "version=${VERSION}" >> $GITHUB_OUTPUT
388428 echo "build_number=${BUILD_NUMBER}" >> $GITHUB_OUTPUT
@@ -454,9 +494,19 @@ jobs:
454494 - uses : actions/download-artifact@v4
455495 with :
456496 path : artifacts
457- merge-multiple : true
497+
498+ - name : Package artifacts
499+ run : |
500+ mkdir -p release-files
501+ for dir in artifacts/stack_wallet-windows-*/; do
502+ [ -d "$dir" ] || continue
503+ name=$(basename "$dir")
504+ (cd "$dir" && zip -r "../../release-files/${name}.zip" .)
505+ done
506+ find artifacts/ \( -name "*.tar.gz" -o -name "*.zip" -o -name "*.ipa" \) -mindepth 2 -exec mv {} release-files/ \;
507+ find artifacts/ -name "*.apk" -mindepth 2 -exec mv {} release-files/ \;
458508
459509 - uses : softprops/action-gh-release@v2
460510 with :
461511 generate_release_notes : true
462- files : artifacts /*
512+ files : release-files /*
0 commit comments