Skip to content

Commit

Permalink
add mantil stage ls/use command
Browse files Browse the repository at this point in the history
  • Loading branch information
ianic committed Nov 9, 2021
1 parent 546a3f1 commit f37cf76
Show file tree
Hide file tree
Showing 6 changed files with 115 additions and 0 deletions.
44 changes: 44 additions & 0 deletions cli/cmd/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,8 @@ Stages can be deployed to any node in the workspace.`,
}
addCommand(cmd, newStageNewCommand())
addCommand(cmd, newStageDestroyCommand())
addCommand(cmd, newStageList())
addCommand(cmd, newStageUse())
return cmd
}

Expand Down Expand Up @@ -423,6 +425,48 @@ This behavior can be disabled using the --force option.`,
return cmd
}

func newStageList() *cobra.Command {
var a controller.StageArgs
cmd := &cobra.Command{
Use: "list",
Aliases: []string{"ls"},
Short: "List stages in project",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
s, err := controller.NewStage(a)
if err != nil {
return log.Wrap(err)
}
if err := s.List(); err != nil {
return log.Wrap(err)
}
return nil
},
}
return cmd
}

func newStageUse() *cobra.Command {
var a controller.StageArgs
cmd := &cobra.Command{
Use: "use <stage>",
Short: "Set default project stage",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
a.Stage = args[0]
s, err := controller.NewStage(a)
if err != nil {
return log.Wrap(err)
}
if err := s.Use(); err != nil {
return log.Wrap(err)
}
return nil
},
}
return cmd
}

func newGenerateCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "generate",
Expand Down
30 changes: 30 additions & 0 deletions cli/controller/stage.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ package controller

import (
"fmt"
"os"

"github.com/manifoldco/promptui"
"github.com/mantil-io/mantil/cli/log"
"github.com/mantil-io/mantil/cli/ui"
"github.com/mantil-io/mantil/domain"
"github.com/mantil-io/mantil/node/dto"
"github.com/olekukonko/tablewriter"
)

const DestroyHTTPMethod = "destroy"
Expand Down Expand Up @@ -155,3 +157,31 @@ func (s *Stage) destroyRequest(stage *domain.Stage) error {
}
return nil
}

func (s *Stage) List() error {
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string{"default", "name", "node", "endpoint"})
table.SetBorders(tablewriter.Border{Left: true, Top: false, Right: true, Bottom: false})
table.SetCenterSeparator("|")
for _, ps := range s.project.Stages {
def := " "
if ps.Default {
def = "*"
}
table.Append([]string{def, ps.Name, ps.NodeName, ps.Endpoints.Rest})
}
table.Render()
return nil
}

func (s *Stage) Use() error {
stage := s.project.Stage(s.Stage)
if stage == nil {
return log.Wrapf("Stage %s not found", s.Stage)
}
s.project.SetDefaultStage(s.Stage)
if err := s.store.Store(); err != nil {
return log.Wrap(err)
}
return nil
}
16 changes: 16 additions & 0 deletions domain/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,22 @@ func (p *Project) DefaultStage() *Stage {
return nil
}

func (p *Project) SetDefaultStage(name string) {
if len(p.Stages) == 0 {
return
}
s := p.Stage(name)
if s == nil || s.Default {
return
}
for _, ps := range p.Stages {
if ps.Default {
ps.Default = false
}
}
s.Default = true
}

func (p *Project) setDefaultStage() {
if len(p.Stages) == 0 {
return
Expand Down
20 changes: 20 additions & 0 deletions domain/project_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,26 @@ func TestProjectNumberOfNodes(t *testing.T) {
require.Equal(t, project.NumberOfAWSAccounts(), 2)
}

func TestProjectSetDefaultStage(t *testing.T) {
project := testProject(t)
require.Equal(t, "my-stage", project.DefaultStage().Name)

project.SetDefaultStage("non-existent")
require.Equal(t, "my-stage", project.DefaultStage().Name)

project.NewStage("stage2", "node2")
require.Equal(t, "my-stage", project.DefaultStage().Name)

project.SetDefaultStage("stage2")
require.Equal(t, "stage2", project.DefaultStage().Name)
require.False(t, project.Stage("my-stage").Default)

project.SetDefaultStage("my-stage")
require.Equal(t, "my-stage", project.DefaultStage().Name)
require.True(t, project.Stage("my-stage").Default)
require.False(t, project.Stage("stage2").Default)
}

func testProject(t *testing.T) *Project {
workspace := Workspace{
Name: "my-workspace",
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ require (
github.com/nats-io/jsm.go v0.0.26
github.com/nats-io/nats.go v1.13.0
github.com/nats-io/nkeys v0.3.0
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/pkg/errors v0.9.1
github.com/qri-io/jsonschema v0.2.2-0.20210831022256-780655b2ba0e
github.com/radovskyb/watcher v1.0.7
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,8 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0=
github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
Expand Down Expand Up @@ -383,6 +385,8 @@ github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
Expand Down

0 comments on commit f37cf76

Please sign in to comment.