We’ve overhauled our build system on HoloPortOS, bringing the various moving parts together into continuous integration. This provides Holo developers with the security of source package management and the speed of binary package management—which in turn means faster, easier development and fewer bugs. Ultimately the overall Holo architecture becomes more robust.  


New build system on HoloPortOS

Over the past few weeks, our team has focused on integrating the various moving parts of HoloPortOS, our customized build of NixOS that powers HoloPort devices (see Holochain Dev Pulse 36: Introducing the Operating System). This customized build is necessary because it routes users’ data requests to the Holochain engine and secures access to this data via many different services, each of which are in constant development. Our challenge has therefore been to develop a system that integrates these services, reliably and continuously.

The system should allow for a one-click build process, but also (and more importantly) provide instantaneous feedback on how a change to one component will affect the entire system. That’s where the NixOS architecture comes in handy—the Nix package management system lets us create an automated environment for testing and deployment that is deterministic and permits instantaneous rollbacks in case of an emergency.

How it works

To see how we’re using integration in action, it’s helpful to look at the default.nix configuration file in HoloPortOS (implemented within the overlays mechanism of NixOS, which allows for customization of NixOS packages). We’ve set it up so that each element of HoloPortOS is pinned inside the file. Every time this file is changed, it triggers an automated build process. During this process, the system runs a set of tests specific to the updated element, as well as a set of integration tests for the entire OS.

Automated Build Process

After successful testing, a new package, called a derivation, is built from the source code and uploaded to the binary cache. This derivation contains a compiled version of an updated element that is ready to be installed in HoloPortOS, along with instructions on how to implement it. In essence, this integration process lets us combine the security of source package management with the speed of binary package management.

What this means for you

This new build system will have benefits for both Holo Central developers and end users. With a faster, more seamless development process, developers can rapidly iterate over versions and develop multiple components in parallel.

All changes can be tested and delivered into our Testnet with just a few keystrokes. End users can expect shorter spans of time between releases, as well as fewer bugs, as the number of tests that can be performed grows. The result is increased ease of use across the board.

All of this will help to bolster the overall Holo architecture, creating a self-updating system in which users do not need to maintain HoloPorts.

Big thanks!

This new system required switching to a different pattern of design, so we want to thank Sam Rose and Yegor Timoshenko for helping make the transition as smooth as possible.

Development status: