Ship Magisk like GOLDEN; KernelSU optional recycle only; parallel to sunfish-a16-rom standby.
88 lines
2.7 KiB
Markdown
88 lines
2.7 KiB
Markdown
# Data model (operational): 001-development-environment
|
|
|
|
This is **not** an application domain model. It records host/Git/service
|
|
entities for planning clarity. No ORM, no API schemas.
|
|
|
|
## Entities
|
|
|
|
### Host (`rom-dev01`)
|
|
|
|
| Field | Notes |
|
|
|-------|-------|
|
|
| OS | Ubuntu 24.04 LTS (precondition) |
|
|
| Capacity | ~6 vCPU / 52 GB / 2 TB / 32 GB swap |
|
|
| Network | Public IPv4 NIC; no required internal NIC |
|
|
| Management | External Salt `saltenv=base` + project config |
|
|
|
|
### Account `android-build`
|
|
|
|
| Field | Notes |
|
|
|-------|-------|
|
|
| Type | Unprivileged login user |
|
|
| Owns | `/srv/rom/{src,references,tooling,ccache,artifacts,logs}` (as documented) |
|
|
| Must not | Need root to compile; own Gitea/Semaphore system dirs |
|
|
|
|
### Meta working tree
|
|
|
|
| Path | Purpose |
|
|
|------|---------|
|
|
| `/home/android-build/sunfish-a16-rom` | Spec Kit + specs + docs (Cursor Remote SSH) |
|
|
|
|
### Path root `/srv/rom`
|
|
|
|
| Child | Purpose | Populated in 001? |
|
|
|-------|---------|-------------------|
|
|
| `src/` | Future Android trees | Empty (no sync) |
|
|
| `references/` | Future AXP/reference | Empty |
|
|
| `tooling/` | Project tooling helpers (not Spec Kit checkout) | Partial OK |
|
|
| `ccache/` | CCACHE_DIR | Yes (dir + env) |
|
|
| `artifacts/` | Laptop handoff | Dummy file for smoke |
|
|
| `logs/` | Bootstrap/preflight logs | Yes |
|
|
| `secrets/` | Restricted placeholder | Empty; no keygen |
|
|
|
|
### GiteaInstance
|
|
|
|
| Field | Notes |
|
|
|-------|-------|
|
|
| Bind | Loopback / non-public |
|
|
| Repos | `sunfish-a16-rom`, `sunfish-rom-manifest`, `sunfish-rom-build`, `sunfish-rom-patches` |
|
|
| Canonical | Yes after first successful push of meta repo |
|
|
|
|
### GitMirror (off-VM)
|
|
|
|
| Field | Notes |
|
|
|-------|-------|
|
|
| Location | Laptop bare mirrors (initial) |
|
|
| Direction | Laptop pulls (`clone --mirror` / `remote update`); no VM→laptop SSH |
|
|
| Scope | All four project repos |
|
|
| Success | At least one verified mirror cycle |
|
|
|
|
### AnsibleController / SemaphoreInstance
|
|
|
|
| Field | Notes |
|
|
|-------|-------|
|
|
| Host | `rom-dev01` |
|
|
| First job | Environment smoke playbook |
|
|
| Exposure | Same private access model as Gitea |
|
|
|
|
## Relationships
|
|
|
|
```text
|
|
AdminSSH ──manages──► Host packages/systemd/firewall
|
|
android-build ──writes──► /srv/rom (build-related trees)
|
|
GiteaInstance ──hosts──► four Repositories
|
|
Laptop ──mirrors──► Repositories (bare)
|
|
SemaphoreInstance ──runs──► Ansible smoke playbook on Host
|
|
Laptop Cursor ──RemoteSSH──► Host workspace
|
|
Laptop ──rsync──► /srv/rom/artifacts (pull)
|
|
```
|
|
|
|
## State transitions (meta Git)
|
|
|
|
1. `laptop-staging-only`
|
|
2. `copied-to-host` (pre-Gitea)
|
|
3. `gitea-canonical` (push complete)
|
|
4. `mirrored-off-vm` (SC-007)
|
|
|
|
Do not destroy state (1) until (3) and (4) succeed.
|