Skip to content

Commit 2dda755

Browse files
authored
Merge pull request #19 from kichik/patch-1
Allow reading yaml from stdin
2 parents 28cad0b + c8d4ae8 commit 2dda755

18 files changed

+66
-19
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,6 @@ git tag -a v0.1.0 -m "First release" && git push upstream v0.1.0
147147
```
148148
replicated release inspect 130 | sed 1,4d > config.yaml
149149
vim config.yaml
150-
replicated release create --yaml "$(< config.yaml)"
150+
cat config.yaml | replicated release create --yaml -
151151
# SEQUENCE: 131
152152
```

cli/cmd/release_create.go

+9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cmd
22

33
import (
44
"fmt"
5+
"io/ioutil"
56

67
"github.com/replicatedhq/replicated/client"
78
"github.com/spf13/cobra"
@@ -29,6 +30,14 @@ func (r *runners) releaseCreate(cmd *cobra.Command, args []string) error {
2930
return fmt.Errorf("yaml is required")
3031
}
3132

33+
if createReleaseYaml == "-" {
34+
bytes, err := ioutil.ReadAll(r.stdin)
35+
if err != nil {
36+
return err
37+
}
38+
createReleaseYaml = string(bytes)
39+
}
40+
3241
// if the --promote param was used make sure it identifies exactly one
3342
// channel before proceeding
3443
var promoteChanID string

cli/cmd/release_update.go

+8
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cmd
33
import (
44
"errors"
55
"fmt"
6+
"io/ioutil"
67
"strconv"
78

89
"github.com/replicatedhq/replicated/client"
@@ -27,6 +28,13 @@ func (r *runners) releaseUpdate(cmd *cobra.Command, args []string) error {
2728
if updateReleaseYaml == "" {
2829
return fmt.Errorf("yaml is required")
2930
}
31+
if updateReleaseYaml == "-" {
32+
bytes, err := ioutil.ReadAll(r.stdin)
33+
if err != nil {
34+
return err
35+
}
36+
updateReleaseYaml = string(bytes)
37+
}
3038
if len(args) < 1 {
3139
return errors.New("release sequence is required")
3240
}

cli/cmd/root.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,17 @@ Use "{{.CommandPath}} [command] --help" for more information about a command.{{e
6868

6969
// Execute adds all child commands to the root command and sets flags appropriately.
7070
// This is called by main.main(). It only needs to happen once to the rootCmd.
71-
func Execute(w io.Writer) error {
71+
func Execute(stdin io.Reader, stdout io.Writer, stderr io.Writer) error {
72+
w := tabwriter.NewWriter(stdout, minWidth, tabWidth, padding, padChar, tabwriter.TabIndent)
73+
7274
// get api client and app ID after flags are parsed
73-
runCmds := &runners{w: tabwriter.NewWriter(w, minWidth, tabWidth, padding, padChar, tabwriter.TabIndent)}
75+
runCmds := &runners{
76+
stdin: stdin,
77+
w: w,
78+
}
79+
if stderr != nil {
80+
RootCmd.SetOutput(stderr)
81+
}
7482

7583
channelCreateCmd.RunE = runCmds.channelCreate
7684
channelInspectCmd.RunE = runCmds.channelInspect

cli/cmd/runner.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cmd
22

33
import (
4+
"io"
45
"text/tabwriter"
56

67
"github.com/replicatedhq/replicated/client"
@@ -9,7 +10,8 @@ import (
910
// Runner holds the I/O dependencies and configurations used by individual
1011
// commands, which are defined as methods on this type.
1112
type runners struct {
13+
appID string
1214
api client.Client
15+
stdin io.Reader
1316
w *tabwriter.Writer
14-
appID string
1517
}

cli/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
)
99

1010
func main() {
11-
if err := cmd.Execute(os.Stdout); err != nil {
11+
if err := cmd.Execute(os.Stdin, os.Stdout, os.Stderr); err != nil {
1212
fmt.Println(err)
1313
os.Exit(1)
1414
}

cli/test/channel_adoption_test.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ var _ = Describe("channel adoption", func() {
4343
var stderr bytes.Buffer
4444

4545
cmd.RootCmd.SetArgs([]string{"channel", "adoption", appChan.Id, "--app", app.Slug})
46-
cmd.RootCmd.SetOutput(&stderr)
47-
48-
err := cmd.Execute(&stdout)
46+
err := cmd.Execute(nil, &stdout, &stderr)
4947
assert.Nil(t, err)
5048

5149
assert.Zero(t, stderr, "Expected no stderr output")

cli/test/channel_counts_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ var _ = Describe("channel counts", func() {
4444
cmd.RootCmd.SetArgs([]string{"channel", "counts", appChan.Id, "--app", app.Slug})
4545
cmd.RootCmd.SetOutput(&stderr)
4646

47-
err := cmd.Execute(&stdout)
47+
err := cmd.Execute(nil, &stdout, &stderr)
4848
assert.Nil(t, err)
4949

5050
assert.Zero(t, stderr, "Expected no stderr output")

cli/test/channel_create_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ var _ = Describe("channel create", func() {
3838

3939
cmd.RootCmd.SetArgs([]string{"channel", "create", "--name", name, "--description", desc, "--app", app.Slug})
4040
cmd.RootCmd.SetOutput(&stderr)
41-
err := cmd.Execute(&stdout)
41+
err := cmd.Execute(nil, &stdout, &stderr)
4242

4343
assert.Nil(t, err)
4444

cli/test/channel_inspect_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ var _ = Describe("channel inspect", func() {
4242
cmd.RootCmd.SetArgs([]string{"channel", "inspect", appChan.Id, "--app", app.Slug})
4343
cmd.RootCmd.SetOutput(&stderr)
4444

45-
err := cmd.Execute(&stdout)
45+
err := cmd.Execute(nil, &stdout, &stderr)
4646
assert.Nil(t, err)
4747

4848
assert.Zero(t, stderr, "Expected no stderr output")

cli/test/channel_ls_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ var _ = Describe("channel ls", func() {
4040

4141
cmd.RootCmd.SetArgs([]string{"channel", "ls", "--app", app.Slug})
4242
cmd.RootCmd.SetOutput(&stderr)
43-
err := cmd.Execute(&stdout)
43+
err := cmd.Execute(nil, &stdout, &stderr)
4444

4545
assert.Nil(t, err)
4646

cli/test/channel_releases_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ var _ = Describe("channel releases", func() {
5252
cmd.RootCmd.SetArgs([]string{"channel", "releases", appChan.Id, "--app", app.Slug})
5353
cmd.RootCmd.SetOutput(&stderr)
5454

55-
err := cmd.Execute(&stdout)
55+
err := cmd.Execute(nil, &stdout, &stderr)
5656
assert.Nil(t, err)
5757

5858
assert.Empty(t, stderr.String(), "Expected no stderr output")

cli/test/channel_rm_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ var _ = Describe("channel rm", func() {
4141
cmd.RootCmd.SetArgs([]string{"channel", "rm", appChan.Id, "--app", app.Slug})
4242
cmd.RootCmd.SetOutput(&stderr)
4343

44-
err := cmd.Execute(&stdout)
44+
err := cmd.Execute(nil, &stdout, &stderr)
4545
assert.Nil(t, err)
4646

4747
assert.Zero(t, stderr, "Expected no stderr output")

cli/test/release_create_test.go

+23-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ var _ = Describe("release create", func() {
3434

3535
cmd.RootCmd.SetArgs([]string{"release", "create", "--yaml", yaml, "--app", app.Slug})
3636
cmd.RootCmd.SetOutput(&stderr)
37-
err := cmd.Execute(&stdout)
37+
err := cmd.Execute(nil, &stdout, &stderr)
3838

3939
assert.Nil(t, err)
4040

@@ -49,4 +49,26 @@ var _ = Describe("release create", func() {
4949
assert.False(t, r.Scan())
5050
})
5151
})
52+
53+
Context(`with "-" argument to --yaml flag in an app with no release where stdin contains valid yaml`, func() {
54+
It("should create a release from stdin", func() {
55+
var stdin = bytes.NewBufferString(yaml)
56+
var stdout bytes.Buffer
57+
var stderr bytes.Buffer
58+
59+
cmd.RootCmd.SetArgs([]string{"release", "create", "--yaml", "-", "--app", app.Slug})
60+
cmd.RootCmd.SetOutput(&stderr)
61+
err := cmd.Execute(stdin, &stdout, &stderr)
62+
63+
assert.Nil(t, err)
64+
65+
assert.Empty(t, stderr.String(), "Expected no stderr output")
66+
assert.NotEmpty(t, stdout.String(), "Expected stdout output")
67+
68+
r := bufio.NewScanner(&stdout)
69+
70+
assert.True(t, r.Scan())
71+
assert.Equal(t, "SEQUENCE: 1", r.Text())
72+
})
73+
})
5274
})

cli/test/release_inspect.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ var _ = Describe("release inspect", func() {
4242
cmd.RootCmd.SetArgs([]string{"release", "inspect", seq, "--app", app.Slug})
4343
cmd.RootCmd.SetOutput(&stderr)
4444

45-
err := cmd.Execute(&stdout)
45+
err := cmd.Execute(nil, &stdout, &stderr)
4646
assert.Nil(t, err)
4747

4848
assert.Empty(t, stderr.String(), "Expected no stderr output")

cli/test/release_ls_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ var _ = Describe("release ls", func() {
3838
cmd.RootCmd.SetArgs([]string{"release", "ls", "--app", app.Slug})
3939
cmd.RootCmd.SetOutput(&stderr)
4040

41-
err := cmd.Execute(&stdout)
41+
err := cmd.Execute(nil, &stdout, &stderr)
4242
assert.Nil(t, err)
4343

4444
assert.Empty(t, stderr.String(), "Expected no stderr output")

cli/test/release_promote_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ var _ = Describe("release promote", func() {
4949
cmd.RootCmd.SetArgs([]string{"release", "promote", sequence, appChan.Id, "--app", app.Slug})
5050
cmd.RootCmd.SetOutput(&stderr)
5151

52-
err := cmd.Execute(&stdout)
52+
err := cmd.Execute(nil, &stdout, &stderr)
5353
assert.Nil(t, err)
5454

5555
assert.Empty(t, stderr.String(), "Expected no stderr output")

cli/test/release_update_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ var _ = Describe("release update", func() {
4343
cmd.RootCmd.SetArgs([]string{"release", "update", sequence, "--yaml", yaml, "--app", app.Slug})
4444
cmd.RootCmd.SetOutput(&stderr)
4545

46-
err := cmd.Execute(&stdout)
46+
err := cmd.Execute(nil, &stdout, &stderr)
4747
assert.Nil(t, err)
4848

4949
assert.Empty(t, stderr.String(), "Expected no stderr output")

0 commit comments

Comments
 (0)