From 4c677c076405b6ce9cd4b192b02ed12f2bf5e5ec Mon Sep 17 00:00:00 2001 From: Reuben Yap Date: Thu, 11 Jul 2024 10:35:28 +0800 Subject: [PATCH 01/22] Update README.md --- README.md | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 4c18c3181a..e0b5fd98f6 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,27 @@ -[![codecov](https://codecov.io/gh/cypherstack/stack_wallet/branch/main/graph/badge.svg?token=PM1N56UTEW)](https://codecov.io/gh/cypherstack/stack_wallet) -# Stack Wallet -Stack Wallet is a fully open source cryptocurrency wallet. With an easy to use user interface and quick and speedy transactions, this wallet is ideal for anyone no matter how much they know about the cryptocurrency space. The app is actively maintained to provide new user friendly features. +# Campfire Wallet +Campfire is a fuly open source Firo-only wallet. With full Spark support, an easy to use user interface and quick and speedy sync times, this wallet is the ideal first experience to Firo. - +Campfire is a fork of Stack wallet, a multi-currency wallet developed by [Cypher Stack](https://cypherstack.com/) that also has Firo support. + + ## Feature List Highlights include: -- 11 Different cryptocurrencies: - - [Bitcoin](https://bitcoin.org/en/) - - [Bitcoin Cash](https://bch.info/en/) - - [Dogecoin](https://dogecoin.com/) - - [Epic Cash](https://linktr.ee/epiccash) - - [Ethereum](https://ethereum.org/en/) - - [Firo](https://firo.org/) - - [Litecoin](https://litecoin.org/) - - [Monero](https://www.getmonero.org/) - - [Namecoin](https://www.namecoin.org/) - - [Particl](https://particl.io/) - - [Wownero](https://wownero.org/) +- Full Lelantus Spark support +- EX address support +- Masternode collateral recognition - All private keys and seeds stay on device and are never shared. - Easy backup and restore feature to save all the information that's important to you. -- Trading cryptocurrencies through our partners. - Custom address book - Favorite wallets with fast syncing - Custom Nodes. - Open source software. - No ads. -> You can find the roadmap [here](docs/roadmap.md). - ## Building You can look at the [build instructions](docs/building.md) for more details. From 56d73a9a92156abfe57646d4950bde75310b09cd Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 11:59:13 +0400 Subject: [PATCH 02/22] Add build workflow for macOS --- .github/workflows/build.yml | 74 +++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..7311539d0e --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,74 @@ +name: Build + +on: + pull_request: + +permissions: + contents: read + +jobs: + build-macos: + name: Build macOS artifact + runs-on: macos-14 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.29.2" + channel: stable + cache: true + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install Rust toolchains required by project + run: rustup install 1.85.1 1.81.0 + + - name: Install macOS build dependencies + run: | + brew update + brew install automake cmake cocoapods libtool pkg-config + + - name: Generate app config files from templates + run: | + source scripts/env.sh + source scripts/app_config/templates/configure_template_files.sh + source scripts/app_config/configure_campfire.sh macos + scripts/app_config/platforms/macos/platform_config.sh + + - name: Generate local template secrets + run: | + cd scripts + ./prebuild.sh + + - name: Build macOS crypto plugins + run: | + cd scripts/macos + ./build_all_campfire.sh + + - name: Resolve Dart and CocoaPods dependencies + run: | + flutter pub get + cd macos + pod install + + - name: Build macOS app + run: flutter build macos --release + + - name: Pack macOS artifact + run: | + APP_PATH="$(ls -d build/macos/Build/Products/Release/*.app | head -n 1)" + ditto -c -k --sequesterRsrc --keepParent "${APP_PATH}" campfire-macos-app.zip + + - name: Upload macOS artifact + uses: actions/upload-artifact@v4 + with: + name: campfire-macos + path: campfire-macos-app.zip + if-no-files-found: error From 09e32ddaf67c19c345aef00986ddb67293a91e2c Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 12:06:17 +0400 Subject: [PATCH 03/22] fix for macos ci build --- .github/workflows/build.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7311539d0e..4a852e0282 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,6 +42,11 @@ jobs: source scripts/app_config/configure_campfire.sh macos scripts/app_config/platforms/macos/platform_config.sh + - name: Set CI app version in pubspec + run: | + source scripts/env.sh + scripts/app_config/shared/update_version.sh -v "0.0.0" -b "${{ github.run_number }}" + - name: Generate local template secrets run: | cd scripts From 7fbd6cba012d5d369d8003519a79b9f5f4190a01 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 12:12:45 +0400 Subject: [PATCH 04/22] update flutter version for macos build ci --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4a852e0282..f7689d2a99 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,7 +20,7 @@ jobs: - name: Set up Flutter uses: subosito/flutter-action@v2 with: - flutter-version: "3.29.2" + flutter-version: "3.41.9" channel: stable cache: true From da0937f6b89f2651b07bf5e72e7d8308b80d86f3 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 12:27:26 +0400 Subject: [PATCH 05/22] update macos ci --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f7689d2a99..2cb2b17c1a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,6 +41,7 @@ jobs: source scripts/app_config/templates/configure_template_files.sh source scripts/app_config/configure_campfire.sh macos scripts/app_config/platforms/macos/platform_config.sh + scripts/app_config/shared/link_assets.sh campfire macos - name: Set CI app version in pubspec run: | From aaeba425f2dbf734912e12e1938acb61fafe025c Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 13:35:10 +0400 Subject: [PATCH 06/22] Add build workflow for Windows --- .github/workflows/build.yml | 145 ++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2cb2b17c1a..fef5b3fccc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -78,3 +78,148 @@ jobs: name: campfire-macos path: campfire-macos-app.zip if-no-files-found: error + + build-windows: + name: Build Windows artifact + runs-on: windows-latest + timeout-minutes: 120 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + fetch-depth: 0 + + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.41.9" + channel: stable + cache: true + + - name: Init submodules + shell: bash + run: | + set -euxo pipefail + git submodule sync --recursive + git submodule update --init --recursive + + - name: Disable frostdart DLL install in CI + shell: bash + run: | + set -euxo pipefail + if [ -f crypto_plugins/frostdart/windows/CMakeLists.txt ]; then + sed -i '/frostdart\.dll/d' crypto_plugins/frostdart/windows/CMakeLists.txt + fi + + - name: Generate Campfire config + generated files + shell: bash + run: | + set -euxo pipefail + source scripts/env.sh + export BUILD_ISAR_FROM_SOURCE=0 + + (cd scripts && bash prebuild.sh) + source scripts/app_config/templates/configure_template_files.sh + bash scripts/app_config/shared/update_version.sh -v 0.0.0 -b "${{ github.run_number }}" + bash scripts/app_config/configure_campfire.sh windows + bash scripts/app_config/platforms/windows/platform_config.sh + + - name: Prepare assets for Campfire + shell: pwsh + run: | + $dirs = @("default_themes","icon","lottie","in_app_logo_icons","svg") + foreach ($d in $dirs) { + $src = "asset_sources/$d/campfire" + $dst = "assets/$d" + if (!(Test-Path $src)) { throw "Missing source assets directory: $src" } + if (Test-Path $dst) { Remove-Item $dst -Recurse -Force } + Copy-Item $src $dst -Recurse -Force + } + + - name: Flutter clean + run: flutter clean + + - name: Flutter pub get + run: flutter pub get + + - name: Build secp256k1.dll (Release) + shell: pwsh + run: | + $ErrorActionPreference = "Stop" + + New-Item -ItemType Directory -Force -Path build | Out-Null + Push-Location build + + if (-not (Test-Path "secp256k1")) { + git clone https://github.com/bitcoin-core/secp256k1 + } + + Push-Location secp256k1 + git checkout 68b55209f1ba3e6c0417789598f5f75649e9c14c + git reset --hard + + cmake -G "Visual Studio 17 2022" -A x64 -S . -B build + cmake --build build --config Release + + $dll = Join-Path (Get-Location).Path "build\bin\Release\libsecp256k1-2.dll" + if (-not (Test-Path $dll)) { throw "Missing Release DLL: $dll" } + + $here = (Get-Location).Path + $repoBuildDir = Split-Path -Path $here -Parent + $repoRootDir = Split-Path -Path $repoBuildDir -Parent + + Copy-Item -LiteralPath $dll -Destination (Join-Path $repoBuildDir "secp256k1.dll") -Force + Copy-Item -LiteralPath $dll -Destination (Join-Path $repoRootDir "secp256k1.dll") -Force + + Pop-Location + Pop-Location + + if (-not (Test-Path "build/secp256k1.dll")) { throw "build/secp256k1.dll missing" } + if (-not (Test-Path "secp256k1.dll")) { throw "secp256k1.dll missing in repo root" } + + - name: Build Windows release + run: flutter build windows --release -v + + - name: Copy secp256k1.dll into final Release + shell: pwsh + run: | + $ErrorActionPreference = "Stop" + + $release = "build/windows/x64/runner/Release" + if (-not (Test-Path $release)) { $release = "build/windows/runner/Release" } + if (-not (Test-Path $release)) { throw "Release directory not found" } + + if (-not (Test-Path "build/secp256k1.dll")) { throw "build/secp256k1.dll not found" } + + Copy-Item "build/secp256k1.dll" (Join-Path $release "secp256k1.dll") -Force + + - name: Verify release + shell: pwsh + run: | + $ErrorActionPreference = "Stop" + + $release = "build/windows/x64/runner/Release" + if (-not (Test-Path $release)) { $release = "build/windows/runner/Release" } + if (-not (Test-Path $release)) { throw "Release directory missing" } + + if (!(Test-Path (Join-Path $release "secp256k1.dll"))) { + throw "secp256k1.dll missing in Release" + } + + Get-ChildItem $release -Force + + - name: Zip release + shell: pwsh + run: | + $release = "build/windows/x64/runner/Release" + if (-not (Test-Path $release)) { $release = "build/windows/runner/Release" } + Compress-Archive -Path (Join-Path $release "*") -DestinationPath campfire-windows.zip -Force + + - name: Upload Windows artifact + uses: actions/upload-artifact@v4 + with: + name: campfire-windows + path: campfire-windows.zip + if-no-files-found: error From 15f6de7c9d6d174c7ca2db9a6b2d247ffc0ccd20 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 13:49:00 +0400 Subject: [PATCH 07/22] update CMakeLists for build --- windows/runner/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/windows/runner/CMakeLists.txt b/windows/runner/CMakeLists.txt index 17411a8ab8..9be59393bc 100644 --- a/windows/runner/CMakeLists.txt +++ b/windows/runner/CMakeLists.txt @@ -1,6 +1,10 @@ cmake_minimum_required(VERSION 3.14) project(runner LANGUAGES CXX) +if(NOT DEFINED BINARY_NAME OR "${BINARY_NAME}" STREQUAL "") + set(BINARY_NAME "campfire") +endif() + # Define the application target. To change its name, change BINARY_NAME in the # top-level CMakeLists.txt, not the value here, or `flutter run` will no longer # work. From b985baf064ae3b7dd933c5cf3efbbb53a391fea8 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 13:56:37 +0400 Subject: [PATCH 08/22] update workflow --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fef5b3fccc..c9f89d9e93 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -123,7 +123,7 @@ jobs: (cd scripts && bash prebuild.sh) source scripts/app_config/templates/configure_template_files.sh bash scripts/app_config/shared/update_version.sh -v 0.0.0 -b "${{ github.run_number }}" - bash scripts/app_config/configure_campfire.sh windows + source scripts/app_config/configure_campfire.sh windows bash scripts/app_config/platforms/windows/platform_config.sh - name: Prepare assets for Campfire From ed8ed0f462a6a0a80616ace747e6b484c9f7106a Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 14:29:58 +0400 Subject: [PATCH 09/22] Add build workflow for Linux --- .github/workflows/build.yml | 76 +++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c9f89d9e93..7322993068 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -223,3 +223,79 @@ jobs: name: campfire-windows path: campfire-windows.zip if-no-files-found: error + + build-linux: + name: Build Linux artifact + runs-on: ubuntu-24.04 + timeout-minutes: 120 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.41.9" + channel: stable + cache: true + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install Rust toolchains required by project + run: rustup install 1.85.1 1.81.0 + + - name: Install Linux build dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev \ + meson python3-pip libgirepository1.0-dev valac xsltproc docbook-xsl \ + libssl-dev curl unzip automake build-essential file git python3 \ + libtool libtinfo6 libgit2-dev libncurses5-dev libncursesw5-dev \ + zlib1g-dev llvm g++ gcc gperf libopencv-dev python3-typogrify + + - name: Generate app config files from templates + shell: bash + run: | + set -euxo pipefail + source scripts/env.sh + source scripts/app_config/templates/configure_template_files.sh + source scripts/app_config/configure_campfire.sh linux + scripts/app_config/platforms/linux/platform_config.sh + scripts/app_config/shared/link_assets.sh campfire linux + + - name: Set CI app version in pubspec + run: | + source scripts/env.sh + scripts/app_config/shared/update_version.sh -v "0.0.0" -b "${{ github.run_number }}" + + - name: Generate local template secrets + run: | + cd scripts + ./prebuild.sh + + - name: Build Linux crypto plugins + run: | + cd scripts/linux + ./build_all_campfire.sh + + - name: Resolve Dart dependencies + run: flutter pub get + + - name: Build Linux app + run: flutter build linux --release + + - name: Pack Linux artifact + run: | + tar -C build/linux/x64/release -czf campfire-linux.tar.gz bundle + + - name: Upload Linux artifact + uses: actions/upload-artifact@v4 + with: + name: campfire-linux + path: campfire-linux.tar.gz + if-no-files-found: error From b84714fde929175e494306e9c0438eca6795f318 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 14:34:43 +0400 Subject: [PATCH 10/22] update workflow for linux --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7322993068..3197d95085 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -263,6 +263,7 @@ jobs: run: | set -euxo pipefail source scripts/env.sh + export BUILD_ISAR_FROM_SOURCE=0 source scripts/app_config/templates/configure_template_files.sh source scripts/app_config/configure_campfire.sh linux scripts/app_config/platforms/linux/platform_config.sh From 51126cff1b7a637ea7763bea8b3f731e9db0d785 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 14:39:33 +0400 Subject: [PATCH 11/22] update ci for linux --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3197d95085..33d8bb7d84 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -256,7 +256,8 @@ jobs: meson python3-pip libgirepository1.0-dev valac xsltproc docbook-xsl \ libssl-dev curl unzip automake build-essential file git python3 \ libtool libtinfo6 libgit2-dev libncurses5-dev libncursesw5-dev \ - zlib1g-dev llvm g++ gcc gperf libopencv-dev python3-typogrify + zlib1g-dev llvm g++ gcc gperf libopencv-dev python3-typogrify \ + libgcrypt20-dev libsecret-1-dev - name: Generate app config files from templates shell: bash From 21eebb92f5e8b78e1726889d353081f41076ae74 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 14:57:13 +0400 Subject: [PATCH 12/22] remove docker credential requirement from test workflow --- .github/workflows/test.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 622387ba1e..edaf12020c 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -5,9 +5,6 @@ jobs: runs-on: ubuntu-24.04 container: image: stackwallet/stackwallet-ci:latest - credentials: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} steps: - name: Prepare repository uses: actions/checkout@v6 From 784eef1cd68b2fe8284dc1331e877a082da06522 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 15:58:43 +0400 Subject: [PATCH 13/22] fix Test action --- .github/workflows/test.yaml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index edaf12020c..93875f2be7 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -33,11 +33,24 @@ jobs: String getPluginVersion() => "stub-for-tests"; EOF - - name: Decode secrets + - name: Prepare external API keys for tests env: CHANGE_NOW: ${{ secrets.CHANGE_NOW }} run: | - echo "$CHANGE_NOW" | base64 --decode > lib/external_api_keys.dart + if [ -n "${CHANGE_NOW:-}" ]; then + echo "$CHANGE_NOW" | base64 --decode > lib/external_api_keys.dart + else + cat > lib/external_api_keys.dart << 'EOF' + const kChangeNowApiKey = ""; + const kSimpleSwapApiKey = ""; + const kNanswapApiKey = ""; + const kNanoSwapRpcApiKey = ""; + const kWizSwapApiKey = ""; + const kShopInBitAccessKey = ""; + const kShopInBitPartnerSecret = ""; + const kCakePayApiToken = ""; + EOF + fi - name: Ensure app config for tests run: bash scripts/ensure_test_app_config.sh From 9b3d1fe4519d83735d4a1ceca800575ab863eebc Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 16:08:09 +0400 Subject: [PATCH 14/22] fix Test action --- .github/workflows/test.yaml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 93875f2be7..121c2edde3 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -40,16 +40,16 @@ jobs: if [ -n "${CHANGE_NOW:-}" ]; then echo "$CHANGE_NOW" | base64 --decode > lib/external_api_keys.dart else - cat > lib/external_api_keys.dart << 'EOF' - const kChangeNowApiKey = ""; - const kSimpleSwapApiKey = ""; - const kNanswapApiKey = ""; - const kNanoSwapRpcApiKey = ""; - const kWizSwapApiKey = ""; - const kShopInBitAccessKey = ""; - const kShopInBitPartnerSecret = ""; - const kCakePayApiToken = ""; - EOF + printf '%s\n' \ + 'const kChangeNowApiKey = "";' \ + 'const kSimpleSwapApiKey = "";' \ + 'const kNanswapApiKey = "";' \ + 'const kNanoSwapRpcApiKey = "";' \ + 'const kWizSwapApiKey = "";' \ + 'const kShopInBitAccessKey = "";' \ + 'const kShopInBitPartnerSecret = "";' \ + 'const kCakePayApiToken = "";' \ + > lib/external_api_keys.dart fi - name: Ensure app config for tests From 1a425763080721b58b675c9239fbda0c28ebfd76 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 16:25:18 +0400 Subject: [PATCH 15/22] add Android and iOS builds --- .github/workflows/build.yml | 183 ++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 33d8bb7d84..93e961fec6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -301,3 +301,186 @@ jobs: name: campfire-linux path: campfire-linux.tar.gz if-no-files-found: error + + build-android: + name: Build Android artifact + runs-on: ubuntu-24.04 + timeout-minutes: 120 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.41.9" + channel: stable + cache: true + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install Rust toolchains required by project + run: rustup install 1.85.1 1.81.0 + + - name: Generate app config files from templates + shell: bash + run: | + set -euxo pipefail + source scripts/env.sh + export BUILD_ISAR_FROM_SOURCE=0 + source scripts/app_config/templates/configure_template_files.sh + source scripts/app_config/configure_campfire.sh android + scripts/app_config/platforms/android/platform_config.sh + scripts/app_config/shared/link_assets.sh campfire android + + - name: Set CI app version in pubspec + run: | + source scripts/env.sh + scripts/app_config/shared/update_version.sh -v "0.0.0" -b "${{ github.run_number }}" + + - name: Generate local template secrets + run: | + cd scripts + ./prebuild.sh + + - name: Build Android crypto plugins + run: | + cd scripts/android + ./build_all_campfire.sh + + - name: Resolve Dart dependencies + run: flutter pub get + + - name: Set up Android local.properties + run: | + cat > android/local.properties < android/keystore.jks + cat > android/key.properties < Date: Tue, 5 May 2026 16:28:16 +0400 Subject: [PATCH 16/22] fix for android build --- .github/workflows/build.yml | 38 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 93e961fec6..73771d2208 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -368,28 +368,26 @@ jobs: flutter.sdk=${FLUTTER_ROOT} EOF - - name: Set up signing (optional for release) - if: ${{ secrets.ANDROID_KEYSTORE_BASE64 != '' }} + - name: Build Android artifacts (release if secrets exist, else debug) env: KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} - run: | - echo "$KEYSTORE_BASE64" | base64 --decode > android/keystore.jks - cat > android/key.properties < android/keystore.jks + cat > android/key.properties < Date: Tue, 5 May 2026 16:32:31 +0400 Subject: [PATCH 17/22] fix for android build --- .github/workflows/build.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 73771d2208..b7ae0095c9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -363,10 +363,7 @@ jobs: - name: Set up Android local.properties run: | - cat > android/local.properties < android/local.properties - name: Build Android artifacts (release if secrets exist, else debug) env: @@ -377,12 +374,12 @@ jobs: run: | if [ -n "${KEYSTORE_BASE64:-}" ]; then echo "$KEYSTORE_BASE64" | base64 --decode > android/keystore.jks - cat > android/key.properties < android/key.properties flutter build apk --split-per-abi --release flutter build appbundle --release else From 5d0d02b03f828784ee748f22bf68a7cf784aa0b3 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 16:40:58 +0400 Subject: [PATCH 18/22] generate mobile app icons/assets before Android and iOS builds --- .github/workflows/build.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b7ae0095c9..b579f2bba7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,6 +48,11 @@ jobs: source scripts/env.sh scripts/app_config/shared/update_version.sh -v "0.0.0" -b "${{ github.run_number }}" + - name: Generate Android app icons and splash assets + run: | + source scripts/env.sh + scripts/app_config/shared/asset_generators.sh android + - name: Generate local template secrets run: | cd scripts @@ -275,6 +280,11 @@ jobs: source scripts/env.sh scripts/app_config/shared/update_version.sh -v "0.0.0" -b "${{ github.run_number }}" + - name: Generate iOS app icons and splash assets + run: | + source scripts/env.sh + scripts/app_config/shared/asset_generators.sh ios + - name: Generate local template secrets run: | cd scripts From 4f248d931524adcf7bc5b1776b51a92d85f97d77 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 16:49:54 +0400 Subject: [PATCH 19/22] fix for android build --- .github/workflows/build.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b579f2bba7..ea7ba135b4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,6 +53,18 @@ jobs: source scripts/env.sh scripts/app_config/shared/asset_generators.sh android + - name: Ensure Android launcher icons exist + shell: bash + run: | + set -euxo pipefail + ICON_SOURCE="asset_sources/icon/campfire/icon.png" + test -f "${ICON_SOURCE}" + for d in mipmap-mdpi mipmap-hdpi mipmap-xhdpi mipmap-xxhdpi mipmap-xxxhdpi; do + mkdir -p "android/app/src/main/res/${d}" + cp "${ICON_SOURCE}" "android/app/src/main/res/${d}/ic_launcher.png" + cp "${ICON_SOURCE}" "android/app/src/main/res/${d}/ic_launcher_round.png" + done + - name: Generate local template secrets run: | cd scripts From ff924b117c697e2c0dc1753d92aef5a10308a232 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 16:59:17 +0400 Subject: [PATCH 20/22] fix for android build --- .github/workflows/build.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ea7ba135b4..3e95b55e9b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -370,6 +370,23 @@ jobs: source scripts/env.sh scripts/app_config/shared/update_version.sh -v "0.0.0" -b "${{ github.run_number }}" + - name: Generate Android app icons and splash assets + run: | + source scripts/env.sh + scripts/app_config/shared/asset_generators.sh android + + - name: Ensure Android launcher icons exist + shell: bash + run: | + set -euxo pipefail + ICON_SOURCE="asset_sources/icon/campfire/icon.png" + test -f "${ICON_SOURCE}" + for d in mipmap-mdpi mipmap-hdpi mipmap-xhdpi mipmap-xxhdpi mipmap-xxxhdpi; do + mkdir -p "android/app/src/main/res/${d}" + cp "${ICON_SOURCE}" "android/app/src/main/res/${d}/ic_launcher.png" + cp "${ICON_SOURCE}" "android/app/src/main/res/${d}/ic_launcher_round.png" + done + - name: Generate local template secrets run: | cd scripts From 5c2182503d0044ab82c592b17c28bd27fd6ea1d1 Mon Sep 17 00:00:00 2001 From: Reuben Yap Date: Thu, 11 Jul 2024 10:35:28 +0800 Subject: [PATCH 21/22] Update README.md --- README.md | 39 ++++++++------------------------------- 1 file changed, 8 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 70bf3f836f..e0b5fd98f6 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,21 @@ -[![codecov](https://codecov.io/gh/cypherstack/stack_wallet/branch/main/graph/badge.svg?token=PM1N56UTEW)](https://codecov.io/gh/cypherstack/stack_wallet) -# Stack Wallet -Stack Wallet is a fully open source cryptocurrency wallet. With an easy to use user interface and quick and speedy transactions, this wallet is ideal for anyone no matter how much they know about the cryptocurrency space. The app is actively maintained to provide new user friendly features. +# Campfire Wallet +Campfire is a fuly open source Firo-only wallet. With full Spark support, an easy to use user interface and quick and speedy sync times, this wallet is the ideal first experience to Firo. - +Campfire is a fork of Stack wallet, a multi-currency wallet developed by [Cypher Stack](https://cypherstack.com/) that also has Firo support. + + ## Feature List Highlights include: -- 23 Different cryptocurrencies: - - [Bitcoin](https://bitcoin.org/en/) - - Bitcoin Frost - - [Bitcoin Cash](https://bch.info/en/) - - [Banano](https://banano.cc/) - - [Cardano](https://cardano.org/) - - [Dash](https://www.dash.org/) - - [Dogecoin](https://dogecoin.com/) - - [Epic Cash](https://linktr.ee/epiccash) - - [MimbleWimbleCoin](https://mwc.mw) - - [Ethereum](https://ethereum.org/en/) - - [Ecash](https://e.cash/) - - [Fact0rn](https://www.fact0rn.io/) - - [Firo](https://firo.org/) - - [Litecoin](https://litecoin.org/) - - [Monero](https://www.getmonero.org/) - - [Nano](https://nano.org/) - - [Namecoin](https://www.namecoin.org/) - - [Particl](https://particl.io/) - - [Peercoin](https://www.peercoin.net/) - - [Salvium](https://salvium.io/) - - [Solana](https://solana.com/) - - [Stellar](https://stellar.org/) - - [Tezos](https://tezos.com/) - - [Wownero](https://wownero.org/) - - [Xelis](https://xelis.org/) +- Full Lelantus Spark support +- EX address support +- Masternode collateral recognition - All private keys and seeds stay on device and are never shared. - Easy backup and restore feature to save all the information that's important to you. -- Trading cryptocurrencies through our partners. - Custom address book - Favorite wallets with fast syncing - Custom Nodes. From 61a872d69e5e8fdc7f2d849f954885a2cee23659 Mon Sep 17 00:00:00 2001 From: levoncrypto Date: Tue, 5 May 2026 11:59:13 +0400 Subject: [PATCH 22/22] Add build workflow for macOS fix for macos ci build update flutter version for macos build ci update macos ci Add build workflow for Windows update CMakeLists for build update workflow Add build workflow for Linux update workflow for linux update ci for linux remove docker credential requirement from test workflow fix Test action fix Test action add Android and iOS builds fix for android build fix for android build generate mobile app icons/assets before Android and iOS builds fix for android build fix for android build --- .github/workflows/build.yml | 520 ++++++++++++++++++++++++++++++++++ .github/workflows/test.yaml | 28 +- windows/runner/CMakeLists.txt | 4 + 3 files changed, 543 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..3e95b55e9b --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,520 @@ +name: Build + +on: + pull_request: + +permissions: + contents: read + +jobs: + build-macos: + name: Build macOS artifact + runs-on: macos-14 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.41.9" + channel: stable + cache: true + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install Rust toolchains required by project + run: rustup install 1.85.1 1.81.0 + + - name: Install macOS build dependencies + run: | + brew update + brew install automake cmake cocoapods libtool pkg-config + + - name: Generate app config files from templates + run: | + source scripts/env.sh + source scripts/app_config/templates/configure_template_files.sh + source scripts/app_config/configure_campfire.sh macos + scripts/app_config/platforms/macos/platform_config.sh + scripts/app_config/shared/link_assets.sh campfire macos + + - name: Set CI app version in pubspec + run: | + source scripts/env.sh + scripts/app_config/shared/update_version.sh -v "0.0.0" -b "${{ github.run_number }}" + + - name: Generate Android app icons and splash assets + run: | + source scripts/env.sh + scripts/app_config/shared/asset_generators.sh android + + - name: Ensure Android launcher icons exist + shell: bash + run: | + set -euxo pipefail + ICON_SOURCE="asset_sources/icon/campfire/icon.png" + test -f "${ICON_SOURCE}" + for d in mipmap-mdpi mipmap-hdpi mipmap-xhdpi mipmap-xxhdpi mipmap-xxxhdpi; do + mkdir -p "android/app/src/main/res/${d}" + cp "${ICON_SOURCE}" "android/app/src/main/res/${d}/ic_launcher.png" + cp "${ICON_SOURCE}" "android/app/src/main/res/${d}/ic_launcher_round.png" + done + + - name: Generate local template secrets + run: | + cd scripts + ./prebuild.sh + + - name: Build macOS crypto plugins + run: | + cd scripts/macos + ./build_all_campfire.sh + + - name: Resolve Dart and CocoaPods dependencies + run: | + flutter pub get + cd macos + pod install + + - name: Build macOS app + run: flutter build macos --release + + - name: Pack macOS artifact + run: | + APP_PATH="$(ls -d build/macos/Build/Products/Release/*.app | head -n 1)" + ditto -c -k --sequesterRsrc --keepParent "${APP_PATH}" campfire-macos-app.zip + + - name: Upload macOS artifact + uses: actions/upload-artifact@v4 + with: + name: campfire-macos + path: campfire-macos-app.zip + if-no-files-found: error + + build-windows: + name: Build Windows artifact + runs-on: windows-latest + timeout-minutes: 120 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + fetch-depth: 0 + + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.41.9" + channel: stable + cache: true + + - name: Init submodules + shell: bash + run: | + set -euxo pipefail + git submodule sync --recursive + git submodule update --init --recursive + + - name: Disable frostdart DLL install in CI + shell: bash + run: | + set -euxo pipefail + if [ -f crypto_plugins/frostdart/windows/CMakeLists.txt ]; then + sed -i '/frostdart\.dll/d' crypto_plugins/frostdart/windows/CMakeLists.txt + fi + + - name: Generate Campfire config + generated files + shell: bash + run: | + set -euxo pipefail + source scripts/env.sh + export BUILD_ISAR_FROM_SOURCE=0 + + (cd scripts && bash prebuild.sh) + source scripts/app_config/templates/configure_template_files.sh + bash scripts/app_config/shared/update_version.sh -v 0.0.0 -b "${{ github.run_number }}" + source scripts/app_config/configure_campfire.sh windows + bash scripts/app_config/platforms/windows/platform_config.sh + + - name: Prepare assets for Campfire + shell: pwsh + run: | + $dirs = @("default_themes","icon","lottie","in_app_logo_icons","svg") + foreach ($d in $dirs) { + $src = "asset_sources/$d/campfire" + $dst = "assets/$d" + if (!(Test-Path $src)) { throw "Missing source assets directory: $src" } + if (Test-Path $dst) { Remove-Item $dst -Recurse -Force } + Copy-Item $src $dst -Recurse -Force + } + + - name: Flutter clean + run: flutter clean + + - name: Flutter pub get + run: flutter pub get + + - name: Build secp256k1.dll (Release) + shell: pwsh + run: | + $ErrorActionPreference = "Stop" + + New-Item -ItemType Directory -Force -Path build | Out-Null + Push-Location build + + if (-not (Test-Path "secp256k1")) { + git clone https://github.com/bitcoin-core/secp256k1 + } + + Push-Location secp256k1 + git checkout 68b55209f1ba3e6c0417789598f5f75649e9c14c + git reset --hard + + cmake -G "Visual Studio 17 2022" -A x64 -S . -B build + cmake --build build --config Release + + $dll = Join-Path (Get-Location).Path "build\bin\Release\libsecp256k1-2.dll" + if (-not (Test-Path $dll)) { throw "Missing Release DLL: $dll" } + + $here = (Get-Location).Path + $repoBuildDir = Split-Path -Path $here -Parent + $repoRootDir = Split-Path -Path $repoBuildDir -Parent + + Copy-Item -LiteralPath $dll -Destination (Join-Path $repoBuildDir "secp256k1.dll") -Force + Copy-Item -LiteralPath $dll -Destination (Join-Path $repoRootDir "secp256k1.dll") -Force + + Pop-Location + Pop-Location + + if (-not (Test-Path "build/secp256k1.dll")) { throw "build/secp256k1.dll missing" } + if (-not (Test-Path "secp256k1.dll")) { throw "secp256k1.dll missing in repo root" } + + - name: Build Windows release + run: flutter build windows --release -v + + - name: Copy secp256k1.dll into final Release + shell: pwsh + run: | + $ErrorActionPreference = "Stop" + + $release = "build/windows/x64/runner/Release" + if (-not (Test-Path $release)) { $release = "build/windows/runner/Release" } + if (-not (Test-Path $release)) { throw "Release directory not found" } + + if (-not (Test-Path "build/secp256k1.dll")) { throw "build/secp256k1.dll not found" } + + Copy-Item "build/secp256k1.dll" (Join-Path $release "secp256k1.dll") -Force + + - name: Verify release + shell: pwsh + run: | + $ErrorActionPreference = "Stop" + + $release = "build/windows/x64/runner/Release" + if (-not (Test-Path $release)) { $release = "build/windows/runner/Release" } + if (-not (Test-Path $release)) { throw "Release directory missing" } + + if (!(Test-Path (Join-Path $release "secp256k1.dll"))) { + throw "secp256k1.dll missing in Release" + } + + Get-ChildItem $release -Force + + - name: Zip release + shell: pwsh + run: | + $release = "build/windows/x64/runner/Release" + if (-not (Test-Path $release)) { $release = "build/windows/runner/Release" } + Compress-Archive -Path (Join-Path $release "*") -DestinationPath campfire-windows.zip -Force + + - name: Upload Windows artifact + uses: actions/upload-artifact@v4 + with: + name: campfire-windows + path: campfire-windows.zip + if-no-files-found: error + + build-linux: + name: Build Linux artifact + runs-on: ubuntu-24.04 + timeout-minutes: 120 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.41.9" + channel: stable + cache: true + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install Rust toolchains required by project + run: rustup install 1.85.1 1.81.0 + + - name: Install Linux build dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev \ + meson python3-pip libgirepository1.0-dev valac xsltproc docbook-xsl \ + libssl-dev curl unzip automake build-essential file git python3 \ + libtool libtinfo6 libgit2-dev libncurses5-dev libncursesw5-dev \ + zlib1g-dev llvm g++ gcc gperf libopencv-dev python3-typogrify \ + libgcrypt20-dev libsecret-1-dev + + - name: Generate app config files from templates + shell: bash + run: | + set -euxo pipefail + source scripts/env.sh + export BUILD_ISAR_FROM_SOURCE=0 + source scripts/app_config/templates/configure_template_files.sh + source scripts/app_config/configure_campfire.sh linux + scripts/app_config/platforms/linux/platform_config.sh + scripts/app_config/shared/link_assets.sh campfire linux + + - name: Set CI app version in pubspec + run: | + source scripts/env.sh + scripts/app_config/shared/update_version.sh -v "0.0.0" -b "${{ github.run_number }}" + + - name: Generate iOS app icons and splash assets + run: | + source scripts/env.sh + scripts/app_config/shared/asset_generators.sh ios + + - name: Generate local template secrets + run: | + cd scripts + ./prebuild.sh + + - name: Build Linux crypto plugins + run: | + cd scripts/linux + ./build_all_campfire.sh + + - name: Resolve Dart dependencies + run: flutter pub get + + - name: Build Linux app + run: flutter build linux --release + + - name: Pack Linux artifact + run: | + tar -C build/linux/x64/release -czf campfire-linux.tar.gz bundle + + - name: Upload Linux artifact + uses: actions/upload-artifact@v4 + with: + name: campfire-linux + path: campfire-linux.tar.gz + if-no-files-found: error + + build-android: + name: Build Android artifact + runs-on: ubuntu-24.04 + timeout-minutes: 120 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.41.9" + channel: stable + cache: true + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install Rust toolchains required by project + run: rustup install 1.85.1 1.81.0 + + - name: Generate app config files from templates + shell: bash + run: | + set -euxo pipefail + source scripts/env.sh + export BUILD_ISAR_FROM_SOURCE=0 + source scripts/app_config/templates/configure_template_files.sh + source scripts/app_config/configure_campfire.sh android + scripts/app_config/platforms/android/platform_config.sh + scripts/app_config/shared/link_assets.sh campfire android + + - name: Set CI app version in pubspec + run: | + source scripts/env.sh + scripts/app_config/shared/update_version.sh -v "0.0.0" -b "${{ github.run_number }}" + + - name: Generate Android app icons and splash assets + run: | + source scripts/env.sh + scripts/app_config/shared/asset_generators.sh android + + - name: Ensure Android launcher icons exist + shell: bash + run: | + set -euxo pipefail + ICON_SOURCE="asset_sources/icon/campfire/icon.png" + test -f "${ICON_SOURCE}" + for d in mipmap-mdpi mipmap-hdpi mipmap-xhdpi mipmap-xxhdpi mipmap-xxxhdpi; do + mkdir -p "android/app/src/main/res/${d}" + cp "${ICON_SOURCE}" "android/app/src/main/res/${d}/ic_launcher.png" + cp "${ICON_SOURCE}" "android/app/src/main/res/${d}/ic_launcher_round.png" + done + + - name: Generate local template secrets + run: | + cd scripts + ./prebuild.sh + + - name: Build Android crypto plugins + run: | + cd scripts/android + ./build_all_campfire.sh + + - name: Resolve Dart dependencies + run: flutter pub get + + - name: Set up Android local.properties + run: | + printf 'sdk.dir=%s\nflutter.sdk=%s\n' "${ANDROID_SDK_ROOT}" "${FLUTTER_ROOT}" > android/local.properties + + - name: Build Android artifacts (release if secrets exist, else debug) + env: + KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} + ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }} + ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} + ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} + run: | + if [ -n "${KEYSTORE_BASE64:-}" ]; then + echo "$KEYSTORE_BASE64" | base64 --decode > android/keystore.jks + printf '%s\n' \ + 'storeFile=../keystore.jks' \ + "storePassword=${ANDROID_STORE_PASSWORD}" \ + "keyPassword=${ANDROID_KEY_PASSWORD}" \ + "keyAlias=${ANDROID_KEY_ALIAS}" \ + > android/key.properties + flutter build apk --split-per-abi --release + flutter build appbundle --release + else + flutter build apk --debug + fi + + - name: Collect Android artifacts + shell: bash + run: | + set -euxo pipefail + mkdir -p android-artifacts + cp -f build/app/outputs/flutter-apk/*.apk android-artifacts/ || true + cp -f build/app/outputs/bundle/release/*.aab android-artifacts/ || true + ls -la android-artifacts + + - name: Upload Android artifact + uses: actions/upload-artifact@v4 + with: + name: campfire-android + path: android-artifacts/ + if-no-files-found: error + + build-ios: + name: Build iOS artifact + runs-on: macos-14 + timeout-minutes: 120 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.41.9" + channel: stable + cache: true + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install Rust toolchains required by project + run: rustup install 1.85.1 1.81.0 + + - name: Install iOS build dependencies + run: | + brew update + brew install cocoapods + rustup target add aarch64-apple-ios x86_64-apple-ios + + - name: Generate app config files from templates + shell: bash + run: | + set -euxo pipefail + source scripts/env.sh + export BUILD_ISAR_FROM_SOURCE=0 + source scripts/app_config/templates/configure_template_files.sh + source scripts/app_config/configure_campfire.sh ios + scripts/app_config/platforms/ios/platform_config.sh + scripts/app_config/shared/link_assets.sh campfire ios + + - name: Set CI app version in pubspec + run: | + source scripts/env.sh + scripts/app_config/shared/update_version.sh -v "0.0.0" -b "${{ github.run_number }}" + + - name: Generate local template secrets + run: | + cd scripts + ./prebuild.sh + + - name: Build iOS crypto plugins + run: | + cd scripts/ios + ./build_all_campfire.sh + + - name: Resolve Dart dependencies and CocoaPods + run: | + flutter pub get + cd ios + pod install + + - name: Build iOS app (no codesign) + run: flutter build ios --release --no-codesign + + - name: Package iOS artifact + run: | + mkdir Payload + cp -r build/ios/iphoneos/Runner.app Payload/ + zip -r campfire-ios.ipa Payload/ + + - name: Upload iOS artifact + uses: actions/upload-artifact@v4 + with: + name: campfire-ios + path: campfire-ios.ipa + if-no-files-found: error diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 585e2d9a7a..121c2edde3 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -3,14 +3,8 @@ on: [pull_request] jobs: test: runs-on: ubuntu-24.04 - permissions: - contents: read - packages: read container: - image: ghcr.io/${{ github.repository_owner }}/stackwallet-ci:test - credentials: - username: ${{ github.actor }} - password: ${{ github.token }} + image: stackwallet/stackwallet-ci:latest steps: - name: Prepare repository uses: actions/checkout@v6 @@ -39,11 +33,24 @@ jobs: String getPluginVersion() => "stub-for-tests"; EOF - - name: Decode secrets + - name: Prepare external API keys for tests env: CHANGE_NOW: ${{ secrets.CHANGE_NOW }} run: | - echo "$CHANGE_NOW" | base64 --decode > lib/external_api_keys.dart + if [ -n "${CHANGE_NOW:-}" ]; then + echo "$CHANGE_NOW" | base64 --decode > lib/external_api_keys.dart + else + printf '%s\n' \ + 'const kChangeNowApiKey = "";' \ + 'const kSimpleSwapApiKey = "";' \ + 'const kNanswapApiKey = "";' \ + 'const kNanoSwapRpcApiKey = "";' \ + 'const kWizSwapApiKey = "";' \ + 'const kShopInBitAccessKey = "";' \ + 'const kShopInBitPartnerSecret = "";' \ + 'const kCakePayApiToken = "";' \ + > lib/external_api_keys.dart + fi - name: Ensure app config for tests run: bash scripts/ensure_test_app_config.sh @@ -52,6 +59,9 @@ jobs: run: bash prebuild.sh working-directory: scripts + - name: Regenerate mocks + run: dart run build_runner build --delete-conflicting-outputs + - name: Check formatting of changed files run: | if [ "${{ github.event_name }}" = "pull_request" ]; then diff --git a/windows/runner/CMakeLists.txt b/windows/runner/CMakeLists.txt index 17411a8ab8..9be59393bc 100644 --- a/windows/runner/CMakeLists.txt +++ b/windows/runner/CMakeLists.txt @@ -1,6 +1,10 @@ cmake_minimum_required(VERSION 3.14) project(runner LANGUAGES CXX) +if(NOT DEFINED BINARY_NAME OR "${BINARY_NAME}" STREQUAL "") + set(BINARY_NAME "campfire") +endif() + # Define the application target. To change its name, change BINARY_NAME in the # top-level CMakeLists.txt, not the value here, or `flutter run` will no longer # work.