blob: 6e20796643bb94e80f9d41c514c32c4ffdd873d9 [file] [log] [blame]
A remote buildlet is a buildlet created or assigned by the
coordinator, on request of a client (such as cmd/gomote or
cmd/relui). The client must occasionally refresh the buildlet to
keep it alive, and the coordinator proxies all requests to it.
Currently, if the coordinator dies or restarts, all buildlets are lost.
The permission to do this is controlled by a special type of build key
starting with "user-" instead of a GOOS. The form will be of
"user-USERNAME". The user-$username and key
(via https://build.golang.org/key?builder=user-WHO) are sent via
HTTP Basic authentication.
Flow:
*) Client (e.g. pkg buildlet, via cmd/gomote or cmd/relui) makes a
POST request over key-pinned TLS to the well-known TLS cert of
farmer.golang.org
POST https://farmer.golang.org/buildlet/create HTTP/1.1
Authentication: Basic user-$username userkey
Content-Type: www/form-url-encoded
type=darwin-amd64
HTTP/1.1 200 OK
Content-Type: application/json
{
"Name": "user-adg-darwin-amd64-0",
"Type": "darwin-amd64",
"Created": "..",
"Expires": "..",
}
*) Client may list open buildlets like:
GET https://farmer.golang.org/buildlet/list HTTP/1.1
Authentication: Basic user-$username userkey
HTTP/1.1 200 OK
Content-Type: application/json
[ {"Name": ...}, {"Name": ...}]
*) Client makes requests like:
(buildlet method) https://farmer.golang.org/(normal buildlet paths) HTTP/1.1
X-Buildlet-Proxy: adg-darwin-amd64-1
Authentication: Basic buildlet-$username $buildkey
If buildlet is missing, 502 Bad Gateway.
If auth is bad, 401.
*) Client may release it by doing the normal buildlet.Client.Destroy call
to its /halt method.