Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
c715215
add codeowners for automatic review requests on default branch
GuyPhy Jul 2, 2026
7d5e65e
add dependabot config to auto-update dependencies
GuyPhy Jul 2, 2026
1b98ee4
add pull request template
GuyPhy Jul 2, 2026
c4b50ef
CI Update (#65)
GuyPhy Jul 2, 2026
83849f6
remove deprecated fields from order processing pipeline
GuyPhy Jul 2, 2026
e2524c3
update order orchestration layer
GuyPhy Jul 3, 2026
43a34ab
spec compliant order polling with backoff
GuyPhy Jul 3, 2026
adac4ab
fix the route to orders instead of settings
GuyPhy Jul 4, 2026
3a51228
add invoice and manual review fields
GuyPhy Jul 4, 2026
4178197
fix enabled guard silent override
GuyPhy Jul 4, 2026
05ebc90
+orderAligned
ArpitxGit Jul 5, 2026
e94dc02
+topupAligned
ArpitxGit Jul 6, 2026
c3adc0d
+routingFixes
ArpitxGit Jul 6, 2026
edc62e8
+alignedAccount
ArpitxGit Jul 6, 2026
c3ed648
+UiUxFixes
ArpitxGit Jul 6, 2026
53b7fea
update bff generated types per the new spec
GuyPhy Jul 8, 2026
d49c048
add a centralized logger
GuyPhy Jul 9, 2026
5216362
script to check for stray console log statements in the codebase
GuyPhy Jul 9, 2026
41f2762
updated logging
GuyPhy Jul 9, 2026
93928f0
remove web target scaffolding
GuyPhy Jul 9, 2026
dc3cf97
bugfix: plan details did not parse info received from catalogue
GuyPhy Jul 9, 2026
31f9d6b
make details expanded view scrollable
GuyPhy Jul 9, 2026
12dc315
update packages
GuyPhy Jul 9, 2026
835d67e
separate isAppActive hook
GuyPhy Jul 9, 2026
d9f7193
use new persistent query provider
GuyPhy Jul 9, 2026
bb78277
add new esim usage endpoint hooks
GuyPhy Jul 9, 2026
0ee78bc
migrate orders and esim cards to server source of truth
GuyPhy Jul 9, 2026
6c06653
bugfix: access token refreshed before user login
GuyPhy Jul 9, 2026
5d14500
merge from bffAndUiUxTasks
GuyPhy Jul 9, 2026
11254eb
bugfix: wallet card not populated on account recovery
GuyPhy Jul 10, 2026
bb53b20
remove dead code
GuyPhy Jul 10, 2026
ededf6c
migrate device esim hook from /queries
GuyPhy Jul 10, 2026
2d660dc
add esim usage metric integration
GuyPhy Jul 10, 2026
624ea20
enable direct install on iOS
GuyPhy Jul 10, 2026
edaf73d
add tap capability for expansion toggle
GuyPhy Jul 10, 2026
b30d906
remove direct link from dependency array
GuyPhy Jul 10, 2026
9376bd6
bugfix: only recover wallet if it is actually deployed
GuyPhy Jul 10, 2026
7522564
fix routing bugs
GuyPhy Jul 11, 2026
d0cc851
bugfix: expansion card not opening fully
GuyPhy Jul 11, 2026
4d2079f
package updates
GuyPhy Jul 11, 2026
4349290
theme performance improvement
GuyPhy Jul 11, 2026
f6b3b98
read ABI and registry address directly from kokio-sdk
GuyPhy Jul 11, 2026
2ccfafd
add logger check
GuyPhy Jul 11, 2026
7f63d3b
fix lint warnings
GuyPhy Jul 11, 2026
da273d6
theme fixes
GuyPhy Jul 12, 2026
9fb08e3
package updates
GuyPhy Jul 12, 2026
f03ab93
fix lint warnings
GuyPhy Jul 12, 2026
643b8fa
minor semver version bump
GuyPhy Jul 12, 2026
025279e
split android and ios workflows
GuyPhy Jul 12, 2026
1919899
update bff types per new spec
GuyPhy Jul 13, 2026
b422c05
add account deletion feature
GuyPhy Jul 13, 2026
7c8ae04
show error message for non-existent accounts on Existing User button
GuyPhy Jul 13, 2026
f721d2d
clear wallet and sdk state on account deletion
GuyPhy Jul 13, 2026
4d3c2a6
update permissions
GuyPhy Jul 14, 2026
adb6662
bugfix: delete userWallet+userData correctly from secure store
GuyPhy Jul 14, 2026
7818486
fix type errors
GuyPhy Jul 14, 2026
78b9497
Android Release Candidate (#80)
GuyPhy Jul 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 38 additions & 55 deletions .eas/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,17 @@ Kokio uses EAS Workflows to automate native builds, store submissions, TestFligh

These workflows are run on-demand from GitHub Actions after protected pull request merges to `staging` and `production`.

## Platform Model

Workflows are **scoped to a single platform**. The router resolves which platforms a release targets:

- **Android is always released.** No label required.
- **iOS is opt-in.** Add the `ios` label to the promotion PR (or choose `ios`/`both` on manual dispatch).

iOS workflow files exist but are **dormant** — they are not invoked until an Apple Developer account is connected. This keeps a missing Apple account from failing an Android release, and keeps the iOS cutover to a label rather than a config change.

Platform resolution lives **only** in `.github/workflows/route-eas-release.yml`. `scripts/validate-release-pr.mjs` stays platform-agnostic on purpose, so there is one place to edit when iOS comes online.

## Branch Purposes

### `dev`
Expand All @@ -26,7 +37,7 @@ The `staging` branch is for release candidate testing.
- Runs OTA updates for PRs labeled `ota` only when they change approved OTA-safe paths and a compatible finished build already exists on Expo for both platforms.
- Falls back to native builds for version, native, config, dependency, and uncertain changes.
- Submits Android builds to Google Play open testing.
- Distributes iOS builds through TestFlight external testing in the `Public` group.
- Distributes iOS builds through TestFlight external testing in the `Public` group (when `ios` is opted in).

### `production`

Expand All @@ -39,7 +50,7 @@ The `production` branch is for real app releases.
- Runs OTA updates for PRs labeled `ota` only when they change approved OTA-safe paths and a compatible finished build already exists on Expo for both platforms.
- Falls back to native builds for version, native, config, dependency, and uncertain changes.
- Submits Android builds to the Google Play production track.
- Submits iOS builds to App Store Connect.
- Submits iOS builds to App Store Connect (when `ios` is opted in).

## Release Versioning

Expand All @@ -61,69 +72,41 @@ The `Release Policy` GitHub Action validates that:

### `workflows/create-dev-builds.yml`

Runs on pushes to `dev`.

This workflow builds:

- Android with the `development` EAS build profile.
- iOS device builds with the `development` EAS build profile.

### `workflows/deploy-staging.yml`

Runs on-demand from GitHub Actions for merged PRs to `staging` that do not have the `ota` label.

This workflow:

1. Creates a new Android build with the `staging` profile.
2. Creates a new iOS build with the `staging` profile.
3. Submits Android to Google Play open testing.
4. Distributes iOS through TestFlight external testing in the `Public` group.

The staging workflow uses the EAS `preview` environment for submission and distribution jobs so cloud jobs pull staging-safe environment variables instead of production values.

### `workflows/publish-staging-ota.yml`

Runs on-demand from GitHub Actions for merged PRs to `staging` that have the `ota` label.

This workflow:

1. Publishes an Android OTA update to the `staging` branch.
2. Publishes an iOS OTA update to the `staging` branch.

### `workflows/deploy-production.yml`

Runs on-demand from GitHub Actions for merged PRs to `production` that do not have the `ota` label.

This workflow:
Runs on pushes to `dev`. Builds Android and iOS device builds with the `development` profile.

1. Creates a new Android build with the `production` profile.
2. Creates a new iOS build with the `production` profile.
3. Submits Android to the Google Play production track.
4. Submits iOS to App Store Connect.
### Native build & submit

### `workflows/publish-production-ota.yml`
| File | Runs when | Does |
|---|---|---|
| `workflows/deploy-staging-android.yml` | merged PR to `staging`, no `ota` label | Android `staging` build → Google Play open testing |
| `workflows/deploy-staging-ios.yml` | as above **+ `ios` label** | iOS `staging` build → TestFlight (`Public`, beta review submitted) |
| `workflows/deploy-production-android.yml` | merged PR to `production`, no `ota` label | Android `production` build → Play production track |
| `workflows/deploy-production-ios.yml` | as above **+ `ios` label** | iOS `production` build → App Store Connect |

Runs on-demand from GitHub Actions for merged PRs to `production` that have the `ota` label.
Staging workflows use the EAS `preview` environment so cloud jobs pull staging-safe environment variables instead of production values.

This workflow:
### OTA

1. Publishes an Android OTA update to the `production` branch.
2. Publishes an iOS OTA update to the `production` branch.
| File | Runs when | Does |
|---|---|---|
| `workflows/publish-staging-ota-android.yml` | merged PR to `staging` with `ota` | Android OTA to the `staging` branch |
| `workflows/publish-staging-ota-ios.yml` | as above **+ `ios` label** | iOS OTA to the `staging` branch |
| `workflows/publish-production-ota-android.yml` | merged PR to `production` with `ota` | Android OTA to the `production` branch |
| `workflows/publish-production-ota-ios.yml` | as above **+ `ios` label** | iOS OTA to the `production` branch |

### `.github/workflows/route-eas-release.yml`

Runs when a PR is merged into `staging` or `production`.

This workflow:
1. Reads the merged PR's target branch and labels.
2. Resolves platforms: Android always; iOS if the `ios` label is present.
3. Derives the workflow file per platform:
- `ota` label → `.eas/workflows/publish-{base}-ota-{platform}.yml`
- no `ota` label → `.eas/workflows/deploy-{base}-{platform}.yml`
4. For OTA-labeled PRs, verifies Expo already has a finished store build **for each resolved platform** at the current app/runtime version on the target profile (`scripts/verify-ota-preflight.mjs`, via `OTA_PLATFORMS`).
5. Calls `eas workflow:run` once per resolved platform with the exact merge commit SHA.

1. Reads the merged PR target branch and labels.
2. Chooses the correct EAS workflow:
- `ota` label on `staging` -> `publish-staging-ota.yml`
- no `ota` label on `staging` -> `deploy-staging.yml`
- `ota` label on `production` -> `publish-production-ota.yml`
- no `ota` label on `production` -> `deploy-production.yml`
3. For OTA-labeled PRs, verifies Expo already has finished store builds for Android and iOS at the current app/runtime version on the target profile.
4. Calls `eas workflow:run` with the exact merge commit SHA.
`workflow_dispatch` supports an explicit `workflow_file`, which bypasses platform resolution entirely.

## OTA Trigger Rules

Expand All @@ -132,7 +115,7 @@ OTA is triggered only when all of these are true:
- the merged PR targets `staging` or `production`
- the merged PR carried the `ota` label and passed release validation
- the PR changed only approved OTA-safe paths
- Expo already has finished store builds for the target app/runtime version on both platforms
- Expo already has a finished store build at the target app/runtime version **for each platform being published**

OTA is not triggered when any of these are true:

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Deploy production
name: Deploy production (Android)

jobs:
build_android:
Expand All @@ -8,13 +8,6 @@ jobs:
platform: android
profile: production

build_ios:
name: Build iOS
type: build
params:
platform: ios
profile: production

submit_android:
name: Submit Android to Play production
needs: [build_android]
Expand All @@ -23,12 +16,3 @@ jobs:
params:
build_id: ${{ needs.build_android.outputs.build_id }}
profile: production

submit_ios:
name: Submit iOS to App Store Connect
needs: [build_ios]
type: submit
environment: production
params:
build_id: ${{ needs.build_ios.outputs.build_id }}
profile: production
18 changes: 18 additions & 0 deletions .eas/workflows/deploy-production-ios.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Deploy production (iOS)

jobs:
build_ios:
name: Build iOS
type: build
params:
platform: ios
profile: production

submit_ios:
name: Submit iOS to App Store Connect
needs: [build_ios]
type: submit
environment: production
params:
build_id: ${{ needs.build_ios.outputs.build_id }}
profile: production
18 changes: 18 additions & 0 deletions .eas/workflows/deploy-staging-android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Deploy staging (Android)

jobs:
build_android:
name: Build Android
type: build
params:
platform: android
profile: staging

submit_android:
name: Submit Android to open testing
needs: [build_android]
type: submit
environment: preview
params:
build_id: ${{ needs.build_android.outputs.build_id }}
profile: staging
Original file line number Diff line number Diff line change
@@ -1,29 +1,13 @@
name: Deploy staging
name: Deploy staging (iOS)

jobs:
build_android:
name: Build Android
type: build
params:
platform: android
profile: staging

build_ios:
name: Build iOS
type: build
params:
platform: ios
profile: staging

submit_android:
name: Submit Android to open testing
needs: [build_android]
type: submit
environment: preview
params:
build_id: ${{ needs.build_android.outputs.build_id }}
profile: staging

distribute_ios_testflight:
name: Distribute iOS to TestFlight
needs: [build_ios]
Expand Down
10 changes: 10 additions & 0 deletions .eas/workflows/publish-producion-ota-ios.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: Publish production OTA (iOS)

jobs:
publish_ios_update:
name: Publish iOS production OTA update
type: update
environment: production
params:
branch: production
platform: ios
10 changes: 10 additions & 0 deletions .eas/workflows/publish-production-ota-android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: Publish production OTA (Android)

jobs:
publish_android_update:
name: Publish Android production OTA update
type: update
environment: production
params:
branch: production
platform: android
18 changes: 0 additions & 18 deletions .eas/workflows/publish-production-ota.yml

This file was deleted.

10 changes: 10 additions & 0 deletions .eas/workflows/publish-staging-ota-android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: Publish staging OTA (Android)

jobs:
publish_android_update:
name: Publish Android staging OTA update
type: update
environment: preview
params:
branch: staging
platform: android
10 changes: 10 additions & 0 deletions .eas/workflows/publish-staging-ota-ios.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: Publish staging OTA (iOS)

jobs:
publish_ios_update:
name: Publish iOS staging OTA update
type: update
environment: preview
params:
branch: staging
platform: ios
18 changes: 0 additions & 18 deletions .eas/workflows/publish-staging-ota.yml

This file was deleted.

4 changes: 4 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Default code owners for all files.
# These users will be automatically requested for review on PRs to default branch.
* @ManulParihar
* @ArpitxGit
Loading
Loading