Decisions
0029: Repository split
Code, recipes and the image live apart, and there is one build path.
Status: accepted (lead, 2026-11-01). Replaces the build parts of ADR 0016 and 0017 (`image/`, `image/repo/build.sh`, `kernel/linux/patches/`) and the `packages.yml`, `iso.yml` and `kernel.yml` workflows.
Context
WolOS had four ways to build packages (image/repo/build.sh, image/vm/build.sh, image/ci/aws-build.sh, hand runs on boxes), three places for kernel patches (fork commits, kernel/linux/patches/, a private overlay hook), hidden workflow modes (only=-, only=cdn), a GitHub-runner build fallback, and PKGBUILDs that reached into the source tree with $startdir/../../... Nobody could say which path built a given package. Arch and CachyOS, which WolOS is built on, separate code, recipes, the build farm and the image.
Decision
- Four repositories, one job each:
wolos: the OS code (crates, desktop, plugins, design and shell submodules, wopkg,files/that wolos-system installs,kernel/scx_wolos, docs). It builds nothing for release.wolos-pkgbuilds: one directory per package, every PKGBUILD, thepackagesbuild order. A package of wolos code takessource=("git+https://github.com/wonderlandos/wolos.git#commit=<sha>")like any distro package of upstream code; wolos CI asks for the bump as a pull request. The kernel is a package:linux-wolosbuilds a tag of the forkwonderlandos/linux, the only place for kernel patches.wolos-iso: the archiso profile, VM tests and release scripts. The ISO is built only from the published repo plus the Arch snapshot, never from a source tree.wolos-build(private): thewolos-buildtool and the ECS farm.
- One build path:
wolos-build pkg= devtoolsmakechrootpkgin a clean chroot, the same on a laptop, a box or ECS (--ecsonly runs it on bigger hosts).wolos-build iso,sign,publishare the other steps. The alternatives are deleted. - Build is not sign is not publish: builders never hold keys. Packages land in
[wolos-testing]; a release ISO is built and VM-tested from it;promote.ymlcopies testing to[wolos]. - Workflows have one job each and no hidden modes; builds run on ECS through OIDC (
AWS_ROLE_ARN), GitHub runners only test, sign and publish. - Contract tests move with the files they check (
checks/in wolos-pkgbuilds and wolos-iso); the few that tie wolos code to packaging files stay here and read the sibling checkouts (crates/controller/tests/support/siblings.rs).
Consequences
a wolos change reaches users only through a pinned commit in wolos-pkgbuilds, so every package names the exact source it was built from. Building a package needs network for its git sources. No compiler cache crosses a clean chroot: a kernel build is a full build (about 8 min on 64 vCPU). History of moved files is kept in the new repositories (git filter-repo); CHANGELOG.md and older ADRs keep the old paths as written.
Reference synced from wonderlandos/wolos docs/adr/0029-repository-split-and-single-build-path.md.