go-hep.org/x/hep@v0.38.1/ci/update-godoc.go (about) 1 // Copyright ©2019 The go-hep Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build ignore 6 7 package main 8 9 import ( 10 "bufio" 11 "bytes" 12 "flag" 13 "fmt" 14 "log" 15 "net/http" 16 "net/url" 17 "os" 18 "os/exec" 19 "strings" 20 21 "golang.org/x/sync/errgroup" 22 ) 23 24 func main() { 25 26 log.SetPrefix("") 27 log.SetFlags(0) 28 29 njobs := flag.Int("j", 5, "number of parallel godoc update jobs") 30 31 flag.Parse() 32 33 pkgs, err := pkgList() 34 if err != nil { 35 log.Fatal(err) 36 } 37 38 var ( 39 n = len(pkgs) / *njobs 40 grp errgroup.Group 41 ) 42 log.Printf("pkgs: %d", len(pkgs)) 43 log.Printf("njobs: %d", *njobs) 44 45 for i := 0; i < len(pkgs); i += n { 46 beg := i 47 end := beg + n 48 if end > len(pkgs) { 49 end = len(pkgs) 50 } 51 grp.Go(func() error { 52 for _, pkg := range pkgs[beg:end] { 53 log.Printf("updating %q...", pkg) 54 v := make(url.Values) 55 v.Add("path", pkg) 56 resp, err := http.PostForm("https://godoc.org/-/refresh", v) 57 if err != nil { 58 return fmt.Errorf("could not post %q: %w", pkg, err) 59 } 60 if resp.StatusCode != http.StatusOK { 61 return fmt.Errorf("invalid response status for %q: %v", pkg, resp.Status) 62 } 63 } 64 return nil 65 }) 66 } 67 68 err = grp.Wait() 69 if err != nil { 70 log.Printf("error running group: %v", err) 71 } 72 } 73 74 func pkgList() ([]string, error) { 75 out := new(bytes.Buffer) 76 cmd := exec.Command("go", "list", "./...") 77 cmd.Stdout = out 78 cmd.Stderr = os.Stderr 79 cmd.Stdin = os.Stdin 80 81 err := cmd.Run() 82 if err != nil { 83 return nil, fmt.Errorf("could not get package list: %w", err) 84 } 85 86 var pkgs []string 87 scan := bufio.NewScanner(out) 88 for scan.Scan() { 89 pkg := scan.Text() 90 if strings.Contains(pkg, "vendor") { 91 continue 92 } 93 pkgs = append(pkgs, pkg) 94 } 95 96 return pkgs, nil 97 } 98 99 /* 100 for pkg in $(go list ./...); do curl -X POST -d "path=${pkg}" https://godoc.org/-/refresh; done 101 */