Skip to content

Commit

Permalink
Merge pull request #140 from jromero/feature/137
Browse files Browse the repository at this point in the history
'set-default-builder' should suggest builders
  • Loading branch information
ekcasey authored Apr 3, 2019
2 parents 7089b4c + 21e9de0 commit 1ad0d30
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 13 deletions.
14 changes: 9 additions & 5 deletions commands/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func Build(logger *logging.Logger, fetcher pack.Fetcher) *cobra.Command {
}

if bf.Config.DefaultBuilder == "" && buildFlags.Builder == "" {
suggestBuilders(logger)
suggestSettingBuilder(logger)
return MakeSoftError()
}

Expand All @@ -82,10 +82,14 @@ func Build(logger *logging.Logger, fetcher pack.Fetcher) *cobra.Command {
return cmd
}

func suggestBuilders(logger *logging.Logger) {
func suggestSettingBuilder(logger *logging.Logger) {
logger.Info("Please select a default builder with:\n")
logger.Info("\tpack set-default-builder <builder image>")
logger.Info("\nSuggested builders:\n")
logger.Info("\tpack set-default-builder <builder image>\n")
suggestBuilders(logger)
}

func suggestBuilders(logger *logging.Logger) {
logger.Info("Suggested builders:\n")
tw := tabwriter.NewWriter(logger.RawWriter(), 10, 10, 5, ' ', tabwriter.TabIndent)
for len(suggestedBuilders) > 0 {
n := rand.Intn(len(suggestedBuilders))
Expand All @@ -96,7 +100,7 @@ func suggestBuilders(logger *logging.Logger) {
suggestedBuilders = append(suggestedBuilders[:n], suggestedBuilders[n+1:]...)
}
tw.Flush()
logger.Info("\n")
logger.Info("")
logger.Tip("Learn more about a specific builder with:\n")
logger.Info("\tpack inspect-builder [builder image]")
}
Expand Down
2 changes: 1 addition & 1 deletion commands/inspect_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func InspectBuilder(logger *logging.Logger, cfg *config.Config, inspector Builde
Args: cobra.MaximumNArgs(1),
RunE: logError(logger, func(cmd *cobra.Command, args []string) error {
if cfg.DefaultBuilder == "" && len(args) == 0 {
suggestBuilders(logger)
suggestSettingBuilder(logger)
return MakeSoftError()
}

Expand Down
6 changes: 3 additions & 3 deletions commands/inspect_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ import (
h "github.com/buildpack/pack/testhelpers"
)

func TestCommands(t *testing.T) {
spec.Run(t, "Commands", testCommands, spec.Parallel(), spec.Report(report.Terminal{}))
func TestInspectBuilderCommand(t *testing.T) {
spec.Run(t, "Commands", testInspectBuilderCommand, spec.Parallel(), spec.Report(report.Terminal{}))
}

func testCommands(t *testing.T, when spec.G, it spec.S) {
func testInspectBuilderCommand(t *testing.T, when spec.G, it spec.S) {

var (
command *cobra.Command
Expand Down
2 changes: 1 addition & 1 deletion commands/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func Run(logger *logging.Logger, fetcher pack.Fetcher) *cobra.Command {
}

if bf.Config.DefaultBuilder == "" && runFlags.BuildFlags.Builder == "" {
suggestBuilders(logger)
suggestSettingBuilder(logger)
return MakeSoftError()
}

Expand Down
14 changes: 11 additions & 3 deletions commands/set_default_builder.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
package commands

import (
"github.com/spf13/cobra"

"fmt"
"github.com/buildpack/pack/config"
"github.com/buildpack/pack/logging"
"github.com/buildpack/pack/style"
"github.com/spf13/cobra"
)

func SetDefaultBuilder(logger *logging.Logger) *cobra.Command {
cmd := &cobra.Command{
Use: "set-default-builder <builder-name>",
Short: "Set default builder used by other commands",
Args: cobra.ExactArgs(1),
Long: "Set default builder used by other commands.\n\n** For suggested builders simply leave builder name empty. **",
Args: cobra.MaximumNArgs(1),
RunE: logError(logger, func(cmd *cobra.Command, args []string) error {
if len(args) < 1 || args[0] == "" {
logger.Info(fmt.Sprintf("Usage:\n\t%s\n", cmd.UseLine()))
suggestBuilders(logger)
return nil
}

cfg, err := config.NewDefault()
if err != nil {
return err
Expand All @@ -26,6 +33,7 @@ func SetDefaultBuilder(logger *logging.Logger) *cobra.Command {
return nil
}),
}

AddHelpFlag(cmd, "set-default-builder")
return cmd
}
50 changes: 50 additions & 0 deletions commands/set_default_builder_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package commands_test

import (
"bytes"
"testing"

"github.com/sclevine/spec"
"github.com/sclevine/spec/report"
"github.com/spf13/cobra"

"github.com/buildpack/pack/commands"
"github.com/buildpack/pack/logging"
h "github.com/buildpack/pack/testhelpers"
)

func TestSetDefaultBuilder(t *testing.T) {
spec.Run(t, "Commands", testSetDefaultBuilderCommand, spec.Parallel(), spec.Report(report.Terminal{}))
}

func testSetDefaultBuilderCommand(t *testing.T, when spec.G, it spec.S) {

var (
command *cobra.Command
logger *logging.Logger
outBuf bytes.Buffer
)

it.Before(func() {
logger = logging.NewLogger(&outBuf, &outBuf, false, false)
command = commands.SetDefaultBuilder(logger)
})

when("#SetDefaultBuilder", func() {
when("no builder provided", func() {
it("display suggested builders", func() {
command.SetArgs([]string{})
h.AssertNil(t, command.Execute())
h.AssertContains(t, outBuf.String(), "Suggested builders:")
})
})

when("empty builder name is provided", func() {
it("display suggested builders", func() {
command.SetArgs([]string{})
h.AssertNil(t, command.Execute())
h.AssertContains(t, outBuf.String(), "Suggested builders:")
})
})
})
}

0 comments on commit 1ad0d30

Please sign in to comment.