| 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. |