github.com/jacobsoderblom/buffalo@v0.11.0/buffalo/cmd/build/builder.go (about)

     1  package build
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  
     7  	"github.com/gobuffalo/packr/builder"
     8  	"github.com/pkg/errors"
     9  	"github.com/sirupsen/logrus"
    10  )
    11  
    12  // Builder builds a Buffalo binary
    13  type Builder struct {
    14  	Options
    15  	ctx       context.Context
    16  	steps     []func() error
    17  	cleanups  []func() error
    18  	originals map[string][]byte
    19  }
    20  
    21  // New Builder
    22  func New(ctx context.Context, opts Options) *Builder {
    23  	b := &Builder{
    24  		ctx:       ctx,
    25  		Options:   opts,
    26  		cleanups:  []func() error{},
    27  		originals: map[string][]byte{},
    28  	}
    29  
    30  	b.steps = []func() error{
    31  		b.prepTarget,
    32  		b.validateTemplates,
    33  		b.transformMain,
    34  		b.createBuildMain,
    35  		b.prepAPackage,
    36  		b.buildAInit,
    37  		b.buildADatabase,
    38  		b.buildAssets,
    39  		b.buildBin,
    40  	}
    41  
    42  	return b
    43  }
    44  
    45  // Run builds a Buffalo binary
    46  func (b *Builder) Run() error {
    47  	defer b.Cleanup()
    48  	logrus.Debug(b.Options)
    49  
    50  	for _, s := range b.steps {
    51  		err := s()
    52  		if err != nil {
    53  			return errors.WithStack(err)
    54  		}
    55  		os.Chdir(b.Root)
    56  	}
    57  	return nil
    58  }
    59  
    60  // Cleanup after run. This is automatically run at the end of `Run`.
    61  // It is provided publicly in-case a manual clean up is necessary.
    62  func (b *Builder) Cleanup() error {
    63  	builder.Clean(b.Root)
    64  	me := multiError{}
    65  	for _, c := range b.cleanups {
    66  		err := c()
    67  		if err != nil {
    68  			me = append(me, errors.Errorf("error while cleaning up: %+v", err))
    69  		}
    70  	}
    71  	if len(me) > 0 {
    72  		logrus.Error(me)
    73  		return me
    74  	}
    75  	return nil
    76  }