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  }