Contributing
Thank you for contributing to TunaOS β an image factory that produces bootc-based desktop OS images.
Quick Startβ
brew install just podman shellcheck shfmt yq
git clone https://github.com/tuna-os/tunaOS.git && cd tunaOS
just fix && just check
Pre-Commit (mandatory)β
just fix # format shell scripts and Justfile
just check # shellcheck, yamllint, actionlint
Building Imagesβ
just build yellowfin gnome # single flavor (~25 min warm cache)
just build yellowfin kde linux/amd64 # specific platform
just build yellowfin all # all flavors
Adding a Desktop Environmentβ
No shell scripting required. Write a YAML manifest:
# 1. Create the manifest
cat > manifests/desktops/budgie.yaml <<EOF
display_manager: gdm
packages:
fedora:
packages: [budgie-desktop, budgie-extras, gdm]
el10:
packages: [budgie-desktop, gdm]
optional: [budgie-extras]
apt:
- budgie-desktop
- gdm3
versionlock: [glib2]
EOF
# 2. Add stage to Containerfile (copy from existing DE pattern)
# 3. Add flavor to .github/build-config.yml
# 4. That's it β install-desktop.sh handles the rest
Architectureβ
The build system is manifest-driven:
manifests/desktops/*.yaml β install-desktop.sh β image
Key scripts:
scripts/resolve-flavor.shβ routes flavor to Containerfile + build paramsscripts/resolve-image.shβ resolves image refs from 3 config sourcesscripts/build-image-inner.shβ the build engine (env-var driven)build_scripts/desktop/install-desktop.shβ generic DE installer (reads YAML)build_scripts/lib.shβ shared helpers (OS detection, pkg abstraction)
Full architecture: docs/AGENT_GUIDE.md
Pull Request Processβ
- Fork and create a feature branch
- Run
just fix && just check - Open PR against
main - CI validates (lint, unit tests, image build on PR)
- Merge queue handles the rest (automerge for passing PRs)
Testingβ
just test # all tests (bats + pytest)
just test-bats # shell script tests
just verify-disk image.qcow2 # QEMU boot verification
Documentationβ
- Vision β project philosophy
- Agent Guide β architecture reference
- Pipeline β CI/CD details
- Testing β test harness