• Stars
    star
    603
  • Rank 71,425 (Top 2 %)
  • Language
    Go
  • License
    BSD 3-Clause "New...
  • Created over 9 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

[mirror] Go's continuous build and release infrastructure (no stability promises)

Go Build Tools

Go Reference

This repository holds the source for various packages and tools that support Go's build system and the development of the Go programming language.

Warning: Packages here are internal to Go's build system and its needs. Some may one day be promoted to another golang.org/x repository, or they may be modified arbitrarily or even disappear altogether. In short, code in this repository is not subject to the Go 1 compatibility promise nor the Release Policy.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To contribute, see https://golang.org/doc/contribute.html.

The main issue tracker for the blog is located at https://github.com/golang/go/issues. Prefix your issue with "x/build/DIR: " in the subject line.

Overview

The main components of the Go build system are:

  • The coordinator, in cmd/coordinator/, serves https://farmer.golang.org/ and https://build.golang.org/. It runs on GKE and coordinates the whole build system. It finds work to do (both pre-submit "TryBot" work, and post-submit work) and executes builds, allocating machines to run the builds. It is the owner of all machines. It holds the state for which builds passed or failed, and the build logs.

  • The Go package in buildenv/ contains constants for where the dashboard and coordinator run, for prod, staging, and local development.

  • The buildlet, in cmd/buildlet/, is the HTTP server that runs on each worker machine to execute builds on the coordinator's behalf. This runs on every possible GOOS/GOARCH value. The buildlet binaries are stored on Google Cloud Storage and fetched per-build, so we can update the buildlet binary independently of the underlying machine images. The buildlet is the most insecure server possible: it has HTTP handlers to read & write arbitrary content to disk, and to execute any file on disk. It also has an SSH tunnel handler. The buildlet must never be exposed to the Internet. The coordinator provisions buildlets in one of three ways:

    1. by creating VMs on Google Compute Engine (GCE) with custom images configured to fetch & run the buildlet on boot, listening on port 80 in a private network.

    2. by running Linux containers (on either Google Kubernetes Engine or GCE with the Container-Optimized OS image), with the container images configured to fetch & run the buildlet on start, also listening on port 80 in a private network.

    3. by taking buildlets out of a pool of connected, dedicated machines. The buildlet can run in either listen mode (as on GCE and GKE) or in reverse mode. In reverse mode, the buildlet connects out to https://farmer.golang.org/ and registers itself with the coordinator. The TCP connection is then logically reversed (using revdial and when the coordinator needs to do a build, it makes HTTP requests to the coordinator over the already-open TCP connection.

    These three pools can be viewed at the coordinator's https://farmer.golang.org/#pools.

  • The env/ directory describes build environments. It contains scripts to create VM images, Dockerfiles to create Kubernetes containers, and instructions and tools for dedicated machines.

  • maintner in maintner/ is a library for slurping all of Go's GitHub and Gerrit state into memory. The daemon maintnerd in maintner/maintnerd/ runs on GKE and serves https://maintner.golang.org/. The daemon watches GitHub and Gerrit and appends to a mutation log whenever it sees new activity. The logs are stored on GCS and served to clients.

  • The godata package in maintner/godata/ provides a trivial API to let anybody write programs against Go's maintner corpus (all of our GitHub and Gerrit history), live up to the second. It takes a few seconds to load into memory and a few hundred MB of RAM after it downloads the mutation log from the network.

  • pubsubhelper in cmd/pubsubhelper/ is a dependency of maintnerd. It runs on GKE, is available at https://pubsubhelper.golang.org/, and runs an HTTP server to receive Webhook updates from GitHub on new activity and an SMTP server to receive new activity emails from Gerrit. It then is a pubsub system for maintnerd to subscribe to.

  • The gitmirror server in cmd/gitmirror/ mirrors Gerrit to GitHub, and also serves a mirror of the Gerrit code to the coordinator for builds, so we don't overwhelm Gerrit and blow our quota.

  • The Go gopherbot bot logic runs on GKE. The code is in cmd/gopherbot. It depends on maintner via the godata package.

  • The developer dashboard at https://dev.golang.org/ runs on GKE. Its code is in devapp/. It also depends on maintner via the godata package.

  • cmd/retrybuilds: a Go client program to delete build results from the dashboard

  • The perfdata server, in perfdata/appengine serves https://perfdata.golang.org/. It runs on App Engine and serves the benchmark result storage system.

  • The perf server, in perf/appengine serves https://perf.golang.org/. It runs on App Engine and serves the benchmark result analysis system. See its README for how to start a local testing instance.

