chore(dev): reproducible dev container with Android + Flatpak toolchains preinstalled #237
Labels
No labels
area:auth
area:ci
area:db
area:infra
area:native
area:pwa
area:service
epic
feature
foundation
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
james/carol#237
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Local development on Carol works on a vanilla Fedora / Debian / macOS host as long as you install the toolchain by hand (see
CONTRIBUTING.md). The host install scales OK for the web target — mise gives you Node, pnpm, gitleaks, actionlint — but the native targets bring heavier system deps:cmdline-tools+ platform / build-tools, ~6 GB.webkit2gtk-4.1-dev+ ~10 other system libs,flatpak-builder, the GNOME Platform 48 + SDK Flatpak runtimes (~2 GB).That's a lot for an "I'd like to try building locally" contributor. It's also bad on immutable distros (Aurora, Bazzite, Silverblue, Kinoite) where system deps need rpm-ostree layering + a reboot, or a toolbox container per build target. Today the message is "use the toolbox" and the CI runner re-installs everything on every release (#227 tracks baking that runner image — this ticket is its developer-side sibling).
A reproducible dev container —
.devcontainer/-shaped, runnable in VS Code / Cursor / IntelliJ /devcontainer-cli— would mean: onedocker pulland you have a working environment for every target Carol ships.Source
User-requested (June 2026), after the PR #222 Flatpak landed and the system-deps friction on immutable Fedora variants became visible.
Scope
Build a Dev Containers spec under
.devcontainer/:docs/ci.mdorapps/client/README.md)..tool-versions): Node, pnpm, gitleaks, actionlint.cmdline-tools, the SDK platforms + build-tools the Expo SDK 56 prebuild expects (mirror whatrelease-android.ymlinstalls).apps/client/src-tauri/rust-toolchain.tomlif present (else stable),webkit2gtk-4.1-dev+ its build deps,flatpak,flatpak-builder. The GNOME Platform 48 + SDK runtimes preinstalled viaflatpak installif the image supports it, otherwise pulled on first build.cosign,git-cliff,jq, the GitHub CLI /gh(despite Forgejo — for migration ease),ripgrep,fd./workspaces/carol.postCreateCommandrunspnpm installso the container is immediately usable.customizations.vscode.extensions: the obvious ones (ESLint, Prettier, Vitest, Expo Tools, rust-analyzer, Tauri).runArgsincludes--privilegedonly if Android emulator inside the container is in scope (likely not — see below).forge.wynning.tech/james/carol-devcontainer:YYYY-MM-DD(or similar). Tagged + signed via cosign per the release pipeline pattern.What this ticket explicitly does NOT cover
adb; the container exposes the SDK + build tools.Acceptance criteria
.devcontainer/devcontainer.json+ supporting Dockerfile / setup scripts live in the repo.pnpm -F @carol/api dev,pnpm -F @carol/client export:web,pnpm -F @carol/client build:android,pnpm -F @carol/client build:flatpak.ADR-0014)..devcontainer/) and publishes the new digest.Out of scope
Composes with
CONTRIBUTING.md— gets a new section pointing at the dev container as the easy path.docs/ci.md— release-pipeline notes; the dev container's publishing flow gets a paragraph here.