A web user interface and API for our reproducible builds of MirageOS unikernels and host system tools.
Find a file
Hannes Mehnert 544d6883a0 Remove the /job and /job/:job/build "redirect parent" parts from the router
Also, when "remove slash and redirect" (in the "Middleware"), use a 301 status.
This is well recognized by browsers, and leads to a request to the respective
resource (in contrast to 308. 308 may be useful for other HTTP methods than GET,
but our entire redirect middleware only handles GET and HEAD anyways (POST are
excluded).
2023-08-27 22:02:47 +02:00
auth add explicit package dependencies 2021-06-09 16:03:03 +00:00
bin Fix build of builder-web with more recent packages: 2023-08-25 10:09: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 Remove the /job and /job/:job/build "redirect parent" parts from the router 2023-08-27 22:02:47 +02:00
opamdiff take care of git pins, attempt 2 2023-05-31 17:18:24 +02:00
packaging git.robur.io is now git.robur.coop 2023-06-03 15:34:42 +02:00
test Fix build of builder-web with more recent packages: 2023-08-25 10:09:21 +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 Fix build of builder-web with more recent packages: 2023-08-25 10:09:21 +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