Adding a Go Builder

If you wish to run a Go builder, please email [email protected] 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.

More Repositories

1

go

The Go programming language
Go
118,032
star
2

dep

Go dependency management tool experiment (deprecated)
Go
12,894
star
3

groupcache

groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases.
Go
12,622
star
4

protobuf

Go support for Google's protocol buffers
Go
9,463
star
5

mock

GoMock is a mocking framework for the Go programming language.
Go
9,199
star
6

tools

[mirror] Go Tools
Go
7,145
star
7

mobile

[mirror] Go on Mobile
Go
5,619
star
8

oauth2

Go OAuth2
Go
5,070
star
9

lint

[mirror] This is a linter for Go source code. (deprecated)
Go
3,978
star
10

vscode-go

Go extension for Visual Studio Code
TypeScript
3,673
star
11

glog

Leveled execution logs for Go
Go
3,498
star
12

proposal

Go Project Design Documents
Go
3,263
star
13

crypto

[mirror] Go supplementary cryptography libraries
Go
2,900
star
14

net

[mirror] Go supplementary network libraries
Go
2,781
star
15

example

Go example projects
Go
2,429
star
16

geo

S2 geometry library in Go
Go
1,622
star
17

tour

[mirror] A Tour of Go
Go
1,524
star
18

vgo

[mirror] Versioned Go Prototype
Go
1,523
star
19

snappy

The Snappy compression format in the Go programming language.
Go
1,463
star
20

sys

[mirror] Go packages for low-level interaction with the operating system
Go
1,229
star
21

leveldb

The LevelDB key-value database in the Go programming language.
Go
1,135
star
22

gddo

Go Doc Dot Org
Go
1,107
star
23

pkgsite

[mirror] Home of the pkg.go.dev website
Go
1,101
star
24

sync

[mirror] concurrency primitives
Go
830
star
25

gofrontend

Go compiler frontend (gccgo)
Go
823
star
26

exp

[mirror] Experimental and deprecated packages
Go
821
star
27

freetype

The Freetype font rasterizer in the Go programming language.
Go
758
star
28

text

[mirror] Go text processing support
Go
734
star
29

playground

[mirror] The Go Playground
Go
714
star
30

talks

Go talks
696
star
31

appengine

Go App Engine packages
Go
661
star
32

vulndb

[mirror] The Go Vulnerability Database
Go
535
star
33

image

[mirror] Go supplementary image libraries
Go
515
star
34

blog

[mirror] Go Blog (obsolete)
390
star
35

time

[mirror] Go supplementary time packages
Go
380
star
36

perf

[mirror] Performance measurement, storage, and analysis.
Go
363
star
37

website

[mirror] Home of the go.dev and golang.org websites
HTML
345
star
38

sublime-build

The official Sublime Text package for Go build system integration.
Python
341
star
39

vuln

[mirror] the database client and tools for the Go vulnerability database
Go
333
star
40

xerrors

Go
274
star
41

term

Go terminal and console support
Go
260
star
42

debug

[mirror] debugging tools
Go
225
star
43

mod

[mirror] Go module mechanics libraries
Go
183
star
44

dl

[mirror] go install golang.org/dl/go1.N@latest
Go
180
star
45

benchmarks

Benchmarks for the perf dashboard
Go
162
star
46

review

[mirror] Tool for working with Gerrit code reviews
Go
143
star
47

arch

[mirror] architecture code
Go
143
star
48

cwg

Community outreach Working Group
131
star
49

sublime-config

A library for Go environment configuration in Sublime Text
Python
84
star
50

govulncheck-action

[mirror] GitHub action for govulncheck
76
star
51

winstrap

Bootstrapping tools for windows builders
Go
48
star
52

scratch

[mirror] repository used for testing
Go
27
star
53

telemetry

[mirror] Go Telemetry services and libraries
Go
25
star
54

pkgsite-metrics

Code to serve pkg.go.dev/metrics [mirror]
Go
11
star
55

wiki

[mirror] Go Wiki
6
star
56

go-get-issue-15410

go-get-issue-15410
Go
3
star
57

.github

1
star
58

.allstar

1
star