github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/internal/plugins/pop/build/builder.go (about) 1 package build 2 3 import ( 4 "bytes" 5 "context" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "strings" 10 11 "github.com/gobuffalo/buffalo-cli/v2/cli/cmds/build" 12 "github.com/gobuffalo/buffalo-cli/v2/cli/internal/plugins/refresh" 13 "github.com/gobuffalo/here" 14 "github.com/gobuffalo/plugins" 15 "github.com/gobuffalo/pop/v5/soda/cmd" 16 ) 17 18 var _ build.Importer = Builder{} 19 var _ build.PackFiler = &Builder{} 20 var _ refresh.Tagger = &Builder{} 21 var _ build.BuildArger = &Builder{} 22 var _ build.Versioner = &Builder{} 23 var _ plugins.Plugin = Builder{} 24 25 const filePath = "/database.yml" 26 27 type Builder struct{} 28 29 func (Builder) PluginName() string { 30 return "pop/builder" 31 } 32 33 func (bd *Builder) GoBuildArgs(ctx context.Context, root string, args []string) ([]string, error) { 34 tags, err := bd.RefreshTags(ctx, root) 35 if err != nil || len(tags) == 0 { 36 return args, err 37 } 38 if len(tags) == 0 { 39 return nil, nil 40 } 41 x := []string{"-tags", strings.Join(tags, " ")} 42 return x, nil 43 } 44 45 func (bd *Builder) RefreshTags(ctx context.Context, root string) ([]string, error) { 46 var args []string 47 dy := filepath.Join(root, "database.yml") 48 if _, err := os.Stat(dy); err != nil { 49 return args, nil 50 } 51 52 b, err := ioutil.ReadFile(dy) 53 if err != nil { 54 return nil, plugins.Wrap(bd, err) 55 } 56 if bytes.Contains(b, []byte("sqlite")) { 57 args = append(args, "sqlite") 58 } 59 return args, nil 60 } 61 62 func (b *Builder) BuildVersion(ctx context.Context, root string) (string, error) { 63 return cmd.Version, nil 64 } 65 66 func (b *Builder) PackageFiles(ctx context.Context, root string) ([]string, error) { 67 return []string{ 68 filepath.Join(root, filePath), 69 }, nil 70 } 71 72 func (Builder) BuildImports(ctx context.Context, root string) ([]string, error) { 73 dir := filepath.Join(root, "models") 74 info, err := here.Dir(dir) 75 if err != nil { 76 return nil, nil 77 } 78 return []string{info.ImportPath}, nil 79 }