Skip to content

Add Stable app project to workspace#6974

Merged
ant013 merged 2 commits into
version/0.49from
stable-app
May 11, 2026
Merged

Add Stable app project to workspace#6974
ant013 merged 2 commits into
version/0.49from
stable-app

Conversation

@ealymbaev

@ealymbaev ealymbaev commented May 11, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features

    • Added a Stable app variant and automated deployment workflows for TestFlight and Firebase/TestFlight builds.
    • Deployment triggers narrowed to relevant variant paths to reduce unnecessary runs.
  • Chores

    • Workspace updated to support multiple app variants.
    • Build automation refactored to be parameterized across targets (more flexible xcconfig/fastlane handling).
    • Removed several Stable-specific signing/iCloud entitlements and config entries.

Review Change Stack

@coderabbitai

coderabbitai Bot commented May 11, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Adds a new Stable iOS app variant and its config/templates, removes legacy Stable config from the Unstoppable project, parameterizes Fastlane for multi-variant builds, updates the workspace to include Stable, and adds CI/CD workflows for Stable deployments and updated Unstoppable deploy triggers.

Changes

Stable App Variant & Build System Refactor

Layer / File(s) Summary
Stable App Entry Point & UI
Stable/Stable/App/StableApp.swift, Stable/Stable/ContentView.swift, Stable/AppTests/AppTests.swift
Introduces the Stable app as a new SwiftUI @main application with a ContentView displaying a globe icon and "Hello, world!" text, plus a placeholder test using the Testing framework.
Stable App Configuration Template
Stable/Stable/Configuration/Config.template.xcconfig
Defines xcconfig placeholders for Stable app credentials and settings: EVM explorer API keys, Gasfree/provider/Jupiter/OneInch/Polygon keys, Twitter bearer token, WalletConnect project ID, Mayay/Thorchain affiliate identifiers, and DEFAULT_WORDS.
Remove Unstoppable Stable-Variant Configs
Unstoppable/Unstoppable/Configuration/Stable/*.entitlements, Unstoppable/Unstoppable/Configuration/Stable/*.xcconfig
Deletes all legacy Stable app variant configurations from the Unstoppable project: entitlements and xcconfig for the app, widget, and intent targets (both Dev and Prod variants).
Parameterize Fastlane Build System
fastlane/Fastfile
Refactors build helpers and lanes to accept xcconfig and xcodeproj paths at call time: update_xcconfig, apply_xcconfig, and prepare_environment now take path parameters; build_and_sign accepts xcodeproj and xcconfig_path; iCloud environment is now optional; all four lanes (dev, release, dev_stable, release_stable) pass variant-specific parameters.
Add Stable to Workspace
Wallet.xcworkspace/contents.xcworkspacedata
Adds the Stable project to the workspace as group:Stable/Stable.xcodeproj and changes the Unstoppable reference from container: to group: path.
Add CI/CD Workflows for Stable
.github/workflows/deploy_dev.yml, .github/workflows/deploy_stable_appstore.yml, .github/workflows/deploy_stable_dev.yml, .github/workflows/deploy_appstore.yml
Restricts the existing Unstoppable dev deploy workflow to run only on Unstoppable/** and packages/** changes; adds new TestFlight and Firebase deployment workflows for Stable with macOS runners, Xcode/Ruby/Rust setup, Fastlane lane invocations, secrets wiring, and dSYM artifact uploads.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Add Stable app project to workspace' directly and accurately describes the main change—adding the Stable project to the workspace, as evidenced by the workspace data modifications and creation of a new Stable app directory structure.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch stable-app

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (2)
Stable/AppTests/AppTests.swift (1)

3-7: ⚡ Quick win

Placeholder test provides no value.

The test file contains only a generated placeholder with no assertions. Consider either removing this file or adding meaningful tests for the Stable app.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Stable/AppTests/AppTests.swift` around lines 3 - 7, The file contains only a
placeholder test (struct AppTests / func example) with no assertions; either
remove the file or replace the placeholder with real test cases: implement one
or more `@Test` async throws functions inside struct AppTests that exercise your
Stable app logic and include concrete assertions (e.g., use the project's test
helpers like `#expect`(...) or XCTest assertions) to verify expected behavior, and
ensure the test harness compiles by importing required test modules and calling
the APIs under test from within those test functions.
.github/workflows/deploy_stable_dev.yml (1)

3-9: 💤 Low value

Confirm paths filter aligns with the new Stable project layout.

The trigger restricts pushes to changes under Stable/** or packages/**. Given this PR also touches fastlane/Fastfile, workspace files, and shared xcconfig/build settings, changes to those (which directly affect the Stable build) won’t trigger this workflow. If that’s intentional (rely on workflow_dispatch for those), ignore — otherwise consider extending the path filter (e.g. fastlane/**, *.xcworkspace/**, top-level config files) so CI runs when the build pipeline itself changes.

Please confirm whether the new Stable target sources are fully self-contained under Stable/ and packages/, or whether shared files outside those paths also need to trigger CI.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/deploy_stable_dev.yml around lines 3 - 9, The workflow's
push trigger limits runs to changes under paths 'Stable/**' and 'packages/**' so
edits to shared build scripts (e.g., fastlane/Fastfile), workspace files, or
top-level configs won't trigger CI; update the push.paths list in the
deploy_stable_dev.yml workflow to include the other relevant paths (for example
add fastlane/**, *.xcworkspace/**, fastlane/Fastfile, top-level xcconfig/build
files or any other shared config files) or remove the paths filter if you want
all pushes to target/version/* to run, and confirm that Stable sources are
indeed self-contained in 'Stable/' and 'packages/' before narrowing the filter.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/deploy_stable_appstore.yml:
- Around line 28-31: The "Setup Rust and Cargo" step currently uses the
deprecated actions-rs/toolchain@v1 runner; replace the uses entry with the
maintained dtolnay/rust-toolchain action (e.g.
dtolnay/rust-toolchain@<latest-tag>) and keep the toolchain input (toolchain:
stable) so the step still installs the stable Rust toolchain; update any
inputs/keys to match dtolnay/rust-toolchain's expected fields and confirm the
step name "Setup Rust and Cargo" remains consistent.

In @.github/workflows/deploy_stable_dev.yml:
- Line 13: The workflow's visible names are inconsistent: the workflow title
"Deploy Stable Dev to AppCenter", the Fastlane step that uploads to AppCenter,
and the job name "Build and Deploy to Firebase" contradict each other; decide
which target the dev_stable Fastlane lane actually deploys to and then make all
labels consistent by renaming the workflow "name:", the job name (currently
"Build and Deploy to Firebase"), and the Fastlane step description to the chosen
target (e.g., "Deploy Stable Dev to AppCenter" if dev_stable uploads to
AppCenter); also update any status-check/context names that reflect the job name
so the Actions UI and PR checks match the real deployment target.
- Around line 31-34: Replace the deprecated actions-rs/toolchain@v1 step named
"Setup Rust and Cargo" with the maintained dtolnay/rust-toolchain action and
configure the toolchain (stable) and targets via that action's inputs; update
the uses value to dtolnay/rust-toolchain and add a targets: list for the iOS
targets there, then remove the separate "Add iOS targets to Rust" step since
targets are installed by the rust-toolchain action.

In `@Stable/Stable/Configuration/Config.template.xcconfig`:
- Line 37: DEFAULT_WORDS is a build-time variable substituted into Info.plist
(referenced as ${DEFAULT_WORDS}) and must not be used to store secrets; remove
DEFAULT_WORDS from Config.template.xcconfig (or clear any usage) and eliminate
the ${DEFAULT_WORDS} entry from Info.plist, or ensure any mnemonic/seed/private
keys are instead stored only in Keychain using
kSecAttrAccessibleWhenUnlockedThisDeviceOnly per CRYPTO_GUIDELINES.md; search
for DEFAULT_WORDS, Info.plist entries, and any code paths that read that plist
value and update them to use Keychain APIs instead.

---

Nitpick comments:
In @.github/workflows/deploy_stable_dev.yml:
- Around line 3-9: The workflow's push trigger limits runs to changes under
paths 'Stable/**' and 'packages/**' so edits to shared build scripts (e.g.,
fastlane/Fastfile), workspace files, or top-level configs won't trigger CI;
update the push.paths list in the deploy_stable_dev.yml workflow to include the
other relevant paths (for example add fastlane/**, *.xcworkspace/**,
fastlane/Fastfile, top-level xcconfig/build files or any other shared config
files) or remove the paths filter if you want all pushes to target/version/* to
run, and confirm that Stable sources are indeed self-contained in 'Stable/' and
'packages/' before narrowing the filter.

In `@Stable/AppTests/AppTests.swift`:
- Around line 3-7: The file contains only a placeholder test (struct AppTests /
func example) with no assertions; either remove the file or replace the
placeholder with real test cases: implement one or more `@Test` async throws
functions inside struct AppTests that exercise your Stable app logic and include
concrete assertions (e.g., use the project's test helpers like `#expect`(...) or
XCTest assertions) to verify expected behavior, and ensure the test harness
compiles by importing required test modules and calling the APIs under test from
within those test functions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 120efa10-ec71-494a-977a-cfb245ac8ad1

📥 Commits

Reviewing files that changed from the base of the PR and between 30b537e and afbb8d3.

⛔ Files ignored due to path filters (12)
  • Stable/Stable.xcodeproj/project.pbxproj is excluded by !**/*.pbxproj
  • Stable/Stable.xcodeproj/xcshareddata/xcschemes/Stable-Dev.xcscheme is excluded by !**/*.xcscheme
  • Stable/Stable.xcodeproj/xcshareddata/xcschemes/Stable-Prod.xcscheme is excluded by !**/*.xcscheme
  • Stable/Stable/Resources/Assets.xcassets/AccentColor.colorset/Contents.json is excluded by !**/*.xcassets/**
  • Stable/Stable/Resources/Assets.xcassets/AppIcon-Dev.appiconset/Contents.json is excluded by !**/*.xcassets/**
  • Stable/Stable/Resources/Assets.xcassets/AppIcon-Dev.appiconset/StableAppDev.png is excluded by !**/*.png, !**/*.xcassets/**
  • Stable/Stable/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json is excluded by !**/*.xcassets/**
  • Stable/Stable/Resources/Assets.xcassets/AppIcon.appiconset/StableApp.png is excluded by !**/*.png, !**/*.xcassets/**
  • Stable/Stable/Resources/Assets.xcassets/Contents.json is excluded by !**/*.xcassets/**
  • Unstoppable/Unstoppable.xcodeproj/project.pbxproj is excluded by !**/*.pbxproj
  • Unstoppable/Unstoppable.xcodeproj/xcshareddata/xcschemes/Unstoppable-Dev.xcscheme is excluded by !**/*.xcscheme
  • Unstoppable/Unstoppable.xcodeproj/xcshareddata/xcschemes/Unstoppable-Prod.xcscheme is excluded by !**/*.xcscheme
