Skip to content

Commit

Permalink
feat: project-group view (#127)
Browse files Browse the repository at this point in the history
  • Loading branch information
benPearce1 authored Oct 21, 2022
1 parent a4f925a commit ff00390
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 16 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ go 1.19
require (
github.com/AlecAivazis/survey/v2 v2.3.5
github.com/MakeNowJust/heredoc/v2 v2.0.1
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.11.0
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.11.1
github.com/briandowns/spinner v1.19.0
github.com/google/uuid v1.3.0
github.com/hashicorp/go-multierror v1.1.1
Expand Down
16 changes: 2 additions & 14 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,8 @@ github.com/MakeNowJust/heredoc/v2 v2.0.1 h1:rlCHh70XXXv7toz95ajQWOWQnN4WNLt0TdpZ
github.com/MakeNowJust/heredoc/v2 v2.0.1/go.mod h1:6/2Abh5s+hc3g9nbWLe9ObDIOhaRrqsyY9MWy+4JdRM=
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.8.1 h1:jaMlQAeI93w/BlwUf5LNXXlm0aRneroFKuV1BH0D89s=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.8.1/go.mod h1:XWqxyDUVElUlTaPqyCBblukpsHSnPcAKkAHgJgbsIAs=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.9.1 h1:rnG8B0t759J3en86aTSi9nZ/dv8VcNIz3s+iKWQxVrI=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.9.1/go.mod h1:XWqxyDUVElUlTaPqyCBblukpsHSnPcAKkAHgJgbsIAs=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.10.0 h1:DdKeV+JYaF5Z5fl+P1LTByuZXBj+tKy+1xEuiADs/JM=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.10.0/go.mod h1:l8uu7lnA1mz/JwW3pXflKqzxTrIDfl/0r5jWBjzywTs=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.11.0 h1:olDO+5/VEF3SE/WfCtBQ10XWFj8CAlOb/+dgN52tdlw=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.11.0/go.mod h1:2j9rwRfb5qUs9PEJ3W331W84kRaNge5bed4D7JR1ruU=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.11.1 h1:KdItIUzPlq5R0g4ShECQ1NNCaOABZA5SN86St4kV2UY=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.11.1/go.mod h1:2j9rwRfb5qUs9PEJ3W331W84kRaNge5bed4D7JR1ruU=
github.com/briandowns/spinner v1.19.0 h1:s8aq38H+Qju89yhp89b4iIiMzMm8YN3p6vGpwyh/a8E=
github.com/briandowns/spinner v1.19.0/go.mod h1:mQak9GHqbspjC/5iUx3qMlIho8xBS/ppAL/hX5SmPJU=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
Expand Down Expand Up @@ -92,8 +86,6 @@ github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw=
github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ=
github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
Expand Down Expand Up @@ -272,8 +264,6 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20221012134737-56aed061732a h1:NmSIgad6KjE6VvHciPZuNRTKxGhlPfD6OA87W/PLkqg=
golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
Expand Down Expand Up @@ -403,8 +393,6 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220731174439-a90be440212d h1:Sv5ogFZatcgIMMtBSTTAgMYsicp25MXBubjXNDKwm80=
golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
Expand Down
2 changes: 1 addition & 1 deletion pkg/cmd/project/view/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ func viewRun(opts *ViewOptions) error {
cacBranch = project.PersistenceSettings.(*projects.GitPersistenceSettings).DefaultBranch
}
fmt.Fprintf(opts.out, "Version control branch: %s\n", output.Cyan(cacBranch))
if len(project.Description) == 0 {
if project.Description == "" {
fmt.Fprintln(opts.out, output.Dim(constants.NoDescription))
} else {
fmt.Fprintln(opts.out, output.Dim(project.Description))
Expand Down
2 changes: 2 additions & 0 deletions pkg/cmd/projectgroup/project-group.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"github.com/MakeNowJust/heredoc/v2"
createCmd "github.com/OctopusDeploy/cli/pkg/cmd/projectgroup/create"
listCmd "github.com/OctopusDeploy/cli/pkg/cmd/projectgroup/list"
viewCmd "github.com/OctopusDeploy/cli/pkg/cmd/projectgroup/view"
"github.com/OctopusDeploy/cli/pkg/constants"
"github.com/OctopusDeploy/cli/pkg/constants/annotations"
"github.com/OctopusDeploy/cli/pkg/factory"
Expand All @@ -27,6 +28,7 @@ func NewCmdProjectGroup(f factory.Factory) *cobra.Command {

cmd.AddCommand(createCmd.NewCmdCreate(f))
cmd.AddCommand(listCmd.NewCmdList(f))
cmd.AddCommand(viewCmd.NewCmdView(f))

return cmd
}
107 changes: 107 additions & 0 deletions pkg/cmd/projectgroup/view/view.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package view

import (
"fmt"
"github.com/MakeNowJust/heredoc/v2"
"github.com/OctopusDeploy/cli/pkg/constants"
"github.com/OctopusDeploy/cli/pkg/factory"
"github.com/OctopusDeploy/cli/pkg/output"
"github.com/OctopusDeploy/cli/pkg/usage"
"github.com/OctopusDeploy/cli/pkg/util/flag"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/client"
"github.com/pkg/browser"
"github.com/spf13/cobra"
"io"
)

const (
FlagWeb = "web"
)

type ViewFlags struct {
Web *flag.Flag[bool]
}

func NewViewFlags() *ViewFlags {
return &ViewFlags{
Web: flag.New[bool](FlagWeb, false),
}
}

type ViewOptions struct {
Client *client.Client
Host string
out io.Writer
idOrName string
flags *ViewFlags
}

func NewCmdView(f factory.Factory) *cobra.Command {
viewFlags := NewViewFlags()
cmd := &cobra.Command{
Args: usage.ExactArgs(1),
Use: "view {<name> | <id> | <slug>}",
Short: "View a project-group in an instance of Octopus Deploy",
Long: "View a project-group in an instance of Octopus Deploy",
Example: fmt.Sprintf(heredoc.Doc(`
$ %s project-group view 'Default Project Group'
$ %s project-group view ProjectGroups-9000
`), constants.ExecutableName, constants.ExecutableName),
RunE: func(cmd *cobra.Command, args []string) error {
client, err := f.GetSpacedClient()
if err != nil {
return err
}

opts := &ViewOptions{
client,
f.GetCurrentHost(),
cmd.OutOrStdout(),
args[0],
viewFlags,
}

return viewRun(opts)
},
}

flags := cmd.Flags()
flags.BoolVarP(&viewFlags.Web.Value, viewFlags.Web.Name, "w", false, "Open in web browser")

return cmd
}

func viewRun(opts *ViewOptions) error {
projectGroup, err := opts.Client.ProjectGroups.GetByIDOrName(opts.idOrName)
if err != nil {
return err
}

fmt.Fprintf(opts.out, "%s %s\n", output.Bold(projectGroup.GetName()), output.Dimf("(%s)", projectGroup.GetID()))

if projectGroup.Description == "" {
fmt.Fprintln(opts.out, output.Dim(constants.NoDescription))
} else {
fmt.Fprintln(opts.out, output.Dim(projectGroup.Description))
}

projects, err := opts.Client.ProjectGroups.GetProjects(projectGroup)
if err != nil {
return err
}
fmt.Fprintf(opts.out, output.Cyan("\nProjects:\n"))
for _, project := range projects {
fmt.Fprintf(opts.out, "%s (%s)\n", output.Bold(project.GetName()), project.Slug)
}

url := fmt.Sprintf("%s/app#/%s/projects?projectGroupId=%s", opts.Host, projectGroup.SpaceID, projectGroup.GetID())

// footer
fmt.Fprintf(opts.out, "\nView this project group in Octopus Deploy: %s\n", output.Blue(url))

if opts.flags.Web.Value {
browser.OpenURL(url)
}

return nil
}

0 comments on commit ff00390

Please sign in to comment.