[haiku-development] Package buildmeister

  • From: "Alexander von Gluck IV" <kallisti5@xxxxxxxxxxx>
  • To: haiku-development@xxxxxxxxxxxxx
  • Date: Sun, 19 Jun 2016 04:13:06 +0000

I worked on getting the haikuporter build-master installed in a public VM 
tonight and
ran in to quite a few concerns about it. The number one issue I saw was the 
requirement
that each Haiku build-slaves be accessible via IP + SSH

Given these machines generally run behind user NAT's, and is "single-shot" I 
think the
haikuporter build-master might be *too* simplistic.

We've collected up quite a few package builders now. Here is my personal 
analysis.

I'm trying to remain independent and honest in my list given I have a horse in 
the race
(and old, un-maintained one)

I think we're all assuming haikuporter build-master is a lot more magic than it 
actually
is. Some great work has been put into it, but I want to make sure there is 
consensus
that haikuporter build-master is the way to go.

https://github.com/waddlesplash/haiku-kitchen
haiku-kitchen (waddlesplash)
  Pro
   - Runs as a service
   - Hosts a web page of build statuses
   - IRC client
   - Runs continious builds
   - Python client runs on slave and pulls work, no inbound connections to slave
   - Runs recipe lints on buildslaves
   - Documentation
  Cons
   - Node.js has extremely limited haiku community knowledge
   - Reinvents the wheel a lot (down to protocols at times)
   - Doesn't rely on haikuporter dependencies enough, tries to solve 
dependencies itself.

https://github.com/haikuports/haikuporter
haikuporter build-master mode  (mmlr)
  Pro
   - Python which has good community knowledge
   - Fully leverages haikuporter internal logic for dependencies
   - Builds repos
  Cons
   - SSH's out to slaves and requires user to open ssh port per slave. (and 
static ip)
   - Requires haikuporter + haikuports on master and each slave (does 
haikuports have to be in sync?)
   - Difficult slave configuration + lots of directory settings per slave
   - Doesn't know about architectures of buildslaves (one entire environment 
for each arch)
   - *Basic* html report of each single-shot run.
   - Single shot for one package (or a bunch? --do-bootstrap seems broken here) 
and deps
   - Lots of requirements on build-master system (package, package_repo, haiku 
repo for licenses)
   - Poor documentation (I've written whats out there now)

https://github.com/kallisti5/haikeuken
haikeuken (kallisti5)
  Pro
   - Runs as a service
   - Ruby which a few community members know
   - Fancy rails web ui w/bootstrap
   - Maintains current package and recipe database
   - Ruby client runs on slave and pulls work (REST api), no inbound 
connections to slave
   - Slave config changes without server restart
   - Stores and displays recipe info and lint status
   - Documentation
  Cons
   - Dumb dependencies. Sees a package needs built on an arch and builds it on 
a matching slave
   - Requires a full database back end
   - Packages get built, repo upload still incomplete
   - Code has gone a bit stale over time (needs updates + finished)
   - Was my second big rails app... cleanup + refactoring likely needed
   - Rails seems to be on the decline in new code


Looking for comments + feedback.
Us having a basic package build system is one of the last big blockers for a 
release.

 -- Alex

Other related posts: