This subrepository holds the source for various packages and tools that support
development of the Go programming language.

To submit changes to this repository, see http://golang.org/doc/contribute.html.

app/: a.k.a the "dashboard"; the App Engine code that runs http://build.golang.org/

cmd/:

  buildlet/: HTTP server that runs on a VM and is told what to write to disk
           and what command to run. This is cross-compiled to different architectures
           and is the first program run when a builder VM comes up. It then
           is contacted by the coordinator to do a build. Not all builders use
           the buildlet (at least not yet).

  builder/: gobuilder, a Go continuous build client. The original Go builder program.

  coordinator/: daemon that runs on CoreOS on Google Compute Engine and manages
          builds using Docker containers and/or VMs as needed.

  retrybuilds/: a Go client program to delete build results from the dashboard (app)

  upload/:  a Go program to upload to Google Cloud Storage. used by Makefiles elsewhere.

  watcher/: a daemon that watches for new commits to the Go repository and
          its sub-repositories, and notifies the dashboard of those commits.

env/:     configuration files describing the environment of builders and related
          binaries. Many builders are still configured ad-hoc, without a hermetic
          environment.

types/:   a Go package contain common types used by other pieces.


If you wish to run a Go builder, please email golang-dev@googlegroups.com first.
There is documentation at https://golang.org/wiki/DashboardBuilders but
depending on the type of builder, we may want to run it ourselves, after you
prepare an environment description (resulting in a VM image) of it. See the env
directory.
