- TypeScript 85.9%
- Kotlin 6.9%
- Swift 6.3%
- Shell 0.4%
- JavaScript 0.4%
- Other 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Adds workflow_dispatch inputs to turn off ios-submit's automatic internal rollout (IOS_SUBMIT_PLAY_AUTO_ROLLOUT=false) and to pass Google Play release notes (--release-notes). Co-Authored-By: Claude Opus 5.5 <[email protected]> |
||
| .forgejo | ||
| assets | ||
| modules | ||
| plugins | ||
| screenshots | ||
| src | ||
| .gitignore | ||
| app.json | ||
| App.tsx | ||
| babel.config.js | ||
| build.sh | ||
| eas.json | ||
| index.ts | ||
| ios-submit.config.json | ||
| original-icon.png | ||
| package-lock.json | ||
| package.json | ||
| PRIVACY_POLICY.md | ||
| SUPPORT.md | ||
| tsconfig.json | ||
CI
workflows/release.yml builds and uploads Leftover with ios-submit on the Mac
runner (kyles-mac-mini, label macos-arm64). Run it from the Actions tab
(choose platform, whether to upload, whether to roll Android out, and optional
release notes) or push a v* tag matching app.json's version.
Android uploads to the internal track roll out to internal testers
automatically, replacing the previous internal release. Untick Roll Android
out to internal testers to leave a draft for Play Console instead
(IOS_SUBMIT_PLAY_AUTO_ROLLOUT=false). Older drafts that ios-submit uploaded
are replaced; a draft made in Play Console still stops the upload.
Where settings come from
| Kind | Location |
|---|---|
| Public app settings | ios-submit.config.json (committed) |
| Machine paths and toolchains | /opt/homebrew/etc/forgejo-runner/.env on the runner (IOS_SUBMIT_*, JAVA_HOME, ANDROID_HOME) |
| Account-wide credentials | Forgejo secrets/variables on the leftover org |
| App-specific credentials | Forgejo secrets/variables on the leftover/mobile repo |
Org leftover
| Name | Type | Contents |
|---|---|---|
ASC_KEY_ID |
secret | App Store Connect API key ID |
ASC_ISSUER_ID |
variable | App Store Connect issuer ID |
ASC_TEAM_ID |
variable | Apple team ID |
ASC_KEY_P8 |
secret | App Store Connect API private key (.p8 text) |
PLAY_SERVICE_ACCOUNT_JSON |
secret | Google Play service account key (JSON text) |
Repo leftover/mobile
| Name | Type | Contents |
|---|---|---|
IOS_DIST_P12_BASE64 |
secret | Apple distribution certificate + private key (.p12, base64) |
IOS_DIST_P12_PASSWORD |
secret | Password for the .p12 |
IOS_PROFILE_BASE64 |
secret | App Store provisioning profile (base64) |
ANDROID_KEY_ALIAS |
variable | Upload key alias |
ANDROID_KEYSTORE_BASE64 |
secret | Upload keystore (base64) |
ANDROID_KEYSTORE_PASSWORD |
secret | Keystore password |
ANDROID_KEY_PASSWORD |
secret | Upload key password |
Each job checks out the run's commit with actions/checkout into its own
runner workspace, so parallel iOS and Android jobs never share a checkout.
Checkouts don't need registration in Local Build Desk. The CLI
uses --settings-from to inherit the desktop project, then applies the committed
ios-submit.config.json and runner IOS_SUBMIT_* environment overrides. There
are no direct SQLite edits, process polling loops, or cross-platform doctor
workarounds. Set the runner’s capacity to at least 2 for concurrent dispatch;
Local Build Desk defaults to one native job per platform.
Stored credentials remain the default for this Mac’s packaged app. For a
vault-free run, populate the credentials above and set repository variable
CI_EPHEMERAL_CREDENTIALS=true. The workflow maps these to the CLI’s
IOS_SUBMIT_* variables. Profiles are fetched/created using the supplied Apple
API key and existing P12; existing certificates are preserved. The key ID belongs
in a secret (move it from the old variable if necessary). No credentials were
exported or uploaded by this configuration change. The optional
IOS_PROFILE_BASE64 can be used in a credential config for offline signing;
the current workflow obtains the profile through Apple.
Build numbers are shared with desktop builds. A failed/cancelled pre-upload job
releases its lease; upload commits the number, including uncertain outcomes.
Successful build-only artifacts retain their number until uploaded. Never edit
desk.sqlite to synchronize project settings or counters.