codeberg.org/go-pdf/fpdf@v0.11.1/ci/run-tests.go (about) 1 // Copyright ©2021 The go-pdf Authors. All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE file. 4 5 //go:build ignore 6 // +build ignore 7 8 package main 9 10 import ( 11 "bufio" 12 "bytes" 13 "flag" 14 "fmt" 15 "log" 16 "os" 17 "os/exec" 18 "strings" 19 "time" 20 ) 21 22 func main() { 23 log.SetPrefix("ci: ") 24 log.SetFlags(0) 25 26 start := time.Now() 27 defer func() { 28 log.Printf("elapsed time: %v\n", time.Since(start)) 29 }() 30 31 var ( 32 race = flag.Bool("race", false, "enable race detector") 33 cover = flag.String("coverpkg", "", "apply coverage analysis in each test to packages matching the patterns.") 34 tags = flag.String("tags", "", "build tags") 35 verbose = flag.Bool("v", false, "enable verbose output") 36 ) 37 38 flag.Parse() 39 40 pkgs, err := pkgList() 41 if err != nil { 42 log.Fatal(err) 43 } 44 45 f, err := os.Create("coverage.txt") 46 if err != nil { 47 log.Fatal(err) 48 } 49 defer f.Close() 50 51 args := []string{"test"} 52 53 if *verbose { 54 args = append(args, "-v") 55 } 56 if *cover != "" { 57 args = append(args, "-coverprofile=profile.out", "-covermode=atomic", "-coverpkg="+*cover) 58 } 59 if *tags != "" { 60 args = append(args, "-tags="+*tags) 61 } 62 switch { 63 case *race: 64 args = append(args, "-race", "-timeout=20m") 65 default: 66 args = append(args, "-timeout=10m") 67 } 68 args = append(args, "") 69 70 for _, pkg := range pkgs { 71 args[len(args)-1] = pkg 72 cmd := exec.Command("go", args...) 73 cmd.Stdin = os.Stdin 74 cmd.Stdout = os.Stdout 75 cmd.Stderr = os.Stderr 76 err := cmd.Run() 77 if err != nil { 78 log.Fatal(err) 79 } 80 if *cover != "" { 81 profile, err := os.ReadFile("profile.out") 82 if err != nil { 83 log.Fatal(err) 84 } 85 _, err = f.Write(profile) 86 if err != nil { 87 log.Fatal(err) 88 } 89 os.Remove("profile.out") 90 } 91 } 92 93 err = f.Close() 94 if err != nil { 95 log.Fatal(err) 96 } 97 } 98 99 func pkgList() ([]string, error) { 100 out := new(bytes.Buffer) 101 cmd := exec.Command("go", "list", "./...") 102 cmd.Stdout = out 103 cmd.Stderr = os.Stderr 104 cmd.Stdin = os.Stdin 105 106 err := cmd.Run() 107 if err != nil { 108 return nil, fmt.Errorf("could not get package list: %w", err) 109 } 110 111 var pkgs []string 112 scan := bufio.NewScanner(out) 113 for scan.Scan() { 114 pkg := scan.Text() 115 if strings.Contains(pkg, "vendor") { 116 continue 117 } 118 pkgs = append(pkgs, pkg) 119 } 120 121 return pkgs, nil 122 }