github.com/sotirispl/buffalo@v0.11.1/grifts/shoulders.go (about) 1 package grifts 2 3 import ( 4 "html/template" 5 "os" 6 "os/exec" 7 "path" 8 "sort" 9 "strings" 10 11 "github.com/gobuffalo/envy" 12 "github.com/markbates/deplist" 13 "github.com/markbates/grift/grift" 14 "github.com/sirupsen/logrus" 15 ) 16 17 var _ = grift.Desc("shoulders", "Prints a listing all of the 3rd party packages used by buffalo.") 18 var _ = grift.Add("shoulders:list", func(c *grift.Context) error { 19 giants, _ := deplist.List("examples") 20 for _, k := range []string{ 21 "golang.org/x/tools/cmd/goimports", 22 } { 23 giants[k] = k 24 } 25 26 deps := make([]string, 0, len(giants)) 27 for k := range giants { 28 if !strings.Contains(k, "github.com/gobuffalo/buffalo") { 29 deps = append(deps, k) 30 } 31 } 32 sort.Strings(deps) 33 logrus.Infof(strings.Join(deps, "\n")) 34 c.Set("giants", deps) 35 return nil 36 }) 37 38 var _ = grift.Desc("shoulders", "Generates a file listing all of the 3rd party packages used by buffalo.") 39 var _ = grift.Add("shoulders", func(c *grift.Context) error { 40 err := grift.Run("shoulders:list", c) 41 if err != nil { 42 return err 43 } 44 f, err := os.Create(path.Join(envy.GoPath(), "src", "github.com", "gobuffalo", "buffalo", "SHOULDERS.md")) 45 if err != nil { 46 return err 47 } 48 t, err := template.New("").Parse(shouldersTemplate) 49 if err != nil { 50 return err 51 } 52 err = t.Execute(f, c.Value("giants")) 53 if err != nil { 54 return err 55 } 56 57 return commitAndPushShoulders() 58 }) 59 60 func commitAndPushShoulders() error { 61 cmd := exec.Command("git", "commit", "SHOULDERS.md", "-m", "Updated SHOULDERS.md") 62 cmd.Stdin = os.Stdin 63 cmd.Stderr = os.Stderr 64 cmd.Stdout = os.Stdout 65 err := cmd.Run() 66 if err != nil { 67 return err 68 } 69 70 cmd = exec.Command("git", "push", "origin") 71 cmd.Stdin = os.Stdin 72 cmd.Stderr = os.Stderr 73 cmd.Stdout = os.Stdout 74 return cmd.Run() 75 } 76 77 var shouldersTemplate = ` 78 # Buffalo Stands on the Shoulders of Giants 79 80 Buffalo does not try to reinvent the wheel! Instead, it uses the already great wheels developed by the Go community and puts them altogether in the best way possible. Without these giants this project would not be possible. Please make sure to check them out and thank them for all of their hard work. 81 82 Thank you to the following **GIANTS**: 83 84 {{ range $v := .}} 85 * [{{$v}}](https://{{$v}}) 86 {{ end }} 87 `