A web user interface and API for our reproducible builds of MirageOS unikernels and host system tools.
Find a file
Hannes Mehnert f4da9ad666 In Opamdiff.compare, do not figure out unchanged packages.
In the View.compare_builds (/compare/..), do not display
"XX opam packages unchanged".

The reasoning is that the diff view concerns:
(a) opam packages
(b) environment variables
(c) system packages

And we're only interested in what changed in each category. The list of
unchanged opam packages is not really of interest, but adds quite some noise to
the page.
2022-08-05 11:16:21 +02:00
auth add explicit package dependencies 2021-06-09 16:03:03 +00:00
bin Improve builder-web setup error messages 2022-07-15 12:52:21 +02:00
db on the front page, order the builds by platform name 2022-07-27 09:45:01 +02:00
http_status_middleware Add http status metrics middleware 2021-06-08 12:36:53 +00:00
lib In Opamdiff.compare, do not figure out unchanged packages. 2022-08-05 11:16:21 +02:00
opamdiff In Opamdiff.compare, do not figure out unchanged packages. 2022-08-05 11:16:21 +02:00
packaging FreeBSD/create_package.sh: Do not quote glob 2022-07-05 09:37:59 +02:00
test Refactor and fix tests 2022-07-12 13:14:52 +02:00
.gitignore .gitignore: Emacs files 2022-02-01 11:30:44 +00:00
.ocp-indent Remove trailing whitespace 2022-02-07 13:51:56 +00:00
builder-web.opam map_err and bind_lwt_err will be deprecated with lwt.5.6.0 2022-07-12 13:23:23 +02:00
CHANGES.md Prepare for initial public release 2021-11-12 13:42:26 +00:00
dune-project Initial commit 2020-12-04 18:10:21 +01:00
LICENSE.md debian packaging 2021-06-29 09:41:05 +00:00
README.md minor stylistic adjustments from reading git diff -w 0afec16..6f3c89c 2022-02-24 14:05:06 +01:00

Builder-web - a web frontend for reproducible builds

Builder-web takes in submissions of builds, typically from builder, and displays the produced artifacts in a way that makes it easy to compare checksums and build status. Produced binaries can be downloaded and executed. builds.robur.coop itself runs builder-web.

Overview

Builder-web is a single binary web server using a sqlite3 database with versioned schemas. Finished builds from builder are uploaded to builder-web, stored and indexed in the database and presented in the web interface to the user. Users can:

  • Get an overview of jobs - a job is typically script or opam package that is run and builds an artifact,
  • Browse all builds of a job - each job may have multiple builds, that are executed periodically by builder
  • Browse individual build and download artifacts and build information for reproducing the same binary.
  • Compare two builds, observing the differences in used opam packages, environment variables, and system packages.
  • Search for the SHA-256 hash of a binary to view a build that resulted in that binary.

Installation

Installing from source can be done with opam: opam install builder-web.

We also provide reproducible binary packages.

Setup

Builder-web consists of a binary builder-web that runs a web server on port 3000 listening on all interfaces by default. These values can be changed with the --port and --host flags respectively. See builder-web --help for more information.

Service scripts for FreeBSD and systemd are provided.

The web server expects a sqlite3 database in its data directory. An empty database can be created with builder-db migrate.

Database migrations

The sqlite3 database builder-web uses contains versioning information. On every schema change the database schema version is updated, and migration and rollback scripts are provided. The tool for database migrations is builder-migrations. See the builder-migrations --help output for each migration for further details.

Less common workflows

Here are listed some less common but useful workflows:

Extracting builds from one server to another

This is useful for development on a separate machine that doesn't run the build jobs itself.

On the source server:

builder-db extract-build <build-hash> --dest <build-hash>.full

After copying the file over the destination server (you need a user first, see builder-db user-add --help):

curl --data-binary @<build-hash>.full http://<user>:<passwd>@localhost:<builder-web-port>/upload