Skip to content

Commit

Permalink
Show buildpack info as a table
Browse files Browse the repository at this point in the history
- Code is mostly from this PR
#1971. PR was from before
branching strategy so it wasn't easy to merge into v7
- Info from CAPI buildpacks endpoint is put into a table, no more cli
opinion on what to show

[#173716617](https://www.pivotaltracker.com/story/show/173716617)

Co-authored-by: Steve Taylor <staylor@pivotal.io>
  • Loading branch information
nickjameswebb and staylor14 committed Aug 18, 2020
1 parent b4c8b7a commit 1681701
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 23 deletions.
44 changes: 30 additions & 14 deletions command/v7/shared/app_summary_displayer.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant"
"code.cloudfoundry.org/cli/command"
"code.cloudfoundry.org/cli/resources"
"code.cloudfoundry.org/cli/util/ui"
log "github.com/sirupsen/logrus"
)

Expand All @@ -32,8 +33,6 @@ func (display AppSummaryDisplayer) AppDisplay(summary v7action.DetailedApplicati
var lifecycleInfo []string
if summary.LifecycleType == constant.AppLifecycleTypeDocker {
lifecycleInfo = []string{display.UI.TranslateText("docker image:"), summary.CurrentDroplet.Image}
} else {
lifecycleInfo = []string{display.UI.TranslateText("buildpacks:"), display.buildpackNames(summary.CurrentDroplet.Buildpacks)}
}

keyValueTable := [][]string{
Expand All @@ -43,11 +42,17 @@ func (display AppSummaryDisplayer) AppDisplay(summary v7action.DetailedApplicati
{display.UI.TranslateText("routes:"), routeSummary(summary.Routes)},
{display.UI.TranslateText("last uploaded:"), display.getCreatedTime(summary)},
{display.UI.TranslateText("stack:"), summary.CurrentDroplet.Stack},
{display.UI.TranslateText("buildpacks:"), ""},
lifecycleInfo,
isoRow,
}

display.UI.DisplayKeyValueTable("", keyValueTable, 3)

if len(lifecycleInfo) == 0 {
display.displayBuildpackTable(summary.CurrentDroplet.Buildpacks)
}

display.displayProcessTable(summary, displayStartCommand)
}

Expand Down Expand Up @@ -138,19 +143,30 @@ func (display AppSummaryDisplayer) getCreatedTime(summary v7action.DetailedAppli
return ""
}

func (AppSummaryDisplayer) buildpackNames(buildpacks []resources.DropletBuildpack) string {
var names []string
for _, buildpack := range buildpacks {
if buildpack.DetectOutput != "" {
names = append(names, buildpack.DetectOutput)
} else {
names = append(names, buildpack.Name)
func (AppSummaryDisplayer) appInstanceDate(input time.Time) string {
return input.UTC().Format(time.RFC3339)
}

func (display AppSummaryDisplayer) displayBuildpackTable(buildpacks []resources.DropletBuildpack) {
if len(buildpacks) > 0 {
var keyValueTable = [][]string{
{
display.UI.TranslateText("name"),
display.UI.TranslateText("version"),
display.UI.TranslateText("detect output"),
display.UI.TranslateText("buildpack name"),
},
}
}

return strings.Join(names, ", ")
}
for _, buildpack := range buildpacks {
keyValueTable = append(keyValueTable, []string{
buildpack.Name,
buildpack.Version,
buildpack.DetectOutput,
buildpack.BuildpackName,
})
}

func (AppSummaryDisplayer) appInstanceDate(input time.Time) string {
return input.UTC().Format(time.RFC3339)
display.UI.DisplayTableWithHeader("\t", keyValueTable, ui.DefaultTableSpacePadding)
}
}
25 changes: 21 additions & 4 deletions command/v7/shared/app_summary_displayer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -547,8 +547,22 @@ var _ = Describe("app summary displayer", func() {
Stack: "cflinuxfs2",
Buildpacks: []resources.DropletBuildpack{
{
Name: "ruby_buildpack",
DetectOutput: "some-detect-output",
Name: "ruby_buildpack",
BuildpackName: "ruby_buildpack_name",
DetectOutput: "some-detect-output",
Version: "0.0.1",
},
{
Name: "go_buildpack_without_detect_output",
BuildpackName: "go_buildpack_name",
DetectOutput: "",
Version: "0.0.2",
},
{
Name: "go_buildpack_without_version",
BuildpackName: "go_buildpack_name",
DetectOutput: "",
Version: "",
},
{
Name: "some-buildpack",
Expand All @@ -560,8 +574,11 @@ var _ = Describe("app summary displayer", func() {
})

It("displays stack and buildpacks", func() {
Expect(testUI.Out).To(Say(`stack:\s+cflinuxfs2`))
Expect(testUI.Out).To(Say(`buildpacks:\s+some-detect-output, some-buildpack`))
Expect(testUI.Out).To(Say(`stack:\s+cflinuxfs2\n`))
Expect(testUI.Out).To(Say(`buildpacks:\s+\n`))
Expect(testUI.Out).To(Say(`name\s+version\s+detect output\s+buildpack name\n`))
Expect(testUI.Out).To(Say(`ruby_buildpack\s+0.0.1\s+some-detect-output\s+ruby_buildpack_name\n`))
Expect(testUI.Out).To(Say(`some-buildpack`))
})
})
})
Expand Down
4 changes: 2 additions & 2 deletions integration/v7/isolated/app_command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ applications:
Eventually(session).Should(Say(`routes:\s+%s\.%s`, appName, domainName))
Eventually(session).Should(Say(`last uploaded:\s+%s`, helpers.ReadableDateTimeRegex))
Eventually(session).Should(Say(`stack:\s+cflinuxfs`))
Eventually(session).Should(Say(`buildpacks:\s+staticfile`))
Eventually(session).Should(Say(`staticfile_buildpack\s+\d+.\d+.\d+\s+staticfile\s+staticfile`))
Eventually(session).Should(Say(`type:\s+web`))
Eventually(session).Should(Say(`instances:\s+\d/2`))
Eventually(session).Should(Say(`memory usage:\s+128M`))
Expand Down Expand Up @@ -236,7 +236,7 @@ applications:

It("displays the app buildpacks", func() {
session := helpers.CF("app", appName)
Eventually(session).Should(Say(`buildpacks:\s+ruby_buildpack,\s+go`))
Eventually(session).Should(Say(`ruby_buildpack\s+\d+.\d+.\d+\s+ruby`))
Eventually(session).Should(Exit(0))
})
})
Expand Down
6 changes: 4 additions & 2 deletions integration/v7/isolated/restage_command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,8 @@ applications:
Eventually(session).Should(Say(`routes:\s+%s\.%s`, appName, domainName))
Eventually(session).Should(Say(`last uploaded:\s+%s`, helpers.ReadableDateTimeRegex))
Eventually(session).Should(Say(`stack:\s+cflinuxfs`))
Eventually(session).Should(Say(`buildpacks:\s+staticfile`))
Eventually(session).Should(Say(`buildpacks:\s+\n`))
Eventually(session).Should(Say(`staticfile_buildpack\s+\d+.\d+.\d+\s+`))
Eventually(session).Should(Say(`type:\s+web`))
Eventually(session).Should(Say(`sidecars:`))
Eventually(session).Should(Say(`instances:\s+\d/2`))
Expand All @@ -218,7 +219,8 @@ applications:
Eventually(session).Should(Say(`routes:\s+%s\.%s`, appName, domainName))
Eventually(session).Should(Say(`last uploaded:\s+%s`, helpers.ReadableDateTimeRegex))
Eventually(session).Should(Say(`stack:\s+cflinuxfs`))
Eventually(session).Should(Say(`buildpacks:\s+staticfile`))
Eventually(session).Should(Say(`buildpacks:\s+\n`))
Eventually(session).Should(Say(`staticfile_buildpack\s+\d+.\d+.\d+\s+`))
Eventually(session).Should(Say(`type:\s+web`))
Eventually(session).Should(Say(`sidecars:`))
Eventually(session).Should(Say(`instances:\s+\d/2`))
Expand Down
6 changes: 5 additions & 1 deletion resources/droplet_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ type Droplet struct {
type DropletBuildpack struct {
// Name is the buildpack name.
Name string `json:"name"`
//DetectOutput is the output during buildpack detect process.
// BuildpackName is the the name reported by the buildpack.
BuildpackName string `json:"buildpack_name"`
// DetectOutput is the output of the buildpack detect script.
DetectOutput string `json:"detect_output"`
// Version is the version of the detected buildpack.
Version string `json:"version"`
}

0 comments on commit 1681701

Please sign in to comment.