Skip to main content

Contributing

This repo is the Apple Silicon (Asahi Linux) install path for TunaOS-family bootc images: a macOS app (Bootsahi) plus a bootstrap image whose first boot runs fisherman to bootc install the image the user picked. See docs/DESIGN.md for the architecture and README.md for current status.

Building and testing​

macOS app (macos-app/Bootsahi, Swift/SwiftUI)​

cd macos-app/Bootsahi
swift build -v
swift test -v

CI (.github/workflows/bootsahi-app-build.yml) builds and tests this on macos-14 (and macos-26 for the Swift 6.2+ Liquid Glass path) on pushes to main and on PRs touching macos-app/**.

Shell scripts and the bootstrap/agent harness​

# Lint (matches CI's selftest.yml lint job)
shellcheck -S warning scripts/*.sh components/*/*.sh

# Harness selftest: payload structure + installer_data.json contract
sudo ./scripts/selftest.sh

# Backend contract: pinned asahi-installer --json (needs `pip install pytest`)
./scripts/test-backend-contract.sh

# bootsahi-agent: install-config.json -> recipe.json contract
./components/bootsahi-agent/test-agent.sh

# Disk resolution + real fisherman `validate` (needs root, gdisk, a built fisherman)
sudo ./components/bootsahi-agent/test-agent-disk.sh

.github/workflows/selftest.yml runs the lint job plus these harness tests on every PR. test-agent-install.sh (a real bootc install against a stand-in image) and test-bootstrap-boot.sh (boots the bootstrap image under qemu+U-Boot) are heavier and run as part of build-payload.yml / selftest.yml's install-selftest job rather than on every PR.

Code style​

Shell scripts are linted with shellcheck -S warning in CI (see above); there is no repository-wide style tool for the Swift app yet.

Branch and PR conventions​

Branches are generally named <category>/<short-description>, e.g. fix/..., feat/..., docs/..., sec/..., test/..., quality/... (see existing branches in this repo for examples). Reference the relevant issue number in the PR description when one exists.

Reporting issues​

Use GitHub Issues on this repository.