github.com/jacobsoderblom/buffalo@v0.11.0/grifts/release.go (about) 1 package grifts 2 3 import ( 4 "io/ioutil" 5 "os" 6 "os/exec" 7 "path/filepath" 8 "regexp" 9 "strings" 10 11 "github.com/markbates/grift/grift" 12 "github.com/pkg/errors" 13 ) 14 15 var _ = grift.Desc("release", "Generates a CHANGELOG and creates a new GitHub release based on what is in the version.go file.") 16 var _ = grift.Add("release", func(c *grift.Context) error { 17 v, err := findVersion() 18 if err != nil { 19 return err 20 } 21 22 err = installBin() 23 if err != nil { 24 return err 25 } 26 27 err = localTest() 28 if err != nil { 29 return err 30 } 31 32 err = dockerTest() 33 if err != nil { 34 return err 35 } 36 37 grift.Run("shoulders", c) 38 39 if err := push(); err != nil { 40 return errors.WithStack(err) 41 } 42 43 err = tagRelease(v) 44 if err != nil { 45 return err 46 } 47 48 return runReleaser(v) 49 }) 50 51 func installBin() error { 52 cmd := exec.Command("go", "install", "-v", "./buffalo") 53 cmd.Stdin = os.Stdin 54 cmd.Stderr = os.Stderr 55 cmd.Stdout = os.Stdout 56 return cmd.Run() 57 } 58 59 func localTest() error { 60 cmd := exec.Command("go", "test", "-tags", "sqlite", "-v", "-race", "./...") 61 cmd.Stdin = os.Stdin 62 cmd.Stderr = os.Stderr 63 cmd.Stdout = os.Stdout 64 return cmd.Run() 65 } 66 67 func dockerTest() error { 68 cmd := exec.Command("docker", "build", ".") 69 cmd.Stdin = os.Stdin 70 cmd.Stderr = os.Stderr 71 cmd.Stdout = os.Stdout 72 return cmd.Run() 73 } 74 75 func tagRelease(v string) error { 76 cmd := exec.Command("git", "tag", v) 77 cmd.Stdin = os.Stdin 78 cmd.Stdout = os.Stdout 79 cmd.Stderr = os.Stderr 80 if err := cmd.Run(); err != nil { 81 return err 82 } 83 84 cmd = exec.Command("git", "push", "origin", "--tags") 85 cmd.Stdin = os.Stdin 86 cmd.Stdout = os.Stdout 87 cmd.Stderr = os.Stderr 88 return cmd.Run() 89 } 90 91 func runReleaser(v string) error { 92 cmd := exec.Command("goreleaser", "--rm-dist") 93 cmd.Stdin = os.Stdin 94 cmd.Stderr = os.Stderr 95 cmd.Stdout = os.Stdout 96 return cmd.Run() 97 } 98 99 func push() error { 100 cmd := exec.Command("git", "push", "origin", "master") 101 cmd.Stdin = os.Stdin 102 cmd.Stderr = os.Stderr 103 cmd.Stdout = os.Stdout 104 return cmd.Run() 105 } 106 107 func findVersion() (string, error) { 108 pwd, err := os.Getwd() 109 if err != nil { 110 return "", err 111 } 112 vfile, err := ioutil.ReadFile(filepath.Join(pwd, "buffalo/cmd/version.go")) 113 if err != nil { 114 return "", err 115 } 116 117 //var Version = "v0.4.0" 118 re := regexp.MustCompile(`const Version = "(.+)"`) 119 matches := re.FindStringSubmatch(string(vfile)) 120 if len(matches) < 2 { 121 return "", errors.New("failed to find the version") 122 } 123 v := matches[1] 124 if strings.Contains(v, "dev") { 125 return "", errors.Errorf("version can not be a dev version %s", v) 126 } 127 if !strings.HasPrefix(v, "v") { 128 return "", errors.Errorf("version must match format `v0.0.0`: %s", v) 129 } 130 return v, nil 131 }