# Build Automation ## System Prerequisites Before setting up automation, ensure the controlplane has bhyve support installed: ```sh sudo pkg install edk2-bhyve ``` This is required for testing the ISO in bhyve VMs before deployment. --- ## Primary: cron job on controlplane The simplest automation — runs weekly, no external dependencies. ```sh # /etc/cron.d/clawdie-iso # Rebuild ISO every Sunday at 03:00, publish to CMS nginx downloads 0 3 * * 0 root /home/clawdie/ai/clawdie-iso/build.sh && \ /home/clawdie/ai/clawdie-iso/scripts/publish.sh \ >> /var/log/clawdie-iso-build.log 2>&1 ``` Enable: ```sh echo '0 3 * * 0 root /home/clawdie/ai/clawdie-iso/build.sh && /home/clawdie/ai/clawdie-iso/scripts/publish.sh >> /var/log/clawdie-iso-build.log 2>&1' \ > /etc/cron.d/clawdie-iso ``` Manual trigger: ```sh cd /home/clawdie/ai/clawdie-iso && sudo ./build.sh && sudo ./scripts/publish.sh ``` --- ## Future: Forgejo Actions (push-triggered CI/CD) When the ISO build is stable and you want push-triggered rebuilds, add a self-hosted Forgejo runner on the controlplane. `code.smilepowered.org` is the source of truth; Codeberg is only the public mirror. ### Install runner ```sh pkg install forgejo-runner # or fetch binary from the upstream Forgejo runner releases ``` ### Register 1. Forgejo → `clawdie/clawdie-iso` → Settings → Actions → Runners → Create Runner → copy token 2. Run: ```sh forgejo-runner register \ --url https://code.smilepowered.org \ --token \ --name clawdie-build \ --labels freebsd \ --no-interactive ``` ### Sudo scope (build.sh + publish.sh only) ```sh cat > /usr/local/etc/sudoers.d/forgejo-runner <