]> Cypherpunks repositories - gostls13.git/commitdiff
dashboard: add gobuilder -fail mode
authorRuss Cox <rsc@golang.org>
Fri, 10 Feb 2012 04:46:48 +0000 (23:46 -0500)
committerRuss Cox <rsc@golang.org>
Fri, 10 Feb 2012 04:46:48 +0000 (23:46 -0500)
This is for filling a column with "fail", like I just did for
Windows, when the builder would get stuck running that
build.  (We have safeguards against the tests getting stuck
but this was the bootstrap build getting stuck.)

I usually use -cmd=/bin/false, but this avoids the Mercurial
checkouts, which means it runs instantly instead of requiring
~1 minute per "fail".

R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/5649049

misc/dashboard/builder/main.go

index e77107ec848943cb82c71b8d163bb0f3cd3d95a7..bce930d4028f3eae444c1b0837ecb423331d0619 100644 (file)
@@ -54,6 +54,7 @@ var (
        buildRelease  = flag.Bool("release", false, "Build and upload binary release archives")
        buildRevision = flag.String("rev", "", "Build specified revision and exit")
        buildCmd      = flag.String("cmd", filepath.Join(".", allCmd), "Build command (specify relative to go/src/)")
+       failAll = flag.Bool("fail", false, "fail all builds")
        external      = flag.Bool("external", false, "Build external packages")
        parallel      = flag.Bool("parallel", false, "Build multiple targets in parallel")
        verbose       = flag.Bool("v", false, "verbose")
@@ -87,6 +88,11 @@ func main() {
                }
                builders[i] = b
        }
+       
+       if *failAll {
+               failMode(builders)
+               return
+       }
 
        // set up work environment
        if err := os.RemoveAll(*buildroot); err != nil {
@@ -161,6 +167,21 @@ func main() {
        }
 }
 
+// go continuous fail mode
+// check for new commits and FAIL them
+func failMode(builders []*Builder) {
+       for {
+               built := false
+               for _, b := range builders {
+                       built = b.failBuild() || built
+               }
+               // stop if there was nothing to fail
+               if !built {
+                       break
+               }
+       }
+}
+
 func NewBuilder(builder string) (*Builder, error) {
        b := &Builder{name: builder}
 
@@ -350,6 +371,27 @@ func (b *Builder) buildHash(hash string) error {
        return nil
 }
 
+// failBuild checks for a new commit for this builder
+// and fails it if one is found. 
+// It returns true if a build was "attempted".
+func (b *Builder) failBuild() bool {
+       hash, err := b.todo("build-go-commit", "", "")
+       if err != nil {
+               log.Println(err)
+               return false
+       }
+       if hash == "" {
+               return false
+       }
+       
+       log.Printf("fail %s %s\n", b.name, hash)
+
+       if err := b.recordResult(false, "", hash, "", "auto-fail mode run by " + os.Getenv("USER"), 0); err != nil {
+               log.Print(err)
+       }
+       return true
+}
+
 func (b *Builder) buildSubrepos(goRoot, goHash string) {
        for _, pkg := range dashboardPackages("subrepo") {
                // get the latest todo for this package