|
| 1 | +# CI workflows |
| 2 | + |
| 3 | +Maps which event triggers which workflow and how they call each other. |
| 4 | + |
| 5 | +## Entrypoints |
| 6 | + |
| 7 | +| Workflow | Trigger | What runs | |
| 8 | +|---|---|---| |
| 9 | +| [build-pr.yml](workflows/build-pr.yml) | `pull_request` (all branches) | ESLint + tests, PR changelog, Android + iOS store builds (gated), E2E build + Maestro shards on both platforms (gated) | |
| 10 | +| [build-develop.yml](workflows/build-develop.yml) | `push: develop` | ESLint + tests, release changelog, Android + iOS store builds, seeds Android AVD + SDK caches for E2E shards | |
| 11 | +| [prettier.yml](workflows/prettier.yml) | `push: * except master, develop, single-server` (main repo) | Auto-formats with Prettier + ESLint and commits any fixes back to the branch | |
| 12 | +| [organize_translations.yml](workflows/organize_translations.yml) | `push` touching `app/i18n/locales/**.json` | Sorts JSON keys and commits the result | |
| 13 | + |
| 14 | +## Call graph |
| 15 | + |
| 16 | +```mermaid |
| 17 | +flowchart TD |
| 18 | + classDef entry fill:#d4e6f1,stroke:#2980b9 |
| 19 | + classDef reusable fill:#d5f5e3,stroke:#27ae60 |
| 20 | + classDef action fill:#fef9e7,stroke:#f39c12 |
| 21 | +
|
| 22 | + PR([build-pr.yml]):::entry |
| 23 | + DEV([build-develop.yml]):::entry |
| 24 | + PRET([prettier.yml]):::entry |
| 25 | + TRANS([organize_translations.yml]):::entry |
| 26 | +
|
| 27 | + ESLINT[eslint.yml]:::reusable |
| 28 | + CHANGELOG[generate-changelog.yml]:::reusable |
| 29 | + BUILDAND[build-android.yml]:::reusable |
| 30 | + BUILDIOS[build-ios.yml]:::reusable |
| 31 | + E2EAND[e2e-build-android.yml]:::reusable |
| 32 | + E2EIOS[e2e-build-ios.yml]:::reusable |
| 33 | + MASTAND[maestro-android.yml]:::reusable |
| 34 | + MASIOS[maestro-ios.yml]:::reusable |
| 35 | +
|
| 36 | + SN[setup-node]:::action |
| 37 | + FSV[fetch-supported-versions]:::action |
| 38 | + GBV[generate-build-version]:::action |
| 39 | + AACT[build-android action]:::action |
| 40 | + IACT[build-ios action]:::action |
| 41 | + UAND[upload-android]:::action |
| 42 | + UIAND[upload-internal-android]:::action |
| 43 | + UIOS[upload-ios]:::action |
| 44 | + PREAND[preinstall-android-sdk]:::action |
| 45 | + E2EACC[e2e-account]:::action |
| 46 | +
|
| 47 | + PR --> ESLINT |
| 48 | + PR --> BUILDAND |
| 49 | + PR --> BUILDIOS |
| 50 | + PR --> E2EAND |
| 51 | + PR --> E2EIOS |
| 52 | + PR --> MASTAND |
| 53 | + PR --> MASIOS |
| 54 | +
|
| 55 | + DEV --> ESLINT |
| 56 | + DEV --> CHANGELOG |
| 57 | + DEV --> BUILDAND |
| 58 | + DEV --> BUILDIOS |
| 59 | +
|
| 60 | + PRET --> SN |
| 61 | +
|
| 62 | + ESLINT --> SN |
| 63 | +
|
| 64 | + BUILDAND --> SN |
| 65 | + BUILDAND --> FSV |
| 66 | + BUILDAND --> GBV |
| 67 | + BUILDAND --> AACT |
| 68 | + BUILDAND --> UAND |
| 69 | + BUILDAND --> UIAND |
| 70 | +
|
| 71 | + BUILDIOS --> SN |
| 72 | + BUILDIOS --> FSV |
| 73 | + BUILDIOS --> GBV |
| 74 | + BUILDIOS --> IACT |
| 75 | + BUILDIOS --> UIOS |
| 76 | +
|
| 77 | + E2EAND --> SN |
| 78 | + E2EIOS --> SN |
| 79 | +
|
| 80 | + MASTAND --> PREAND |
| 81 | + MASTAND --> E2EACC |
| 82 | +
|
| 83 | + MASIOS --> E2EACC |
| 84 | +``` |
| 85 | + |
| 86 | +## Manual gates |
| 87 | + |
| 88 | +| Environment | Workflow / job | Fires when | |
| 89 | +|---|---|---| |
| 90 | +| `android_build` | [build-android.yml](workflows/build-android.yml) — `build-hold` | Called with `trigger == pr` (i.e. from `build-pr.yml`) | |
| 91 | +| `upload_android` | [build-android.yml](workflows/build-android.yml) — `upload-hold` | Called with `trigger == pr`, after the Android build completes | |
| 92 | +| `ios_build` | [build-ios.yml](workflows/build-ios.yml) — `build-hold` | Called with `trigger == pr` (i.e. from `build-pr.yml`) | |
| 93 | +| `approve_e2e_testing` | [build-pr.yml](workflows/build-pr.yml) — `e2e-hold` | Every `pull_request` run | |
0 commit comments