зеркало из https://github.com/golang/build.git
197 строки
6.5 KiB
Go
197 строки
6.5 KiB
Go
// Copyright 2011 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package types contains common types used by the Go continuous build
|
|
// system.
|
|
package types
|
|
|
|
import "time"
|
|
|
|
// BuildStatus is the data structure that's marshalled as JSON
|
|
// for the https://build.golang.org/?mode=json page.
|
|
type BuildStatus struct {
|
|
// Builders is a list of all known builders.
|
|
// The order that builders appear is the same order as the build results for a revision.
|
|
Builders []string `json:"builders"`
|
|
|
|
// Revisions are the revisions shown on the front page of build.golang.org,
|
|
// in the same order. It starts with the "go" repo, from recent to old, and then
|
|
// it has 1 each of the subrepos, with only their most recent commit.
|
|
Revisions []BuildRevision `json:"revisions"`
|
|
}
|
|
|
|
// BuildRevision is the status of a commit across all builders.
|
|
// It corresponds to a single row of https://build.golang.org/
|
|
type BuildRevision struct {
|
|
// Repo is "go" for the main repo, else "tools", "crypto", "net", etc.
|
|
// These are repos as listed at https://go.googlesource.com/
|
|
Repo string `json:"repo"`
|
|
|
|
// Revision is the full git hash of the repo.
|
|
Revision string `json:"revision"`
|
|
|
|
// GoRevision is the full git hash of the "go" repo, if Repo is not "go" itself.
|
|
// Otherwise this is empty.
|
|
GoRevision string `json:"goRevision,omitempty"`
|
|
|
|
// Date is the commit date of this revision, formatted in RFC3339.
|
|
Date string `json:"date"`
|
|
|
|
// Branch is the branch of this commit, e.g. "master" or "dev.ssa".
|
|
Branch string `json:"branch"`
|
|
|
|
// GoBranch is the branch of the GoRevision, for subrepos.
|
|
// It is empty for the main repo.
|
|
// Otherwise it's of the form "master", "release-branch.go1.8", etc.
|
|
GoBranch string `json:"goBranch,omitempty"`
|
|
|
|
// Author is the author of this commit in standard git form
|
|
// "Name <email>".
|
|
Author string `json:"author"`
|
|
|
|
// Desc is the commit message of this commit. It may be
|
|
// truncated.
|
|
Desc string `json:"desc"`
|
|
|
|
// Results are the build results for each of the builders in
|
|
// the same length slice BuildStatus.Builders.
|
|
// Each string is either "" (if no data), "ok", or the URL to failure logs.
|
|
Results []string `json:"results"`
|
|
}
|
|
|
|
// SpanRecord is a datastore entity we write only at the end of a span
|
|
// (roughly a "step") of the build.
|
|
type SpanRecord struct {
|
|
BuildID string
|
|
IsTry bool // is trybot run
|
|
GoRev string
|
|
Rev string // same as GoRev for repo "go"
|
|
Repo string // "go", "net", etc.
|
|
Builder string // "linux-amd64-foo"
|
|
OS string // "linux"
|
|
Arch string // "amd64"
|
|
|
|
Event string
|
|
Error string // empty for no error
|
|
Detail string
|
|
StartTime time.Time
|
|
EndTime time.Time
|
|
Seconds float64
|
|
}
|
|
|
|
// BuildRecord is the datastore entity we write both at the beginning
|
|
// and end of a build. Some fields are not updated until the end.
|
|
type BuildRecord struct {
|
|
ID string
|
|
ProcessID string
|
|
StartTime time.Time
|
|
IsTry bool // is trybot run
|
|
IsSlowBot bool // is an explicitly requested "slowbot" builder
|
|
GoRev string
|
|
Rev string // same as GoRev for repo "go"
|
|
Repo string // "go", "net", etc.
|
|
Builder string // "linux-amd64-foo"
|
|
ContainerHost string // "" means GKE; "cos" means Container-Optimized OS
|
|
OS string // "linux"
|
|
Arch string // "amd64"
|
|
|
|
EndTime time.Time
|
|
Seconds float64
|
|
Result string // empty string, "ok", "fail"
|
|
FailureURL string `datastore:",noindex"` // deprecated; use LogURL
|
|
LogURL string `datastore:",noindex"`
|
|
|
|
// TODO(bradfitz): log which reverse buildlet we got?
|
|
// Buildlet string
|
|
}
|
|
|
|
type ReverseBuilder struct {
|
|
Name string
|
|
HostType string
|
|
ConnectedSec float64
|
|
IdleSec float64 `json:",omitempty"`
|
|
BusySec float64 `json:",omitempty"`
|
|
Version string // buildlet version
|
|
Busy bool
|
|
}
|
|
|
|
// ReverseHostStatus is part of ReverseBuilderStatus.
|
|
type ReverseHostStatus struct {
|
|
HostType string // dashboard.Hosts key
|
|
Connected int // number of connected buildlets
|
|
Expect int // expected number, from dashboard.Hosts config
|
|
Idle int
|
|
Busy int
|
|
Waiters int // number of builds waiting on a buildlet host of this type
|
|
|
|
// Machines are all connected buildlets of this host type,
|
|
// keyed by machine self-reported unique name.
|
|
Machines map[string]*ReverseBuilder
|
|
}
|
|
|
|
// ReverseBuilderStatus is https://farmer.golang.org/status/reverse.json
|
|
//
|
|
// It is used by monitoring and the Mac VMWare infrastructure to
|
|
// adjust the Mac VMs based on deaths and demand.
|
|
type ReverseBuilderStatus struct {
|
|
// Machines maps from the connected builder name (anything unique) to its status.
|
|
HostTypes map[string]*ReverseHostStatus
|
|
}
|
|
|
|
func (s *ReverseBuilderStatus) Host(hostType string) *ReverseHostStatus {
|
|
if s.HostTypes == nil {
|
|
s.HostTypes = make(map[string]*ReverseHostStatus)
|
|
}
|
|
hs, ok := s.HostTypes[hostType]
|
|
if ok {
|
|
return hs
|
|
}
|
|
hs = &ReverseHostStatus{HostType: hostType}
|
|
s.HostTypes[hostType] = hs
|
|
return hs
|
|
}
|
|
|
|
// MajorMinor is a major-minor version pair.
|
|
type MajorMinor struct {
|
|
Major, Minor int
|
|
}
|
|
|
|
// Less reports whether a is less than b.
|
|
func (a MajorMinor) Less(b MajorMinor) bool {
|
|
if a.Major != b.Major {
|
|
return a.Major < b.Major
|
|
}
|
|
return a.Minor < b.Minor
|
|
}
|
|
|
|
// BuildletWaitStatus is the periodic messages we send to "gomote create"
|
|
// clients or show on trybot status pages to tell the user who long
|
|
// they're expected to wait.
|
|
type BuildletWaitStatus struct {
|
|
// Message is a free-form message to send to the user's gomote binary.
|
|
// If present, all other fields are ignored.
|
|
Message string `json:"message"`
|
|
|
|
// Ahead are the number of waiters ahead of this buildlet request.
|
|
Ahead int `json:"ahead"`
|
|
|
|
// TODO: add number of active builds, and number of builds
|
|
// creating. And for how long. And maybe an estimate of how
|
|
// long those builds typically take? But recognize which are
|
|
// dynamic vs static (reverse) builder types and don't say
|
|
// that "1 is creating" on a reverse buildlet that can't
|
|
// actually "create" any. (It can just wait for one register
|
|
// itself)
|
|
}
|
|
|
|
// ActivePostSubmitBuild is a summary of an active build that the
|
|
// coordinator's doing. Each one is rendered on build.golang.org as a
|
|
// blue gopher which links to StatusURL to watch the build live.
|
|
type ActivePostSubmitBuild struct {
|
|
Builder string `json:"builder"` // "linux-amd64"
|
|
Commit string `json:"commit"` // hash of commit being tested
|
|
GoCommit string `json:"goCommit,omitempty"` // hash of Go commit, or empty for the main repo
|
|
StatusURL string `json:"statusURL"`
|
|
}
|