Workflows for Fluent Mobile (Android-only).
| File | Trigger | Purpose |
|---|---|---|
pr-description.yml |
PR activity (opened / edited / synchronize / reopened / ready_for_review) |
Require filled PR template (TLDR, Refs #NNN, How to verify); Dependabot exempt |
action-pins.yml |
pull_request_target on main |
SHA-pin gate (Action pins); checker from default branch |
lint.yml |
push, PR | ESLint + Prettier |
test.yml |
push, PR | Jest unit tests |
quality-gates.yml |
push, PR | TypeScript, lockfile expo-doctor, expo install --check (Node from .nvmrc) |
eas-build.yml |
push tag v* |
Sync APP_VERSION_FALLBACK in app.config.ts with tag; hand off to EAS |
preview-build.yml |
PR label preview-build |
Optional isolated Android preview APK (PR comment only — debug) |
qa-handoff.yml |
PR merged | Needs QA? Yes → issue handoff + assign Roslin + Project 4 In QA |
nightly-preview.yml |
cron 23:17 PT (APK) + 09:07 PT (Slack) + workflow_dispatch |
Nightly binary-only Android internal APK (dev API); Slack held to 09:00–16:00 PT |
.github/PULL_REQUEST_TEMPLATE.md— GitHub UI pre-fill (keep synced with.cursor/templates/pr-template.md).github/CODEOWNERS— auto-requests review from@mattrace-gloo,@B3RN153,@JonathanSeehagen- Validator:
scripts/validate-pr-body.cjs(job namePR Description)
Make PR Description a required status check on main, and enable Require review from Code Owners — see docs/ci.md.
Native Android compile is not run on every PR. QA uses the nightly APK after merge. Optionally use the preview-build label for an isolated PR APK while debugging. Tag releases for production builds.
git tag v1.0.1
git push origin v1.0.1eas-build.ymlbumpsAPP_VERSION_FALLBACKinapp.config.tsand moves the tag to that commit.- EAS Workflow
.eas/workflows/create-production-builds.ymlbuilds and submits Android.
See .eas/README.md for Expo GitHub app and Play Store setup.
Canonical process (Needs QA?, post-merge nightly): docs/guides/qa-process.md.
- Check Needs QA? Yes on the PR (
Refs #NNNon its own Details line — notPart of #NNN). - After merge,
qa-handoff.ymlcomments on linked issues, adds@Roslin22, and best-effort moves Project 4 →In QA(.github/scripts/qa-handoff-on-merge.cjs). - Nightly builds post the install URL on recent handoff issues.
- Optional debug: add
preview-buildfor an isolated PR APK — PR comment only; does not start the QA queue. Re-request: remove and re-add the label.
Install guide (non-technical): docs/guides/qa-preview-testing.md
Requires EXPO_TOKEN in repository secrets. Optional: PROJECT_BOARD_TOKEN (PAT with org project write) so Status updates on Project 4 succeed. eas.json profiles preview / nightly are internal distribution with Expo Updates disabled.
Scheduled (and manually dispatchable) workflow .github/workflows/nightly-preview.yml:
- Always starts a new EAS Android build with profile
nightly(internal APK, bakedhttps://dev.api.fluent.bible). - No OTA (
eas updateis not used). Expo Updates stay disabled fornightlyso the APK is self-contained. - Skips when
mainHEAD matches the last successful nightly unlessforce_buildis set. - Posts a GitHub Actions job summary and install comments on recent QA handoff issues. Slack waits until 09:00–16:00 America/Los_Angeles (success, skip, and no-APK) — incoming webhooks cannot mute phone push. A run that did not produce an APK uses the same
:zzz:skip-style card as “no new commits” (not a red X), with an Actions log link. Daytimeworkflow_dispatchstill Slacks immediately.
| Secret | Purpose |
|---|---|
EXPO_TOKEN |
EAS CLI auth (required for PR preview + nightly) |
PROJECT_BOARD_TOKEN |
Optional PAT for Project 4 Status → In QA on merge handoff |
SLACK_WEBHOOK_URL |
Incoming webhook for nightly success / failure / skip notices |
Does not require the Expo GitHub App — only EXPO_TOKEN. Manual run: Actions → Nightly Preview → Run workflow (available after this workflow exists on main).
To test from a PR before merge, add the nightly-preview label (forces a build + Slack notify).