A web user interface and API for our reproducible builds of MirageOS unikernels and host system tools.
Find a file
Reynir Björnsson d4da5a199f Implement builder-db vacuum {older-than,latest-n}
- `builder-db vacuum older-than [--job JOBNAME] RFC3339` removes all
  builds in `JOBNAME` (defaults to all jobs) that were built before
  `RFC3339`.
- `builder-db vacuum except-latest [--job JOBNAME] LATEST-N` removes all
  builds in `JOBNNAME` (defaults to all jobs) except for the latest
  `LATEST-N` builds (successful or not).
2024-02-12 15:09:08 +01:00
auth add explicit package dependencies 2021-06-09 16:03:03 +00:00
bin Implement builder-db vacuum {older-than,latest-n} 2024-02-12 15:09:08 +01:00
db Implement builder-db vacuum {older-than,latest-n} 2024-02-12 15:09:08 +01:00
http_status_middleware Add http status metrics middleware 2021-06-08 12:36:53 +00:00
lib model: only commit files that need to be saved 2024-01-09 16:42:13 +00:00
opamdiff take care of git pins, attempt 2 2023-05-31 17:18:24 +02:00
packaging hook scripts & repo scripts: provide and use --main-binary-filepath 2024-01-09 15:05:09 +00:00
test Implement builder-db vacuum {older-than,latest-n} 2024-02-12 15:09:08 +01: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 require cmarkit 0.3 2023-12-14 15:10:12 +01:00
CHANGES.md Prepare for initial public release 2021-11-12 13:42:26 +00:00
dune-project further CI fixes: require alcotest 1.2.0 (for check'), disable formatting (no .ocamlformat) 2023-09-18 10:52:02 +02:00
LICENSE.md debian packaging 2021-06-29 09:41:05 +00:00
README.md roburio -> robur-coop 2023-09-09 11:42:34 +02: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