📒 Files selected for processing (19)
  • .github/workflows/deploy_dev.yml
  • .github/workflows/deploy_stable_appstore.yml
  • .github/workflows/deploy_stable_dev.yml
  • Stable/AppTests/AppTests.swift
  • Stable/Stable/App/StableApp.swift
  • Stable/Stable/Configuration/Config.template.xcconfig
  • Stable/Stable/ContentView.swift
  • Unstoppable/Unstoppable/Configuration/Stable/App-Stable-Dev.entitlements
  • Unstoppable/Unstoppable/Configuration/Stable/App-Stable-Dev.xcconfig
  • Unstoppable/Unstoppable/Configuration/Stable/App-Stable-Prod.entitlements
  • Unstoppable/Unstoppable/Configuration/Stable/App-Stable-Prod.xcconfig
  • Unstoppable/Unstoppable/Configuration/Stable/Intent-Stable-Dev.xcconfig
  • Unstoppable/Unstoppable/Configuration/Stable/Intent-Stable-Prod.xcconfig
  • Unstoppable/Unstoppable/Configuration/Stable/Widget-Stable-Dev.entitlements
  • Unstoppable/Unstoppable/Configuration/Stable/Widget-Stable-Dev.xcconfig
  • Unstoppable/Unstoppable/Configuration/Stable/Widget-Stable-Prod.entitlements
  • Unstoppable/Unstoppable/Configuration/Stable/Widget-Stable-Prod.xcconfig
  • Wallet.xcworkspace/contents.xcworkspacedata
  • fastlane/Fastfile
