chore(scaffold): M0 — Gradle + Compose + Hilt skeleton with CI #2

Merged
whitlocktech merged 1 commits from feat/m0-scaffold into main 2026-07-19 17:56:17 +00:00
Member

M0 — Repo scaffold

Stands up the Android-app repo per docs/android/PLAN.md M0: a buildable Kotlin + Jetpack Compose (Material 3) single-activity skeleton wired for Hilt, ready for the M1–M4 functional Kotlin pass. All v1 §8 website prerequisites are already landed, so the app pass is unblocked.

What's here

  • Build toolchain: Gradle 8.7 wrapper (jar committed); AGP 8.6.1 / Kotlin 2.0.20; JDK 17; minSdk 29, compile/target 35; applicationId com.runicgateway.app (PLAN §13, pending the domain).
  • Version catalog (gradle/libs.versions.toml) pins the full planned stack — Compose, Hilt, Retrofit/OkHttp + kotlinx.serialization, DataStore, security-crypto, Coil, Navigation — so M1–M4 reference libraries by alias without re-pinning.
  • App skeleton: RunicGatewayApp (@HiltAndroidApp) + MainActivity (Compose) + ui/theme/*. Strings externalized from day one (§2); adaptive launcher icon; backup/data-extraction rules exclude the token store + DataStore so no session material leaves the device.
  • CI: .gitea/workflows/pr-checks.yml gates PRs into main with ./gradlew lint test assembleDebug (JDK 17 + Android SDK on the self-hosted runner; bare-image apt-get step per PLAN §12). Debug builds auto-sign, so the gate needs no secrets. A placeholder JVM unit test gives the test gate something to run.
  • .gitattributes forces LF on gradlew so the wrapper runs on the Linux runner.
  • GPL-3.0-or-later SPDX headers throughout; README documents the repo role, stack, build, and CI.

Verification

Local Gradle configures the :app module and resolves all six plugins cleanly (gradle help / gradle projects succeed). A full assembleDebug needs the Android SDK and runs in CI — this PR's own PR-checks run is the first end-to-end validation.

Out of scope (later milestones)

No functional screens/networking yet (M1+), no release signing / Gitea-release job (M6), no push (M7).


AI-assisted contribution disclosure: authored with Claude Code (Claude Opus). AI-authored commit carries a Co-Authored-By: Claude trailer. I've reviewed the scaffold for correctness.

🤖 Generated with Claude Code

## M0 — Repo scaffold Stands up the Android-app repo per [`docs/android/PLAN.md`](https://gitea.whitlocktech.com/RunicGateway/docs/src/branch/main/android/PLAN.md) **M0**: a buildable Kotlin + Jetpack Compose (Material 3) single-activity skeleton wired for Hilt, ready for the M1–M4 functional Kotlin pass. All v1 §8 website prerequisites are already landed, so the app pass is unblocked. ### What's here - **Build toolchain:** Gradle 8.7 wrapper (jar committed); AGP 8.6.1 / Kotlin 2.0.20; JDK 17; `minSdk 29`, `compile/target 35`; `applicationId com.runicgateway.app` (PLAN §13, pending the domain). - **Version catalog** (`gradle/libs.versions.toml`) pins the *full* planned stack — Compose, Hilt, Retrofit/OkHttp + `kotlinx.serialization`, DataStore, security-crypto, Coil, Navigation — so M1–M4 reference libraries by alias without re-pinning. - **App skeleton:** `RunicGatewayApp` (`@HiltAndroidApp`) + `MainActivity` (Compose) + `ui/theme/*`. Strings externalized from day one (§2); adaptive launcher icon; backup/data-extraction rules exclude the token store + DataStore so no session material leaves the device. - **CI:** `.gitea/workflows/pr-checks.yml` gates PRs into `main` with `./gradlew lint test assembleDebug` (JDK 17 + Android SDK on the self-hosted runner; bare-image `apt-get` step per PLAN §12). Debug builds auto-sign, so the gate needs no secrets. A placeholder JVM unit test gives the `test` gate something to run. - **`.gitattributes`** forces LF on `gradlew` so the wrapper runs on the Linux runner. - GPL-3.0-or-later SPDX headers throughout; README documents the repo role, stack, build, and CI. ### Verification Local Gradle configures the `:app` module and resolves all six plugins cleanly (`gradle help` / `gradle projects` succeed). A full `assembleDebug` needs the Android SDK and runs in CI — this PR's own PR-checks run is the first end-to-end validation. ### Out of scope (later milestones) No functional screens/networking yet (M1+), no release signing / Gitea-release job (M6), no push (M7). --- **AI-assisted contribution disclosure:** authored with **Claude Code** (Claude Opus). AI-authored commit carries a `Co-Authored-By: Claude` trailer. I've reviewed the scaffold for correctness. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
wtclaude added 1 commit 2026-07-19 17:53:22 +00:00
chore(scaffold): M0 Gradle + Compose + Hilt skeleton with CI
Some checks failed
PR Checks / android-build (pull_request) Failing after 5m13s
c920e8805b
Stand up the Android-app repo per docs/android/PLAN.md M0: a buildable
Kotlin + Jetpack Compose (Material 3) single-activity skeleton wired for
Hilt, ready for the M1-M4 functional pass.

- Gradle 8.7 wrapper; AGP 8.6.1 / Kotlin 2.0.20, JDK 17, minSdk 29, target 35.
- Version catalog (gradle/libs.versions.toml) pins the full planned stack
  (Compose, Hilt, Retrofit/OkHttp + kotlinx.serialization, DataStore,
  security-crypto, Coil, Navigation) so later milestones reference by alias.
- RunicGatewayApp (@HiltAndroidApp) + MainActivity (Compose) + ui/theme/*.
- Strings externalized from day one; adaptive launcher icon; backup rules
  exclude the token store / DataStore (no session material off-device).
- CI: .gitea/workflows/pr-checks.yml gates PRs with lint + test + assembleDebug
  (JDK 17 + Android SDK on the self-hosted runner; debug builds auto-signed,
  no secrets). Placeholder JVM unit test so the test gate runs.
- .gitattributes forces LF on gradlew so the wrapper runs on the Linux runner.

Verified locally: `gradle help`/`projects` configure the :app module and
resolve all six plugins cleanly (full assemble needs the Android SDK, done in CI).

app id: com.runicgateway.app (PLAN.md §13, pending runicgateway.app domain).

Co-Authored-By: Claude <noreply@anthropic.com>
whitlocktech approved these changes 2026-07-19 17:56:11 +00:00
whitlocktech merged commit 7c13476f29 into main 2026-07-19 17:56:17 +00:00
whitlocktech deleted branch feat/m0-scaffold 2026-07-19 17:56:17 +00:00
Sign in to join this conversation.
No description provided.