Skip to content

Commit 943d7bc

Browse files
Add iOS universal wallet readiness gates
1 parent 947b154 commit 943d7bc

169 files changed

Lines changed: 29114 additions & 180 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Owners must have write access to this repository.
2+
3+
* @soramitsu/fearless
4+
5+
/.github/ @soramitsu/devops-team
6+
/AGENTS.md @soramitsu/fearless @soramitsu/ios-developers
7+
/CONTRIBUTING.md @soramitsu/fearless @soramitsu/ios-developers
8+
/README.md @soramitsu/fearless @soramitsu/ios-developers
9+
/docs/release-checklist.md @soramitsu/fearless @soramitsu/devops-team
10+
/docs/rollback-checklist.md @soramitsu/fearless @soramitsu/devops-team
11+
/scripts/audit-public-artifacts.sh @soramitsu/fearless @soramitsu/ios-developers @soramitsu/security
12+
13+
/fearless.xcodeproj/ @soramitsu/fearless @soramitsu/ios-developers
14+
/fearless.xcworkspace/ @soramitsu/fearless @soramitsu/ios-developers
15+
/fearless/ @soramitsu/fearless @soramitsu/ios-developers
16+
/fearless/Common/Model/ @soramitsu/fearless @soramitsu/ios-developers @soramitsu/security
17+
/fearless/Common/Keys/ @soramitsu/fearless @soramitsu/ios-developers @soramitsu/security
18+
/fearless/Common/Network/Wallet/ @soramitsu/fearless @soramitsu/ios-developers @soramitsu/security
19+
/fearless/CoreLayer/CoreComponents/Storage/Keys/ @soramitsu/fearless @soramitsu/ios-developers @soramitsu/security
20+
/**/*Key* @soramitsu/fearless @soramitsu/ios-developers @soramitsu/security
21+
/**/*Keychain* @soramitsu/fearless @soramitsu/ios-developers @soramitsu/security
22+
/**/*Keystore* @soramitsu/fearless @soramitsu/ios-developers @soramitsu/security
23+
/**/*Signer* @soramitsu/fearless @soramitsu/ios-developers @soramitsu/security

.github/pull_request_template.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
## Summary
2+
3+
Describe the change and why it is needed.
4+
5+
## Related Issue
6+
7+
Closes #<issue-number> (or) Relates to #<issue-number>
8+
9+
## Target Branch
10+
11+
- [ ] This PR targets `develop`
12+
- [ ] This PR targets `master` and is a release or hotfix PR
13+
14+
## Type of Change
15+
16+
- [ ] feat (new feature)
17+
- [ ] fix (bug fix)
18+
- [ ] refactor (no functional change)
19+
- [ ] chore/build (tooling, CI, deps)
20+
- [ ] docs
21+
22+
## Screenshots / Videos
23+
24+
If UI changes, include before/after.
25+
26+
## Test Plan
27+
28+
Commands run locally:
29+
30+
```
31+
xcodebuild -workspace fearless.xcworkspace -scheme fearless.tests test
32+
```
33+
34+
Additional checks and scenarios covered:
35+
-
36+
37+
## Risks & Rollout
38+
39+
Potential impact, migrations, or config/secrets required.
40+
41+
## Checklist
42+
43+
- [ ] Linked an issue and added a clear description
44+
- [ ] Added/updated tests for changed code where applicable
45+
- [ ] Updated docs when behavior or commands changed
46+
- [ ] Ran simulator build/tests locally or verified CI
47+
- [ ] No secrets or local environment files committed
48+
- [ ] `./scripts/audit-public-artifacts.sh` passes when public artifacts or env defaults change
49+
- [ ] No direct-to-`master` workflow is introduced

.github/workflows/branch-flow.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Branch Flow
2+
3+
on:
4+
pull_request:
5+
6+
permissions:
7+
contents: read
8+
9+
jobs:
10+
validate:
11+
runs-on: ubuntu-latest
12+
timeout-minutes: 5
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v4
16+
17+
- name: Branch flow audit self-test
18+
run: bash scripts/test-branch-flow-audit.sh
19+
20+
- name: Branch flow drift audit
21+
run: bash scripts/audit-branch-flow.sh
22+
23+
- name: Validate PR target
24+
env:
25+
BASE_BRANCH: ${{ github.base_ref }}
26+
HEAD_BRANCH: ${{ github.head_ref }}
27+
run: |
28+
set -euo pipefail
29+
30+
echo "PR branch flow: ${HEAD_BRANCH} -> ${BASE_BRANCH}"
31+
32+
if [[ "$BASE_BRANCH" == "develop" ]]; then
33+
if [[ "$HEAD_BRANCH" == "master" ]]; then
34+
echo "::error::Do not open normal work from master to develop. Use a feature/fix/chore/refactor, release, or hotfix branch."
35+
exit 1
36+
fi
37+
38+
exit 0
39+
fi
40+
41+
if [[ "$BASE_BRANCH" == "master" ]]; then
42+
if [[ "$HEAD_BRANCH" == "develop" || "$HEAD_BRANCH" == release/* || "$HEAD_BRANCH" == hotfix/* ]]; then
43+
exit 0
44+
fi
45+
46+
echo "::error::master is releasable. Only develop, release/*, or hotfix/* branches may target master."
47+
exit 1
48+
fi
49+
50+
echo "::error::Pull requests must target develop for normal work or master for release/hotfix promotion."
51+
exit 1

.github/workflows/codecov.yml

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
name: Codecov Fearless
22

33
on:
4+
push:
5+
branches:
6+
- develop
7+
- master
48
pull_request:
59
branches:
610
- develop
11+
- master
712

813
jobs:
914
build:
@@ -12,6 +17,49 @@ jobs:
1217
- name: Checkout
1318
uses: actions/checkout@v4
1419

20+
- name: Branch flow audit
21+
run: |
22+
bash ./scripts/audit-branch-flow.sh
23+
bash ./scripts/test-branch-flow-audit.sh
24+
25+
- name: Audit public artifacts
26+
run: ./scripts/audit-public-artifacts.sh
27+
28+
- name: TODO debt audit
29+
run: |
30+
bash ./scripts/test-todo-debt-audit.sh
31+
bash ./scripts/audit-todo-debt.sh
32+
33+
- name: Iroha mobile SDK release asset contract
34+
env:
35+
GH_TOKEN: ${{ github.token }}
36+
IROHA_MOBILE_SDK_RELEASE_TAG: ${{ vars.IROHA_MOBILE_SDK_RELEASE_TAG }}
37+
IROHA_MOBILE_SDK_RELEASE_REPO: ${{ vars.IROHA_MOBILE_SDK_RELEASE_REPO }}
38+
run: |
39+
bash ./scripts/check-iroha-mobile-sdk-release-assets.sh --self-test
40+
if [[ -n "${IROHA_MOBILE_SDK_RELEASE_TAG:-}" ]]; then
41+
bash ./scripts/check-iroha-mobile-sdk-release-assets.sh --download --tag "$IROHA_MOBILE_SDK_RELEASE_TAG"
42+
else
43+
echo "IROHA_MOBILE_SDK_RELEASE_TAG is not configured; real release asset validation skipped."
44+
fi
45+
46+
- name: Private overlay audit self-test
47+
run: bash ./scripts/test-private-overlay-boundary.sh
48+
49+
- name: Shared-features delta report
50+
run: |
51+
bash ./scripts/deps/test-shared-features-delta-report.sh
52+
bash ./scripts/deps/audit-shared-features-delta-report.sh "$(pwd)" --write-report build/reports/shared-features-delta-report.json
53+
54+
- name: Upload shared-features delta report
55+
if: always()
56+
uses: actions/upload-artifact@v4
57+
with:
58+
name: shared-features-delta-report
59+
path: build/reports/shared-features-delta-report.json
60+
if-no-files-found: ignore
61+
retention-days: 14
62+
1563
- name: Configure GitHub auth for private pods (optional)
1664
env:
1765
GH_READ_TOKEN: ${{ secrets.GH_READ_TOKEN }}
@@ -22,7 +70,7 @@ jobs:
2270
else
2371
echo "GH_READ_TOKEN not set; proceeding without GitHub auth"
2472
fi
25-
73+
2674
- name: Bootstrap Dependencies
2775
run: |
2876
bash scripts/ci/bootstrap.sh

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ Carthage/Build
4343
#fastlane/screenshots
4444
#fastlane/test_output
4545
fastlane/
46+
.bundle/
47+
vendor/bundle/
4648
# Code Injection
4749
#
4850
# After new code Injection tools there's a generated folder /iOSInjectionProject

AGENTS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ CI note
5959
- Do not alter seed handling, signing, or cryptography without maintainer approval.
6060
- Runtime registries and chain/type sources must be aligned with the current Polkadot SDK release; coordinate updates with maintainers.
6161
- Use `*.xcconfig` and environment variables for private values; avoid hardcoding secrets in `Info.plist`.
62+
- Keep partner identifiers and buy-provider keys in environment variables or generated CI keys, not committed Swift source.
6263

6364
## Dependencies & Versioning
6465
- Prefer conservative upgrades (patch/minor). Pin major bumps to separate PRs with clear testing notes.
@@ -149,6 +150,7 @@ The project mixes CocoaPods and Swift Package Manager. Follow these steps in ord
149150
- Environment variables:
150151
- `GH_PAT_READ` (optional): GitHub PAT for private pods (`FearlessKeys`).
151152
- `DEVELOPER_DIR` (optional): Jenkinsfile auto‑pins to Xcode 15.x if present for SPM stability; otherwise default Xcode is used.
153+
- `MOONPAY_PUBLIC_KEY`: Moonpay partner public key generated into CI keys for trusted builds.
152154
- Private keys in PRs:
153155
- PR builds do NOT require private keys. The Jenkinsfile detects PR context (`CHANGE_ID`) and temporarily comments out the `pod 'FearlessKeys'` line before `pod install`, then restores the file. This prevents private repo access and allows PRs to build without secrets.
154156
- Trusted branches (develop/master/release): Jenkins sets `INCLUDE_FEARLESS_KEYS=1` and, if `GH_PAT_READ` is present, rewrites GitHub URLs to use the token so `pod install` can fetch `FearlessKeys`.

CONTRIBUTING.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,25 @@ If you think you miss some functionality on our application, please open issue o
2727
* (OPTIONAL) If possible, provide complete description of functionality you suggest
2828
* (OPTIONAL) Provide your telegram username, and be sure to join [Our Community Channel](https://t.me/fearlesshappiness) on Telegram, so our team can get in touch with you to retrieve more information about your vision
2929

30-
Even if you provide mockups, please understand that our design team will review it and might implement this in very different way.
30+
Even if you provide mockups, please understand that our design team will review it and might implement this in very different way.
31+
32+
### Git flow
33+
34+
All normal work starts from `develop` and is submitted back to `develop`.
35+
Use short-lived branches named `feature/<ticket>-<slug>`, `fix/<ticket>-<slug>`,
36+
`chore/<slug>`, or `refactor/<slug>`.
37+
38+
`master` is the releasable branch. Do not target `master` except for release
39+
pull requests from `develop` or urgent `hotfix/<version-or-slug>` branches.
40+
Every commit on `master` must be safe to release, and release tags must point at
41+
commits already merged to `master`.
42+
43+
Feature PRs are squash-merged after review and green CI. Release PRs to
44+
`master` use merge commits so the release boundary remains visible.
45+
46+
The `Branch Flow` GitHub Actions workflow validates PR targets automatically:
47+
normal work must target `develop`, while `master` accepts only `develop`,
48+
`release/*`, or `hotfix/*` branches.
3149

3250
### 💻 Opening Pull Requests
3351

@@ -36,10 +54,10 @@ If you would like to help us by contributing writing the code, please follow nex
3654
* Always create and issue prior to opening Pull Request (hereinafter the PR), or your PR less likely to be reviewed
3755
* Remember, that in that case you are required to provide full description for you feature in created issue, otherwise it would be hard for us to understand what you're trying to add to our codebase
3856
* Follow the coding standards guidelines (TO BE PROVIDED LATER), or you will be asked to make changes to follow them
39-
* Please avoid huge PRs, and if your contribution really requires lots of files, please make a base branch with series of small PRs on your fork, and then provide link to those PRs in your big one PR in our repository
57+
* Please avoid huge PRs, and if your contribution really requires lots of files, please make a base branch with series of small PRs on your fork, and then provide link to those PRs in your big one PR in our repository
4058
* Provide steps for QA engineer to test your functionality (they should cover requirements from your issue)
4159

42-
Even if you provide mockups, please understand that our design team will review it and might implement this in very different way.
60+
Even if you provide mockups, please understand that our design team will review it and might implement this in very different way.
4361

4462
### Telegram links
4563

Gemfile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
source "https://rubygems.org"
2+
3+
gem "cocoapods", "1.16.2"
4+
5+
# System Ruby on current macOS images can still be 2.6. Pin transitive gems
6+
# whose latest releases now require newer Ruby versions so bootstrap remains
7+
# reproducible for public checkouts.
8+
gem "drb", "2.0.6"
9+
gem "ffi", "1.15.5"
10+
gem "securerandom", "0.3.2"

Gemfile.lock

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
GEM
2+
remote: https://rubygems.org/
3+
specs:
4+
CFPropertyList (3.0.9)
5+
activesupport (6.1.7.10)
6+
concurrent-ruby (~> 1.0, >= 1.0.2)
7+
i18n (>= 1.6, < 2)
8+
minitest (>= 5.1)
9+
tzinfo (~> 2.0)
10+
zeitwerk (~> 2.3)
11+
addressable (2.9.0)
12+
public_suffix (>= 2.0.2, < 8.0)
13+
algoliasearch (1.27.5)
14+
httpclient (~> 2.8, >= 2.8.3)
15+
json (>= 1.5.1)
16+
atomos (0.1.3)
17+
claide (1.1.0)
18+
cocoapods (1.16.2)
19+
addressable (~> 2.8)
20+
claide (>= 1.0.2, < 2.0)
21+
cocoapods-core (= 1.16.2)
22+
cocoapods-deintegrate (>= 1.0.3, < 2.0)
23+
cocoapods-downloader (>= 2.1, < 3.0)
24+
cocoapods-plugins (>= 1.0.0, < 2.0)
25+
cocoapods-search (>= 1.0.0, < 2.0)
26+
cocoapods-trunk (>= 1.6.0, < 2.0)
27+
cocoapods-try (>= 1.1.0, < 2.0)
28+
colored2 (~> 3.1)
29+
escape (~> 0.0.4)
30+
fourflusher (>= 2.3.0, < 3.0)
31+
gh_inspector (~> 1.0)
32+
molinillo (~> 0.8.0)
33+
nap (~> 1.0)
34+
ruby-macho (>= 2.3.0, < 3.0)
35+
xcodeproj (>= 1.27.0, < 2.0)
36+
cocoapods-core (1.16.2)
37+
activesupport (>= 5.0, < 8)
38+
addressable (~> 2.8)
39+
algoliasearch (~> 1.0)
40+
concurrent-ruby (~> 1.1)
41+
fuzzy_match (~> 2.0.4)
42+
nap (~> 1.0)
43+
netrc (~> 0.11)
44+
public_suffix (~> 4.0)
45+
typhoeus (~> 1.0)
46+
cocoapods-deintegrate (1.0.5)
47+
cocoapods-downloader (2.1)
48+
cocoapods-plugins (1.0.0)
49+
nap
50+
cocoapods-search (1.0.1)
51+
cocoapods-trunk (1.6.0)
52+
nap (>= 0.8, < 2.0)
53+
netrc (~> 0.11)
54+
cocoapods-try (1.2.0)
55+
colored2 (3.1.2)
56+
concurrent-ruby (1.3.7)
57+
drb (2.0.6)
58+
ruby2_keywords
59+
escape (0.0.4)
60+
ethon (0.18.0)
61+
ffi (>= 1.15.0)
62+
logger
63+
ffi (1.15.5)
64+
fourflusher (2.3.1)
65+
fuzzy_match (2.0.4)
66+
gh_inspector (1.1.3)
67+
httpclient (2.9.0)
68+
mutex_m
69+
i18n (1.14.8)
70+
concurrent-ruby (~> 1.0)
71+
json (2.7.6)
72+
logger (1.7.0)
73+
minitest (5.25.4)
74+
molinillo (0.8.0)
75+
mutex_m (0.3.0)
76+
nanaimo (0.4.0)
77+
nap (1.1.0)
78+
netrc (0.11.0)
79+
public_suffix (4.0.7)
80+
rexml (3.4.4)
81+
ruby-macho (2.5.1)
82+
ruby2_keywords (0.0.5)
83+
securerandom (0.3.2)
84+
typhoeus (1.6.0)
85+
ethon (>= 0.18.0)
86+
tzinfo (2.0.6)
87+
concurrent-ruby (~> 1.0)
88+
xcodeproj (1.27.0)
89+
CFPropertyList (>= 2.3.3, < 4.0)
90+
atomos (~> 0.1.3)
91+
claide (>= 1.0.2, < 2.0)
92+
colored2 (~> 3.1)
93+
nanaimo (~> 0.4.0)
94+
rexml (>= 3.3.6, < 4.0)
95+
zeitwerk (2.6.18)
96+
97+
PLATFORMS
98+
ruby
99+
100+
DEPENDENCIES
101+
cocoapods (= 1.16.2)
102+
drb (= 2.0.6)
103+
ffi (= 1.15.5)
104+
securerandom (= 0.3.2)
105+
106+
BUNDLED WITH
107+
1.17.2

0 commit comments

Comments
 (0)