256lights / zb

An experiment in hermetic, reproducible build systems
MIT License
181 stars 3 forks source link
build-tool reproducible-builds

zb

zb is an experiment in hermetic, reproducible build systems. It has not stabilized and should not be used for production purposes.

zb is based on the ideas in The purely functional software deployment model by Eelco Dolstra and Build systems à la carte, as well as the author's experience in working with build systems. The build model is mostly the same as in Nix, but build targets are configured in Lua instead of a domain-specific language.

Examples

The hello world example:

return derivation {
  name    = "hello";
  infile  = path "hello.txt";
  builder = "/bin/sh";
  system  = "x86_64-linux";
  args    = {"-c", "while read line; do echo \"$line\"; done < $infile > $out"};
}

Other examples:

Getting Started

Prerequisites:

Linux or macOS

  1. sudo mkdir /zb && sudo chown $(id -u):$(id -g) /zb
  2. Clone this repository to your computer and cd into it.
  3. go build ./cmd/zb
  4. Start the build server (only on startup): ./zb serve &
  5. Run a build: ./zb build --file demo/hello.lua

You can use ./zb --help to get more information on commands.

Windows

Must be running Windows 10 or later, since zb depends on Windows support for Unix sockets.

  1. Install MinGW-w64. If you're using the Chocolatey package manager, you can run choco install mingw.
  2. Create a C:\zb directory.
  3. Clone this repository to your computer and cd into it.
  4. go build .\cmd\zb
  5. Start the build server in one terminal: .\zb.exe serve
  6. Run a build in another terminal: .\zb.exe build --file demo/hello_windows.lua

Next Steps

zb uses a slightly modified version of Lua 5.4. The primary difference is that strings (like those returned from the path function or the .out field of a derivation) can carry dependency information, like in the Nix expression language. This is largely hidden from the user. From there, the following libraries are available:

Objectives

License

MIT