Skip to content

Phase 6: CI & release process - #14

Merged
HenryCordes merged 8 commits into
mainfrom
phase-6-ci-release
Jul 2, 2026
Merged

Phase 6: CI & release process#14
HenryCordes merged 8 commits into
mainfrom
phase-6-ci-release

Conversation

@HenryCordes

Copy link
Copy Markdown
Owner

Summary

Gives the app a CI gate and a documented, verified manual release process, per the Phase 6 design doc (specs/2026-07-02-phase-6-ci-release/design.md). Scope was narrowed during brainstorming from the migration roadmap's original entry: EAS and Detox/Maestro E2E are deferred to a future phase; actual store submission stays a manual, later decision.

  • Fixed 4 pre-existing react-hooks/set-state-in-effect lint errors so the new CI lint gate isn't red on arrival
  • Added .github/workflows/ci.yml (typecheck + test + lint, verify-only, no build/deploy)
  • Added npm run update-version — single-file version bump against app.json (the source of truth, since ios//android/ are gitignored and regenerated by expo prebuild)
  • Added plugins/withReleaseSigningConfig.js — an Expo config plugin that injects Android release-signing config into the generated build.gradle and copies credentials from a gitignored credentials/ folder, surviving expo prebuild --clean. No real credentials are in this branch.
  • Added docs/RELEASE.md documenting CI, versioning, and manual iOS/Android release steps

Built via subagent-driven-development: each task had its own implementer + reviewer cycle, followed by a whole-branch review (opus) that came back "Ready to merge: With fixes" — one Minor wording inaccuracy (docs said release builds "fall back to the debug keystore" when credentials are missing; actual AGP behavior is an unsigned build) was found and fixed (86f7716).

Test plan

  • npm run typecheck — clean
  • npm test — 610/610 passing across 94 suites
  • npm run lint — 0 errors (57 pre-existing warnings, unrelated to this branch)
  • expo prebuild --platform android --clean run twice — signing config injection verified idempotent against the real generated build.gradle
  • Manual, after merge (documented in docs/RELEASE.md): supply real credentials/keystore.properties + credentials/release.keystore from paperwork-app's existing Android keystore, then run a real gradlew bundleRelease and confirm the .aab's signing certificate matches paperwork-app's
  • Manual, after merge: confirm this PR's CI run actually goes green, and that a deliberately broken commit would go red
  • Manual, after merge: expo prebuild --platform ios → open in Xcode → confirm a real Archive succeeds

@HenryCordes
HenryCordes merged commit efd4e4e into main Jul 2, 2026
1 check passed
@HenryCordes
HenryCordes deleted the phase-6-ci-release branch July 2, 2026 17:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant