From 7f498fda94c6f36eba6ff71065a7f59233d51f92 Mon Sep 17 00:00:00 2001 From: Scriptbash <98601298+Scriptbash@users.noreply.github.com> Date: Tue, 6 Jan 2026 17:34:41 -0500 Subject: [PATCH 1/7] create app dmg --- .github/workflows/publish.yml | 194 +++++++++++++++---------- macos/Runner.xcodeproj/project.pbxproj | 11 +- 2 files changed, 131 insertions(+), 74 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 75a52bfe..23de980b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -4,77 +4,125 @@ on: workflow_dispatch: jobs: - build-android: - name: Build for Android - runs-on: ubuntu-latest + #build-android: + # name: Build for Android + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v6 + # - name: Install Ninja + # run: sudo apt-get install -y ninja-build + # - uses: actions/setup-java@v5 + # with: + # distribution: 'temurin' + # java-version: '21' + # - uses: subosito/flutter-action@v2 + # with: + # channel: 'stable' + # - run: flutter pub get + # - run: dart run pdfrx:remove_wasm_modules + # - name: Patch pdfrx + # run: | + # PDFRX_PATH=$(find $HOME/.pub-cache -type d -name "pdfrx-*" | head -n 1) + # CMAKE_FILE="$PDFRX_PATH/android/CMakeLists.txt" + # if [ -f "$CMAKE_FILE" ]; then + # sed -i '2i add_link_options("LINKER:--build-id=none")' "$CMAKE_FILE" + # echo "Patched CMakeLists.txt in $CMAKE_FILE" + # else + # echo "CMakeLists.txt not found in expected location" + # exit 1 + # fi + # - name: Decode Keystore + # run: | + # echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/keystore.jks + # - name: Create key.properties + # run: | + # echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" > android/key.properties + # echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties + # echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties + # echo "storeFile=keystore.jks" >> android/key.properties + # - name: Build APK + # run: flutter build apk --release + # - name: Build appBundle + # run: flutter build appbundle + # - name: Upload Artifacts + # uses: actions/upload-artifact@v6 + # with: + # name: Releases + # path: | + # build/app/outputs/flutter-apk/app-release.apk + # build/app/outputs/bundle/release/app-release.aab + # - name: Extract version from pubspec.yaml + # id: extract_version + # run: | + # version=$(grep '^version: ' pubspec.yaml | cut -d ' ' -f 2 | tr -d '\r') + # echo "VERSION=$version" >> $GITHUB_ENV + # - name: Create GitHub Release + # uses: ncipollo/release-action@v1 + # with: + # artifacts: "build/app/outputs/flutter-apk/app-release.apk,build/app/outputs/bundle/release/app-release.aab" + # tag: v${{ env.VERSION }} + # token: ${{ secrets.TOKEN }} + # draft: true + # generateReleaseNotes: true + # - name: Create google_service_account.json + # run: | + # echo "${{ secrets.GOOGLE_SERVICE_ACCOUNT }}" | base64 --decode > android/google_service_account.json + # - name: Setup ruby + # uses: ruby/setup-ruby@v1 + # with: + # ruby-version: '3.4.7' + # bundler-cache: true + # working-directory: 'android' + # - name: Deploy to Play Store + # uses: maierj/fastlane-action@v3.1.0 + # with: + # lane: deploy + # subdirectory: android + + build-macos: + name: Build for macOS + runs-on: macos-15 steps: - - uses: actions/checkout@v6 - - name: Install Ninja - run: sudo apt-get install -y ninja-build - - uses: actions/setup-java@v5 - with: - distribution: 'temurin' - java-version: '21' - - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - - run: flutter pub get - - run: dart run pdfrx:remove_wasm_modules - - name: Patch pdfrx - run: | - PDFRX_PATH=$(find $HOME/.pub-cache -type d -name "pdfrx-*" | head -n 1) - CMAKE_FILE="$PDFRX_PATH/android/CMakeLists.txt" - if [ -f "$CMAKE_FILE" ]; then - sed -i '2i add_link_options("LINKER:--build-id=none")' "$CMAKE_FILE" - echo "Patched CMakeLists.txt in $CMAKE_FILE" - else - echo "CMakeLists.txt not found in expected location" - exit 1 - fi - - name: Decode Keystore - run: | - echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/keystore.jks - - name: Create key.properties - run: | - echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" > android/key.properties - echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties - echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties - echo "storeFile=keystore.jks" >> android/key.properties - - name: Build APK - run: flutter build apk --release - - name: Build appBundle - run: flutter build appbundle - - name: Upload Artifacts - uses: actions/upload-artifact@v6 - with: - name: Releases - path: | - build/app/outputs/flutter-apk/app-release.apk - build/app/outputs/bundle/release/app-release.aab - - name: Extract version from pubspec.yaml - id: extract_version - run: | - version=$(grep '^version: ' pubspec.yaml | cut -d ' ' -f 2 | tr -d '\r') - echo "VERSION=$version" >> $GITHUB_ENV - - name: Create GitHub Release - uses: ncipollo/release-action@v1 - with: - artifacts: "build/app/outputs/flutter-apk/app-release.apk,build/app/outputs/bundle/release/app-release.aab" - tag: v${{ env.VERSION }} - token: ${{ secrets.TOKEN }} - draft: true - generateReleaseNotes: true - - name: Create google_service_account.json - run: | - echo "${{ secrets.GOOGLE_SERVICE_ACCOUNT }}" | base64 --decode > android/google_service_account.json - - name: Setup ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: '3.4.7' - bundler-cache: true - working-directory: 'android' - - name: Deploy to Play Store - uses: maierj/fastlane-action@v3.1.0 - with: - lane: deploy - subdirectory: android + - uses: actions/checkout@v6 + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable + - uses: subosito/flutter-action@v2 + with: + channel: 'stable' + - run: flutter pub get + - run: flutter build macos --release + - name: Codesign executable + env: + MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }} + MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERTIFICATE_PWD }} + KEYCHAIN_PASSWORD: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }} + MACOS_SIGN_IDENTITY: ${{ secrets.MACOS_SIGN_IDENTITY }} + run: | + echo "$MACOS_CERTIFICATE" | base64 --decode > certificate.p12 + security create-keychain -p $KEYCHAIN_PASSWORD build.keychain + security default-keychain -s build.keychain + security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain + security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain + security find-identity + /usr/bin/codesign --force --deep -s "$MACOS_SIGN_IDENTITY" build/macos/Build/Products/Release/Wispar.app + /usr/bin/codesign --verify --deep --strict --verbose=2 build/macos/Build/Products/Release/Wispar.app + - name: Create dmg + env: + MACOS_SIGN_IDENTITY: ${{ secrets.MACOS_SIGN_IDENTITY }} + run: | + brew install create-dmg + create-dmg \ + --volname "Wispar" \ + --window-size 800 529 \ + --icon-size 130 \ + --app-drop-link 540 250 \ + "Wispar.dmg" \ + build/macos/Build/Products/Release/Wispar.app + /usr/bin/codesign --force -s "$MACOS_SIGN_IDENTITY" Wispar.dmg + + - uses: actions/upload-artifact@v6 + with: + name: wispar-macos-dmg + path: Wispar.dmg \ No newline at end of file diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index afba23be..6dd9c2ba 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -195,7 +195,6 @@ 077AD6D76AA5F5C9E42F6667 /* Pods-RunnerTests.release.xcconfig */, E17D02A429D24D4C722C5DBB /* Pods-RunnerTests.profile.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; @@ -391,10 +390,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; @@ -572,9 +575,11 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", @@ -704,9 +709,11 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", @@ -724,9 +731,11 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", From 5c2eadaafb2a6187a9762f50e7c617a8b870703f Mon Sep 17 00:00:00 2001 From: Scriptbash <98601298+Scriptbash@users.noreply.github.com> Date: Tue, 6 Jan 2026 18:04:28 -0500 Subject: [PATCH 2/7] notarize app --- .github/workflows/publish.yml | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 23de980b..cc457706 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -108,6 +108,39 @@ jobs: security find-identity /usr/bin/codesign --force --deep -s "$MACOS_SIGN_IDENTITY" build/macos/Build/Products/Release/Wispar.app /usr/bin/codesign --verify --deep --strict --verbose=2 build/macos/Build/Products/Release/Wispar.app + - name: Notarize app + env: + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} + run: | + cd build/macos/Build/Products/Release + ditto -c -k --keepParent Wispar.app Wispar.zip + REQUEST_UUID=$(xcrun altool --notarize-app \ + --primary-bundle-id "app.wispar.wispar" \ + --username "$APPLE_ID" \ + --password "$APPLE_PASSWORD" \ + --file Wispar.zip 2>&1 | grep "RequestUUID" | awk '{print $NF}') + echo "Notarization Request UUID: $REQUEST_UUID" + + while true; do + STATUS=$(xcrun altool --notarization-info "$REQUEST_UUID" \ + --username "$APPLE_ID" \ + --password "$APPLE_PASSWORD" 2>&1 | grep "Status:" | awk '{$1=""; print $0}' | xargs) + + echo "Current notarization status: $STATUS" + + if [[ "$STATUS" == "success" ]]; then + echo "Notarization succeeded!" + break + elif [[ "$STATUS" == "in progress" ]]; then + echo "Still processing... waiting 30s" + sleep 30 + else + echo "Notarization failed!" + exit 1 + fi + done + xcrun stapler staple Wispar.app - name: Create dmg env: MACOS_SIGN_IDENTITY: ${{ secrets.MACOS_SIGN_IDENTITY }} @@ -121,7 +154,6 @@ jobs: "Wispar.dmg" \ build/macos/Build/Products/Release/Wispar.app /usr/bin/codesign --force -s "$MACOS_SIGN_IDENTITY" Wispar.dmg - - uses: actions/upload-artifact@v6 with: name: wispar-macos-dmg From d88bcb5168a597da72456ccb56c9bbe739207e1e Mon Sep 17 00:00:00 2001 From: Scriptbash <98601298+Scriptbash@users.noreply.github.com> Date: Tue, 6 Jan 2026 18:18:32 -0500 Subject: [PATCH 3/7] use existing action for notarization --- .github/workflows/publish.yml | 36 ++++++++--------------------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cc457706..26a96a88 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -112,35 +112,15 @@ jobs: env: APPLE_ID: ${{ secrets.APPLE_ID }} APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} + uses: lando/notarize-action@v2 + with: + product-path: "build/macos/Build/Products/Release/Wispar.app" + appstore-connect-username: ${{ secrets.APPLE_ID }} + appstore-connect-password: ${{ secrets.APPLE_PASSWORD }} + appstore-connect-team-id: ${{ secrets.APPLE_TEAM_ID }} + - name: Staple notarization run: | - cd build/macos/Build/Products/Release - ditto -c -k --keepParent Wispar.app Wispar.zip - REQUEST_UUID=$(xcrun altool --notarize-app \ - --primary-bundle-id "app.wispar.wispar" \ - --username "$APPLE_ID" \ - --password "$APPLE_PASSWORD" \ - --file Wispar.zip 2>&1 | grep "RequestUUID" | awk '{print $NF}') - echo "Notarization Request UUID: $REQUEST_UUID" - - while true; do - STATUS=$(xcrun altool --notarization-info "$REQUEST_UUID" \ - --username "$APPLE_ID" \ - --password "$APPLE_PASSWORD" 2>&1 | grep "Status:" | awk '{$1=""; print $0}' | xargs) - - echo "Current notarization status: $STATUS" - - if [[ "$STATUS" == "success" ]]; then - echo "Notarization succeeded!" - break - elif [[ "$STATUS" == "in progress" ]]; then - echo "Still processing... waiting 30s" - sleep 30 - else - echo "Notarization failed!" - exit 1 - fi - done - xcrun stapler staple Wispar.app + xcrun stapler staple build/macos/Build/Products/Release/Wispar.app - name: Create dmg env: MACOS_SIGN_IDENTITY: ${{ secrets.MACOS_SIGN_IDENTITY }} From 0b0a8400462ca4d3669f6a3b4bbbd878ca485689 Mon Sep 17 00:00:00 2001 From: Scriptbash <98601298+Scriptbash@users.noreply.github.com> Date: Tue, 6 Jan 2026 18:38:17 -0500 Subject: [PATCH 4/7] wip --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 26a96a88..8d7f2001 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -106,7 +106,7 @@ jobs: security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain security find-identity - /usr/bin/codesign --force --deep -s "$MACOS_SIGN_IDENTITY" build/macos/Build/Products/Release/Wispar.app + /usr/bin/codesign --force --deep --options runtime -s "$MACOS_SIGN_IDENTITY" build/macos/Build/Products/Release/Wispar.app /usr/bin/codesign --verify --deep --strict --verbose=2 build/macos/Build/Products/Release/Wispar.app - name: Notarize app env: From 8f2905c8a18e1fadae7f7d1442d7deb2f5042315 Mon Sep 17 00:00:00 2001 From: Scriptbash <98601298+Scriptbash@users.noreply.github.com> Date: Tue, 6 Jan 2026 19:02:47 -0500 Subject: [PATCH 5/7] wip --- .github/workflows/publish.yml | 170 +++++++++++++++++++--------------- 1 file changed, 95 insertions(+), 75 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8d7f2001..d1171c65 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -4,80 +4,67 @@ on: workflow_dispatch: jobs: - #build-android: - # name: Build for Android - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v6 - # - name: Install Ninja - # run: sudo apt-get install -y ninja-build - # - uses: actions/setup-java@v5 - # with: - # distribution: 'temurin' - # java-version: '21' - # - uses: subosito/flutter-action@v2 - # with: - # channel: 'stable' - # - run: flutter pub get - # - run: dart run pdfrx:remove_wasm_modules - # - name: Patch pdfrx - # run: | - # PDFRX_PATH=$(find $HOME/.pub-cache -type d -name "pdfrx-*" | head -n 1) - # CMAKE_FILE="$PDFRX_PATH/android/CMakeLists.txt" - # if [ -f "$CMAKE_FILE" ]; then - # sed -i '2i add_link_options("LINKER:--build-id=none")' "$CMAKE_FILE" - # echo "Patched CMakeLists.txt in $CMAKE_FILE" - # else - # echo "CMakeLists.txt not found in expected location" - # exit 1 - # fi - # - name: Decode Keystore - # run: | - # echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/keystore.jks - # - name: Create key.properties - # run: | - # echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" > android/key.properties - # echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties - # echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties - # echo "storeFile=keystore.jks" >> android/key.properties - # - name: Build APK - # run: flutter build apk --release - # - name: Build appBundle - # run: flutter build appbundle - # - name: Upload Artifacts - # uses: actions/upload-artifact@v6 - # with: - # name: Releases - # path: | - # build/app/outputs/flutter-apk/app-release.apk - # build/app/outputs/bundle/release/app-release.aab - # - name: Extract version from pubspec.yaml - # id: extract_version - # run: | - # version=$(grep '^version: ' pubspec.yaml | cut -d ' ' -f 2 | tr -d '\r') - # echo "VERSION=$version" >> $GITHUB_ENV - # - name: Create GitHub Release - # uses: ncipollo/release-action@v1 - # with: - # artifacts: "build/app/outputs/flutter-apk/app-release.apk,build/app/outputs/bundle/release/app-release.aab" - # tag: v${{ env.VERSION }} - # token: ${{ secrets.TOKEN }} - # draft: true - # generateReleaseNotes: true - # - name: Create google_service_account.json - # run: | - # echo "${{ secrets.GOOGLE_SERVICE_ACCOUNT }}" | base64 --decode > android/google_service_account.json - # - name: Setup ruby - # uses: ruby/setup-ruby@v1 - # with: - # ruby-version: '3.4.7' - # bundler-cache: true - # working-directory: 'android' - # - name: Deploy to Play Store - # uses: maierj/fastlane-action@v3.1.0 - # with: - # lane: deploy - # subdirectory: android + build-android: + name: Build for Android + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Install Ninja + run: sudo apt-get install -y ninja-build + - uses: actions/setup-java@v5 + with: + distribution: 'temurin' + java-version: '21' + - uses: subosito/flutter-action@v2 + with: + channel: 'stable' + - run: flutter pub get + - run: dart run pdfrx:remove_wasm_modules + - name: Patch pdfrx + run: | + PDFRX_PATH=$(find $HOME/.pub-cache -type d -name "pdfrx-*" | head -n 1) + CMAKE_FILE="$PDFRX_PATH/android/CMakeLists.txt" + if [ -f "$CMAKE_FILE" ]; then + sed -i '2i add_link_options("LINKER:--build-id=none")' "$CMAKE_FILE" + echo "Patched CMakeLists.txt in $CMAKE_FILE" + else + echo "CMakeLists.txt not found in expected location" + exit 1 + fi + - name: Decode Keystore + run: | + echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/keystore.jks + - name: Create key.properties + run: | + echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" > android/key.properties + echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties + echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties + echo "storeFile=keystore.jks" >> android/key.properties + - name: Build APK + run: flutter build apk --release + - name: Build appBundle + run: flutter build appbundle + - name: Upload Artifacts + uses: actions/upload-artifact@v6 + with: + name: Releases + path: | + build/app/outputs/flutter-apk/app-release.apk + build/app/outputs/bundle/release/app-release.aab + - name: Create google_service_account.json + run: | + echo "${{ secrets.GOOGLE_SERVICE_ACCOUNT }}" | base64 --decode > android/google_service_account.json + - name: Setup ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.4.7' + bundler-cache: true + working-directory: 'android' + #- name: Deploy to Play Store + # uses: maierj/fastlane-action@v3.1.0 + # with: + # lane: deploy + # subdirectory: android build-macos: name: Build for macOS @@ -137,4 +124,37 @@ jobs: - uses: actions/upload-artifact@v6 with: name: wispar-macos-dmg - path: Wispar.dmg \ No newline at end of file + path: Wispar.dmg + + create-release: + name: Create GitHub Release + runs-on: ubuntu-latest + needs: [build-android, build-macos] + steps: + - uses: actions/checkout@v6 + - name: Download Android artifacts + uses: actions/download-artifact@v6 + with: + name: Releases + path: android-artifacts + - name: Download macOS artifact + uses: actions/download-artifact@v6 + with: + name: wispar-macos-dmg + path: macos-artifacts + - name: Extract version from pubspec.yaml + id: extract_version + run: | + version=$(grep '^version: ' pubspec.yaml | cut -d ' ' -f 2 | tr -d '\r') + echo "VERSION=$version" >> $GITHUB_ENV + - name: Create GitHub Release + uses: ncipollo/release-action@v1 + with: + artifacts: | + android-artifacts/build/app/outputs/flutter-apk/app-release.apk, + android-artifacts/build/app/outputs/bundle/release/app-release.aab, + macos-artifacts/Wispar.dmg + tag: v${{ env.VERSION }} + token: ${{ secrets.TOKEN }} + draft: true + generateReleaseNotes: true \ No newline at end of file From 84051e73d76a66f8efbc1d1ebb20562c92274666 Mon Sep 17 00:00:00 2001 From: Scriptbash <98601298+Scriptbash@users.noreply.github.com> Date: Tue, 6 Jan 2026 19:21:06 -0500 Subject: [PATCH 6/7] fix android apk path --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d1171c65..94d820ce 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -151,8 +151,8 @@ jobs: uses: ncipollo/release-action@v1 with: artifacts: | - android-artifacts/build/app/outputs/flutter-apk/app-release.apk, - android-artifacts/build/app/outputs/bundle/release/app-release.aab, + android-artifacts/app-release.apk, + android-artifacts/app-release.aab, macos-artifacts/Wispar.dmg tag: v${{ env.VERSION }} token: ${{ secrets.TOKEN }} From 01ae3e2b10481d1608c086f6a488929c2e377f60 Mon Sep 17 00:00:00 2001 From: Scriptbash <98601298+Scriptbash@users.noreply.github.com> Date: Tue, 6 Jan 2026 19:25:56 -0500 Subject: [PATCH 7/7] rename the workflow --- .github/workflows/publish.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 94d820ce..544ad909 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,4 +1,4 @@ -name: Signed builds and upload to Play Store +name: Release and publish apps on: workflow_dispatch: @@ -60,11 +60,11 @@ jobs: ruby-version: '3.4.7' bundler-cache: true working-directory: 'android' - #- name: Deploy to Play Store - # uses: maierj/fastlane-action@v3.1.0 - # with: - # lane: deploy - # subdirectory: android + - name: Deploy to Play Store + uses: maierj/fastlane-action@v3.1.0 + with: + lane: deploy + subdirectory: android build-macos: name: Build for macOS