Opened 8 years ago

Last modified 18 months ago

#51995 assigned enhancement

buildbot improvements

Reported by: mojca (Mojca Miklavec) Owned by: admin@…
Priority: Normal Milestone:
Component: buildbot/mpbb Version:
Keywords: buildbot Cc: ryandesign (Ryan Carsten Schmidt), raimue (Rainer Müller), neverpanic (Clemens Lang), larryv (Lawrence Velázquez), MarcusCalhoun-Lopez (Marcus Calhoun-Lopez), 1-61803, mascguy (Christopher Nielsen)
Port:

Description (last modified by mojca (Mojca Miklavec))

I'm opening a single ticket to list and brainstorm ideas for further improvements of the new buildbot setup. Please note that each individual item listed here would deserve its own ticket, but it makes no sense to open so many tickets at this early stage.

  • (DONE, 62834a42) avoid activating the port and its dependencies if the port was already installed (and is only deactivated),
    • but continue from the upload step (partially addressed by 4162046c, still a problem for wine)
  • create "fail cache" and don't build the port if it hasn't been changed and is known to fail; don't even install any dependency if one of the dependencies is know to fail and hasn't been modified since (the email about build failure should still be sent though)
  • provide a force flag to override the cache and attempt the build despite of cache predicting the failure
  • (see see #53976) provide means to build just a single port without any subports (for example, allow building just wxWidgets-3.0 without wxgtk-3.0 and others)
  • (see #35897, #52742) on top of the portlist (portname) variable, introduce a new variable that holds variants (say +quartz -x11) and allow building the port with those variants (the idea is not to come up with a complete list of useful builds, but to set the necessary building blocks to allow building quartz variants of ports or maybe other tricks that might occasionally be needed)
  • (see #53977) add a new variable to allow running the tests (we could later try to enable that by default for perl modules for example)
  • (see #52766) triggering the individual builds on the builder is currently in random order (not sure if this is possible to fix)
  • (see #53978) provide a variable to allow rebuilding all the ports committed between two commit numbers (useful to overcome problems due to temporary broken dependencies or broken build slaves); currently this is only possible for a single commit
  • (see #53979) Would it make any sense to merge portwatcher requests or rather not? The slight optimization might reduce the need to rebuild ports with several commits one after the other.

Display / UI

  • create a hyperlink from the builder to the watcher (currently there's just url, but it's not a clickable hyperlink)
  • create hypherlinks to individual builds from the console page (there's currently just a hyperlink that points to an useless # on the same page)
  • create navigation button for individual builds (one build back and forward)
  • (DONE; r152536) disable tracking of remaining build time based on statistics (unless the statistics gets considerably better and actually tracks builds of individual ports)
  • Is it possible to display URLs (on the watcher) to triggered builds as soon as the builds start (rather than waiting until all builds are finished)?
  • (not sure if doable) pending forced build requests don't display any info at all until they are started (one doesn't know which port builds were forced)
  • it would be nice if hyperlinks from the watcher to the builders would also contain the port name being built
  • (the port builder could theoretically display a new property with all ports being built by the same watcher; no added benefit, just giving extra info to anyone browsing the logs; super low priority, if desired at all)
  • it would be handy if the SVN revision (when applicable) was also shown on the port builder (with all the sugars ... hyperlinks, commit message etc.), not just the port watcher

Log files

  • (DONE; r151264, r151266) provide a link to main.log
  • provide a link to config.log if one exists (we can worry about more advanced situations with multiple logs later)
  • (DONE; r152521) remove stdio from the first step in builder with the sole purpose of displaying port name
  • (DONE; r151264, r151266) add some very basic build statistics (build time, size of build dir, size of destroot)
    • missing: size of binary archive, ...
    • perhaps more accuracy in timing (currently seconds are used)
  • (DONE; r151215, r151216) the builder should provide a list of dependencies to be installed as a separate log file, for example in the following format:
    Installing dependencies:
     - expat
     - jpeg
     - libiconv
     - zlib
     - libpng
     - ncurses
     - gettext
     - xz
     - tiff
    
    Installing dependency 1 of 9: expat ... [OK]
    Installing dependency 2 of 9: jpeg ... [OK]
    Installing dependency 3 of 9: libiconv ... [OK]
    Installing dependency 4 of 9: libpng ... [OK]
    Installing dependency 5 of 9: ncurses ... [OK]
    Installing dependency 6 of 9: gettext ... [FAIL]
    
  • optionally print the last few lines from main.log of the failed dependency
  • provide a shorter log about the build progress, the equivalent of running port install without verbose/debug mode; we could do that either by filtering the logs and displaying just the relevant lines or by running the installation without debug more and get debug information from the main.log instead; needs some thinking
  • steps/svn/logs/stdio on the watcher now contains email addresses (that's slightly bad for web spiders)
  • (DONE; r151267, r151268) the watcher should provide a summary of successful / broken triggered builds similar to the old status, for example something like:
    • (lots of room for improvements)
      Building 1 of 20 foo ... [OK]
      Building 2 of 20 foo-devel ... broken dependency baz [FAIL]
      Building 3 of 20 bar ... broken dependency bar-2.0 [FAIL]
      Building - of 20 bar-1.0 ... obsolete [SKIP]
      Building 4 of 20 bar-2.0 ... failed before, no attempt to rebuild [FAIL]
      Building 5 of 20 bar-3.0 ... [OK]
      ...
      
  • see the following link for some ideas of how to make custom (html) reports (it uses an old version of buildbot, but ...)

Sending e-mails

  • portwatcher should send notification about broken builds to all maintainers of the broken ports + the committer (or the user who forced the build)
  • include the aggregated statistics in the email
    • which ports failed to build
    • whether they failed because of broken dependencies (which one) or due to a build error in port itself (maybe even the phase where the error happened), see the log file proposal above
  • include the URL to the build (both the watcher and the builder if possible)

Improvements in the core

  • if the port builds locally (rather that being fetched from the binary archive), it would be nice to store the build time in the database (with some caution when builds are broken)
    • I would like to run a command that would print the list of installed port sorted by the build time (say, to determine which ports are the most demanding/important to build on the buildbot)
    • this could be useful input for determining the remaining build time on the builder (if we ever figure out how to hack the buildbot to read that piece of information from an external source)

Statistics

  • create a simple web site that collects statistics in a table, containing the following variables:
    • port name
    • version
    • revision
    • explicit variants (usually none, but +universal could be one)
    • all variants
    • OS version
    • architecture
    • builder name
    • number or link to the watcher
    • number or link to the builder
    • success: OK | FAIL | (FAIL-skip)
    • uploaded: True | False
  • and then prints out the list of latest builds grouped by Portfile + URLs to binary archives
  • also collect the lists of files + size of compressend & uncompressed archive (and build bir) + potentially the build time just for the latest successful builds

Organisation

  • move the old buildbot and mpab to a place of historic interest and rename buildbot-test to buildbot, update contrib/README to reflect the changes
  • potentially move more logic of master.cfg to a python module
  • move the list of builders from hardcoded python code to a configuration file

Change History (22)

comment:1 Changed 8 years ago by mojca (Mojca Miklavec)

Description: modified (diff)

comment:2 Changed 8 years ago by mojca (Mojca Miklavec)

Description: modified (diff)

comment:3 Changed 8 years ago by mojca (Mojca Miklavec)

Description: modified (diff)

comment:4 Changed 8 years ago by mojca (Mojca Miklavec)

Description: modified (diff)

comment:5 Changed 8 years ago by mojca (Mojca Miklavec)

Description: modified (diff)

comment:6 Changed 8 years ago by mojca (Mojca Miklavec)

Some related tickets:

  • #15712
    Add versions to platforms
    #35897
    Add a buildbot with +universal for all packages
    #37915
    Add +quartz and +x11 packages to buildbot
    #39768
    webkit-gtk @2.0.3_0: request to build +quartz by default
    #40293
    Avoid building broken/incompatible ports on buildbots (or don't report an error)
    #40294
    Avoid building ports with unmet dependencies or try to build dependencies with requested variants
    #50448
    Change filenames of binary packages built against libc++ on < 10.9
    #52000
    Add xz to "base" to allow changing the default compression format to .tar.xz in the future

Last edited 8 years ago by mojca (Mojca Miklavec) (previous) (diff)

comment:7 Changed 8 years ago by mojca (Mojca Miklavec)

Description: modified (diff)

comment:8 Changed 8 years ago by mojca (Mojca Miklavec)

Description: modified (diff)

comment:9 Changed 8 years ago by mojca (Mojca Miklavec)

Description: modified (diff)

comment:10 in reply to:  description Changed 8 years ago by larryv (Lawrence Velázquez)

Cc: larryv@… added

Replying to mojca@…:

  • move the old buildbot and mpab to a place of historic interest and rename buildbot-test to buildbot, update contrib/README to reflect the changes

This will be done as part of the GitHub migration.

comment:11 Changed 8 years ago by ryandesign (Ryan Carsten Schmidt)

Description: modified (diff)

comment:12 in reply to:  description ; Changed 8 years ago by ryandesign (Ryan Carsten Schmidt)

Replying to mojca:

I'm opening a single ticket to list and brainstorm ideas for further improvements of the new buildbot setup. Please note that each individual item listed here would deserve its own ticket, but it makes no sense to open so many tickets at this early stage.

We should open individual tickets for individual improvements that we've decided to implement, otherwise it becomes impossible to track their progress.

  • avoid activating the port and its dependencies if the port was already installed (and is only deactivated), just continue from the upload step

This is now #52765

  • create "fail cache" and don't build the port if it hasn't been changed and is known to fail; don't even install any dependency if one of the dependencies is know to fail and hasn't been modified since (the email about build failure should still be sent though)

This was done.

  • provide a force flag to override the cache and attempt the build despite of cache predicting the failure

This was done: forcing the build on the buildbot web site ignores the failcache.

  • triggering the individual builds on the builder is currently in random order (not sure if this is possible to fix)

This is now #52766

comment:13 in reply to:  12 ; Changed 8 years ago by mojca (Mojca Miklavec)

Replying to ryandesign:

We should open individual tickets for individual improvements that we've decided to implement, otherwise it becomes impossible to track their progress.

I agree. I wrote this before the new buildbot configuration went "live". I'll go through the ticket again and potentially file a few other tickets before closing this one.

I have a question though. How do I list all tickets related to buildbot or trac? Not the ports themselves, but the components of the website. I feel like we need a new field in the trac, similar to port:, only for "component" or something like that. I'm currently cheating a bit and put trac or buildbot in the port field, but this is wrong and leads to undesirable effect that the maintainer would think his port is broken.

comment:14 in reply to:  13 Changed 8 years ago by larryv (Lawrence Velázquez)

Maybe use the “server/hosting” component with “trac” and “buildbot” keywords?

comment:15 Changed 8 years ago by ryandesign (Ryan Carsten Schmidt)

Owner: changed from admin@… to admin@…
Status: newassigned

comment:16 Changed 8 years ago by raimue (Rainer Müller)

Has duplicate #52797. Sorry, wrong ticket.

Last edited 8 years ago by raimue (Rainer Müller) (previous) (diff)

comment:17 Changed 8 years ago by mojca (Mojca Miklavec)

Keywords: buildbot added
Version: 2.3.4

comment:18 Changed 8 years ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)

Cc: MarcusCalhoun-Lopez added

comment:19 Changed 8 years ago by mojca (Mojca Miklavec)

Description: modified (diff)

cross some items that have been done, open a few new tickets

comment:20 Changed 7 years ago by 1-61803

Cc: 1-61803 added

comment:21 Changed 7 years ago by neverpanic (Clemens Lang)

Component: server/hostingbuildbot/mpbb

comment:22 Changed 18 months ago by mascguy (Christopher Nielsen)

Cc: mascguy added
Note: See TracTickets for help on using tickets.