Skip to content

Latest commit

 

History

History
106 lines (80 loc) · 4.01 KB

README.md

File metadata and controls

106 lines (80 loc) · 4.01 KB

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.

For more motivation on the development of zb, see the early blog posts:

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:

  • Knowledge of using the command-line for your OS (e.g. Terminal.app, Command Prompt, etc.)
  • Go 1.23.2 or later.

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 --sandbox=0 &
  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