💤 Files with no reviewable changes (10)
  • Unstoppable/Unstoppable/Configuration/Stable/Widget-Stable-Prod.entitlements
  • Unstoppable/Unstoppable/Configuration/Stable/Intent-Stable-Dev.xcconfig
  • Unstoppable/Unstoppable/Configuration/Stable/Widget-Stable-Dev.entitlements
  • Unstoppable/Unstoppable/Configuration/Stable/Widget-Stable-Prod.xcconfig
  • Unstoppable/Unstoppable/Configuration/Stable/App-Stable-Dev.entitlements
  • Unstoppable/Unstoppable/Configuration/Stable/App-Stable-Dev.xcconfig
  • Unstoppable/Unstoppable/Configuration/Stable/Intent-Stable-Prod.xcconfig
  • Unstoppable/Unstoppable/Configuration/Stable/App-Stable-Prod.entitlements
  • Unstoppable/Unstoppable/Configuration/Stable/App-Stable-Prod.xcconfig
  • Unstoppable/Unstoppable/Configuration/Stable/Widget-Stable-Dev.xcconfig

Comment thread .github/workflows/deploy_stable_appstore.yml Outdated
Comment thread .github/workflows/deploy_stable_dev.yml
Comment thread .github/workflows/deploy_stable_dev.yml Outdated
Comment thread Stable/Stable/Configuration/Config.template.xcconfig
ant013
ant013 previously approved these changes May 11, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/deploy_dev.yml (1)

40-40: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Update the step description to reflect Firebase deployment.

The step description still references "AppCenter" but the workflow name and actual deployment target is Firebase. Update the description for consistency.

📝 Proposed fix
-      - name: Run Fastlane (build, upload to AppCenter)
+      - name: Run Fastlane (build, upload to Firebase)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/deploy_dev.yml at line 40, Update the GitHub Actions step
name string "Run Fastlane (build, upload to AppCenter)" to correctly reflect the
Firebase target (e.g., "Run Fastlane (build, deploy to Firebase)" or similar) so
the workflow description matches the actual deployment; edit the step name in
the deploy_dev.yml where that exact string appears.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In @.github/workflows/deploy_dev.yml:
- Line 40: Update the GitHub Actions step name string "Run Fastlane (build,
upload to AppCenter)" to correctly reflect the Firebase target (e.g., "Run
Fastlane (build, deploy to Firebase)" or similar) so the workflow description
matches the actual deployment; edit the step name in the deploy_dev.yml where
that exact string appears.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 84d292ec-f3eb-4c00-917c-aeca558eb570

📥 Commits

Reviewing files that changed from the base of the PR and between afbb8d3 and 2284b67.

📒 Files selected for processing (4)
  • .github/workflows/deploy_appstore.yml
  • .github/workflows/deploy_dev.yml
  • .github/workflows/deploy_stable_appstore.yml
  • .github/workflows/deploy_stable_dev.yml
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/workflows/deploy_stable_appstore.yml
  • .github/workflows/deploy_stable_dev.yml

@ant013 ant013 merged commit 6c0f48c into version/0.49 May 11, 2026
2 checks passed
@ant013 ant013 deleted the stable-app branch May 11, 2026 13:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants