From 96a6b471fa3e7e213c68295e459efb1ea07003ab Mon Sep 17 00:00:00 2001 From: Mark Bates Date: Wed, 12 Dec 2018 18:34:34 -0500 Subject: [PATCH] adds a plugins.LookPath helps work around environmental issues likes https://github.com/gobuffalo/buffalo/issues/1501 (#11) --- genny/plugin/plugin_test.go | 7 ++---- go.mod | 8 +++--- go.sum | 20 +++++++++------ packrd/packed-packr.go | 18 ++++++------- plugins/decorate.go | 50 ++++++++++++++++++++++++++++++++++++- plugins/plugins.go | 5 ++++ 6 files changed, 82 insertions(+), 26 deletions(-) diff --git a/genny/plugin/plugin_test.go b/genny/plugin/plugin_test.go index 296115e..6c8309f 100644 --- a/genny/plugin/plugin_test.go +++ b/genny/plugin/plugin_test.go @@ -1,12 +1,9 @@ package plugin import ( - "context" - "os" "strings" "testing" - "github.com/gobuffalo/genny" "github.com/gobuffalo/genny/gentest" "github.com/gobuffalo/genny/movinglater/gotools/gomods" "github.com/stretchr/testify/require" @@ -20,8 +17,8 @@ func Test_Generator(t *testing.T) { Author: "Homer Simpson", ShortName: "bar", } - run := genny.DryRunner(context.Background()) - run.Root = os.TempDir() + + run := gentest.NewRunner() gg, err := New(opts) r.NoError(err) diff --git a/go.mod b/go.mod index 3fa18fa..f242e7b 100644 --- a/go.mod +++ b/go.mod @@ -4,14 +4,14 @@ require ( github.com/BurntSushi/toml v0.3.1 github.com/gobuffalo/envy v1.6.11 github.com/gobuffalo/events v1.1.8 - github.com/gobuffalo/genny v0.0.0-20181207193730-587570ab2cf7 - github.com/gobuffalo/licenser v0.0.0-20181203160806-fe900bbede07 + github.com/gobuffalo/genny v0.0.0-20181211165820-e26c8466f14d + github.com/gobuffalo/licenser v0.0.0-20181211173111-f8a311c51159 github.com/gobuffalo/logger v0.0.0-20181127160119-5b956e21995c github.com/gobuffalo/meta v0.0.0-20181127070345-0d7e59dd540b - github.com/gobuffalo/packr/v2 v2.0.0-rc.12 + github.com/gobuffalo/packr/v2 v2.0.0-rc.13 github.com/gobuffalo/plush v3.7.32+incompatible github.com/gobuffalo/plushgen v0.0.0-20181207152837-eedb135bd51b - github.com/gobuffalo/release v1.1.3 + github.com/gobuffalo/release v1.1.6 github.com/karrick/godirwalk v1.7.7 github.com/markbates/going v1.0.2 github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2 diff --git a/go.sum b/go.sum index cb20b76..b38fc70 100644 --- a/go.sum +++ b/go.sum @@ -35,6 +35,7 @@ github.com/gobuffalo/buffalo-plugins v1.6.7/go.mod h1:ZGZRkzz2PiKWHs0z7QsPBOTo2E github.com/gobuffalo/buffalo-plugins v1.6.9/go.mod h1:yYlYTrPdMCz+6/+UaXg5Jm4gN3xhsvsQ2ygVatZV5vw= github.com/gobuffalo/buffalo-plugins v1.6.11/go.mod h1:eAA6xJIL8OuynJZ8amXjRmHND6YiusVAaJdHDN1Lu8Q= github.com/gobuffalo/buffalo-plugins v1.8.2/go.mod h1:9te6/VjEQ7pKp7lXlDIMqzxgGpjlKoAcAANdCgoR960= +github.com/gobuffalo/buffalo-plugins v1.8.3/go.mod h1:IAWq6vjZJVXebIq2qGTLOdlXzmpyTZ5iJG5b59fza5U= github.com/gobuffalo/buffalo-pop v1.0.5/go.mod h1:Fw/LfFDnSmB/vvQXPvcXEjzP98Tc+AudyNWUBWKCwQ8= github.com/gobuffalo/envy v1.6.4/go.mod h1:Abh+Jfw475/NWtYMEt+hnJWRiC8INKWibIMyNt1w2Mc= github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= @@ -84,8 +85,8 @@ github.com/gobuffalo/genny v0.0.0-20181203165245-fda8bcce96b1/go.mod h1:wpNSANu9 github.com/gobuffalo/genny v0.0.0-20181203201232-849d2c9534ea/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= github.com/gobuffalo/genny v0.0.0-20181206121324-d6fb8a0dbe36/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= github.com/gobuffalo/genny v0.0.0-20181207164119-84844398a37d/go.mod h1:y0ysCHGGQf2T3vOhCrGHheYN54Y/REj0ayd0Suf4C/8= -github.com/gobuffalo/genny v0.0.0-20181207193730-587570ab2cf7 h1:H6i/QC4xmZE7Ck64vkgsVaoaLMtnt88LsdFcZUvucNI= -github.com/gobuffalo/genny v0.0.0-20181207193730-587570ab2cf7/go.mod h1:sHnK+ZSU4e2feXP3PA29ouij6PUEiN+RCwECjCTB3yM= +github.com/gobuffalo/genny v0.0.0-20181211165820-e26c8466f14d h1:E9vKkmvd+KhQeOoKvcT4zveTKddiTopk6VifuxuO5LA= +github.com/gobuffalo/genny v0.0.0-20181211165820-e26c8466f14d/go.mod h1:sHnK+ZSU4e2feXP3PA29ouij6PUEiN+RCwECjCTB3yM= github.com/gobuffalo/github_flavored_markdown v1.0.4/go.mod h1:uRowCdK+q8d/RF0Kt3/DSalaIXbb0De/dmTqMQdkQ4I= github.com/gobuffalo/github_flavored_markdown v1.0.5/go.mod h1:U0643QShPF+OF2tJvYNiYDLDGDuQmJZXsf/bHOJPsMY= github.com/gobuffalo/github_flavored_markdown v1.0.7 h1:Vjvz4wqOnviiLEfTh5bh270b3lhpJiwwQEWOWmHMwY8= @@ -96,8 +97,9 @@ github.com/gobuffalo/licenser v0.0.0-20181025145548-437d89de4f75/go.mod h1:x3lEp github.com/gobuffalo/licenser v0.0.0-20181027200154-58051a75da95/go.mod h1:BzhaaxGd1tq1+OLKObzgdCV9kqVhbTulxOpYbvMQWS0= github.com/gobuffalo/licenser v0.0.0-20181109171355-91a2a7aac9a7/go.mod h1:m+Ygox92pi9bdg+gVaycvqE8RVSjZp7mWw75+K5NPHk= github.com/gobuffalo/licenser v0.0.0-20181128165715-cc7305f8abed/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE= -github.com/gobuffalo/licenser v0.0.0-20181203160806-fe900bbede07 h1:b/xAvvBoePXAo3TwZTml0+Kbdn2HAcwT8Gui5NpwceY= github.com/gobuffalo/licenser v0.0.0-20181203160806-fe900bbede07/go.mod h1:ph6VDNvOzt1CdfaWC+9XwcBnlSTBz2j49PBwum6RFaU= +github.com/gobuffalo/licenser v0.0.0-20181211173111-f8a311c51159 h1:bbR/354ALkf/k/CoHxgPPAToVU38WZVwXcxF/UgT7V4= +github.com/gobuffalo/licenser v0.0.0-20181211173111-f8a311c51159/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM= github.com/gobuffalo/logger v0.0.0-20181022175615-46cfb361fc27/go.mod h1:8sQkgyhWipz1mIctHF4jTxmJh1Vxhp7mP8IqbljgJZo= github.com/gobuffalo/logger v0.0.0-20181027144941-73d08d2bb969/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= github.com/gobuffalo/logger v0.0.0-20181027193913-9cf4dd0efe46/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= @@ -130,8 +132,9 @@ github.com/gobuffalo/packd v0.0.0-20181104210303-d376b15f8e96/go.mod h1:Yf2toFaI github.com/gobuffalo/packd v0.0.0-20181111195323-b2e760a5f0ff/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= github.com/gobuffalo/packd v0.0.0-20181114190715-f25c5d2471d7/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= github.com/gobuffalo/packd v0.0.0-20181124090624-311c6248e5fb/go.mod h1:Foenia9ZvITEvG05ab6XpiD5EfBHPL8A6hush8SJ0o8= -github.com/gobuffalo/packd v0.0.0-20181207120301-c49825f8f6f4 h1:bxxuyBF+Wl5me1hFJoSaXlvvtTXhIBhbKK0J7ZbcG8Y= github.com/gobuffalo/packd v0.0.0-20181207120301-c49825f8f6f4/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= +github.com/gobuffalo/packd v0.0.0-20181212173646-eca3b8fd6687 h1:uZ+G4JprR0UEq0aHZs+6eP7TEZuFfrIkmQWejIBV/QQ= +github.com/gobuffalo/packd v0.0.0-20181212173646-eca3b8fd6687/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= github.com/gobuffalo/packr v1.13.7/go.mod h1:KkinLIn/n6+3tVXMwg6KkNvWwVsrRAz4ph+jgpk3Z24= github.com/gobuffalo/packr v1.15.0/go.mod h1:t5gXzEhIviQwVlNx/+3SfS07GS+cZ2hn76WLzPp6MGI= github.com/gobuffalo/packr v1.15.1/go.mod h1:IeqicJ7jm8182yrVmNbM6PR4g79SjN9tZLH8KduZZwE= @@ -142,8 +145,9 @@ github.com/gobuffalo/packr/v2 v2.0.0-rc.8/go.mod h1:y60QCdzwuMwO2R49fdQhsjCPv7tL github.com/gobuffalo/packr/v2 v2.0.0-rc.9/go.mod h1:fQqADRfZpEsgkc7c/K7aMew3n4aF1Kji7+lIZeR98Fc= github.com/gobuffalo/packr/v2 v2.0.0-rc.10/go.mod h1:4CWWn4I5T3v4c1OsJ55HbHlUEKNWMITG5iIkdr4Px4w= github.com/gobuffalo/packr/v2 v2.0.0-rc.11/go.mod h1:JoieH/3h3U4UmatmV93QmqyPUdf4wVM9HELaHEu+3fk= -github.com/gobuffalo/packr/v2 v2.0.0-rc.12 h1:x60KPnM7EtbVdhGL8ukX9jmGAvEQcJ4SzUs9THfeXC0= github.com/gobuffalo/packr/v2 v2.0.0-rc.12/go.mod h1:FV1zZTsVFi1DSCboO36Xgs4pzCZBjB/tDV9Cz/lSaR8= +github.com/gobuffalo/packr/v2 v2.0.0-rc.13 h1:24zxY9FohMBT0JOYVjritfdGPVh9uz1YOKHqyDuEEjk= +github.com/gobuffalo/packr/v2 v2.0.0-rc.13/go.mod h1:2Mp7GhBFMdJlOK8vGfl7SYtfMP3+5roE39ejlfjw0rA= github.com/gobuffalo/plush v3.7.16+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= github.com/gobuffalo/plush v3.7.20+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= github.com/gobuffalo/plush v3.7.21+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= @@ -169,8 +173,9 @@ github.com/gobuffalo/release v1.0.54/go.mod h1:Pe5/RxRa/BE8whDpGfRqSI7D1a0evGK1T github.com/gobuffalo/release v1.0.61/go.mod h1:mfIO38ujUNVDlBziIYqXquYfBF+8FDHUjKZgYC1Hj24= github.com/gobuffalo/release v1.0.72/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU= github.com/gobuffalo/release v1.1.1/go.mod h1:Sluak1Xd6kcp6snkluR1jeXAogdJZpFFRzTYRs/2uwg= -github.com/gobuffalo/release v1.1.3 h1:G8g/L4FaMSUDFGjSklvftw9+uJk3W0dTspEhb6iFNE4= github.com/gobuffalo/release v1.1.3/go.mod h1:CuXc5/m+4zuq8idoDt1l4va0AXAn/OSs08uHOfMVr8E= +github.com/gobuffalo/release v1.1.6 h1:haad/N5NdoEKK4bmaHLuMeuZdNYIJyXmv+TA8ZwFYwo= +github.com/gobuffalo/release v1.1.6/go.mod h1:18naWa3kBsqO0cItXZNJuefCKOENpbbUIqRL1g+p6z0= github.com/gobuffalo/shoulders v1.0.1 h1:BqVJBUXlBWAf+WLhXijVk3SCpp75LXrVBiIkOCzZbNc= github.com/gobuffalo/shoulders v1.0.1/go.mod h1:V33CcVmaQ4gRUmHKwq1fiTXuf8Gp/qjQBUL5tHPmvbA= github.com/gobuffalo/syncx v0.0.0-20181120191700-98333ab04150/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= @@ -385,8 +390,9 @@ golang.org/x/tools v0.0.0-20181127232545-e782529d0ddd/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20181203210056-e5f3ab76ea4b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181205224935-3576414c54a4/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181206194817-bcd4e47d0288/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181207183836-8bc39b988060 h1:temlBo7pKzzXkM5zx/flbUGRtJhS7JMRcUwCFsDt8mI= golang.org/x/tools v0.0.0-20181207183836-8bc39b988060/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181212172921-837e80568c09 h1:WIjxC3kcRzP2DkFjzRjR1EzCaCgVPTnsv0XFO7HP3Uk= +golang.org/x/tools v0.0.0-20181212172921-837e80568c09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= diff --git a/packrd/packed-packr.go b/packrd/packed-packr.go index 480d0f7..66d3081 100644 --- a/packrd/packed-packr.go +++ b/packrd/packed-packr.go @@ -101,24 +101,24 @@ var _ = func() error { }() func() { - b := packr.New("release:genny/git", "../git/templates") - b.SetResolver("-dot-gitignore.plush", packr.Pointer{ForwardBox: gk, ForwardPath: "df2571aaa5053efc9adf6f1c937897f0"}) + b := packr.New("github.com/gobuffalo/release/genny/initgen/templates", "../initgen/templates") + b.SetResolver("-dot-travis.yml", packr.Pointer{ForwardBox: gk, ForwardPath: "d9aa2bec893011a6984e782548b10ac5"}) }() func() { - b := packr.New("release:genny:goreleaser", "../goreleaser/templates") - b.SetResolver("-dot-goreleaser.yml.plush.tmpl", packr.Pointer{ForwardBox: gk, ForwardPath: "ad3cd1c511f6e620beff7f7e5adbd878"}) + b := packr.New("github.com/gobuffalo/release/genny/makefile/templates", "../makefile/templates") + b.SetResolver("-dot-gometalinter.json", packr.Pointer{ForwardBox: gk, ForwardPath: "8be431759f42633f3108b188f8de6675"}) + b.SetResolver("Makefile.plush", packr.Pointer{ForwardBox: gk, ForwardPath: "22ff05a4b44a03ae13723f6a9efc10e2"}) }() func() { - b := packr.New("release:genny:initgen", "../initgen/templates") - b.SetResolver("-dot-travis.yml", packr.Pointer{ForwardBox: gk, ForwardPath: "d9aa2bec893011a6984e782548b10ac5"}) + b := packr.New("release:genny/git", "../git/templates") + b.SetResolver("-dot-gitignore.plush", packr.Pointer{ForwardBox: gk, ForwardPath: "df2571aaa5053efc9adf6f1c937897f0"}) }() func() { - b := packr.New("release:genny:makefile", "../makefile/templates") - b.SetResolver("-dot-gometalinter.json", packr.Pointer{ForwardBox: gk, ForwardPath: "8be431759f42633f3108b188f8de6675"}) - b.SetResolver("Makefile.plush", packr.Pointer{ForwardBox: gk, ForwardPath: "22ff05a4b44a03ae13723f6a9efc10e2"}) + b := packr.New("release:genny:goreleaser", "../goreleaser/templates") + b.SetResolver("-dot-goreleaser.yml.plush.tmpl", packr.Pointer{ForwardBox: gk, ForwardPath: "ad3cd1c511f6e620beff7f7e5adbd878"}) }() return nil diff --git a/plugins/decorate.go b/plugins/decorate.go index 7bdf069..2a28ba3 100644 --- a/plugins/decorate.go +++ b/plugins/decorate.go @@ -4,13 +4,18 @@ import ( "fmt" "os" "os/exec" + "path/filepath" "runtime" "strings" "github.com/gobuffalo/envy" + "github.com/pkg/errors" "github.com/spf13/cobra" ) +// ErrPlugMissing ... +var ErrPlugMissing = errors.New("plugin missing") + func Decorate(c Command) *cobra.Command { var flags []string if len(c.Flags) > 0 { @@ -35,7 +40,13 @@ func Decorate(c Command) *cobra.Command { ax = append(ax, args...) ax = append(ax, flags...) - ex := exec.Command(c.Binary, ax...) + + bin, err := LookPath(c.Binary) + if err != nil { + return errors.WithStack(err) + } + + ex := exec.Command(bin, ax...) if runtime.GOOS != "windows" { ex.Env = append(envy.Environ(), "BUFFALO_PLUGIN=1") } @@ -48,3 +59,40 @@ func Decorate(c Command) *cobra.Command { cc.DisableFlagParsing = true return cc } + +// LookPath ... +func LookPath(s string) (string, error) { + if _, err := os.Stat(s); err == nil { + return s, nil + } + + if lp, err := exec.LookPath(s); err == nil { + return lp, err + } + + var bin string + pwd, err := os.Getwd() + if err != nil { + return "", errors.WithStack(err) + } + + var looks []string + if from, err := envy.MustGet("BUFFALO_PLUGIN_PATH"); err == nil { + looks = append(looks, from) + } else { + looks = []string{filepath.Join(pwd, "plugins"), filepath.Join(envy.GoPath(), "bin"), envy.Get("PATH", "")} + } + + for _, p := range looks { + lp := filepath.Join(p, s) + if _, err := os.Stat(lp); err == nil { + bin = lp + break + } + } + + if len(bin) == 0 { + return "", errors.Wrapf(ErrPlugMissing, "could not find %s in %q", s, looks) + } + return bin, nil +} diff --git a/plugins/plugins.go b/plugins/plugins.go index 49ea8d9..931fdc9 100644 --- a/plugins/plugins.go +++ b/plugins/plugins.go @@ -175,10 +175,15 @@ func listPlugDeps(app meta.App) (List, error) { } for _, p := range plugs.List() { ctx, cancel := context.WithTimeout(context.Background(), timeout()) + defer cancel() bin := p.Binary if len(p.Local) != 0 { bin = p.Local } + bin, err := LookPath(bin) + if err != nil { + return list, err + } commands := askBin(ctx, bin) cancel() for _, c := range commands {