Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,14 @@ require (
github.com/docker/docker v20.10.7+incompatible
github.com/emicklei/proto v1.9.0
github.com/fatih/color v1.10.0
github.com/ghodss/yaml v1.0.0
github.com/go-git/go-git/v5 v5.1.0
github.com/gobuffalo/genny v0.6.0
github.com/gobuffalo/logger v1.0.3
github.com/gobuffalo/packd v1.0.0
github.com/gobuffalo/plush v3.8.3+incompatible
github.com/gobuffalo/plushgen v0.1.2
github.com/goccy/go-yaml v1.8.0
github.com/goccy/go-yaml v1.9.2
github.com/google/go-github/v37 v37.0.0
github.com/gookit/color v1.2.7
github.com/gorilla/mux v1.8.0
Expand Down
8 changes: 6 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,7 @@ github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXt
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
github.com/gertd/go-pluralize v0.1.7/go.mod h1:O4eNeeIf91MHh1GJ2I47DNtaesm66NYvjYgAahcqSDQ=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0=
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
Expand Down Expand Up @@ -491,10 +492,13 @@ github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL9
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
Expand Down Expand Up @@ -532,8 +536,9 @@ github.com/gobuffalo/uuid v2.0.5+incompatible h1:c5uWRuEnYggYCrT9AJm0U2v1QTG7OVD
github.com/gobuffalo/uuid v2.0.5+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE=
github.com/gobuffalo/validate v2.0.3+incompatible h1:6f4JCEz11Zi6iIlexMv7Jz10RBPvgI795AOaubtCwTE=
github.com/gobuffalo/validate v2.0.3+incompatible/go.mod h1:N+EtDe0J8252BgfzQUChBgfd6L93m9weay53EWFVsMM=
github.com/goccy/go-yaml v1.8.0 h1:WCe9sBiI0oZb6EC6f3kq3dv0+aEiNdstT7b4xxq4MJQ=
github.com/goccy/go-yaml v1.8.0/go.mod h1:wS4gNoLalDSJxo/SpngzPQ2BN4uuZVLCmbM4S3vd4+Y=
github.com/goccy/go-yaml v1.9.2 h1:2Njwzw+0+pjU2gb805ZC1B/uBuAs2VcZ3K+ZgHwDs7w=
github.com/goccy/go-yaml v1.9.2/go.mod h1:U/jl18uSupI5rdI2jmuCswEA2htH9eXfferR3KfscvA=
github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
Expand Down Expand Up @@ -1713,7 +1718,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.30.0 h1:Wk0Z37oBmKj9/n+tPyBHZmeL19LaCoK3Qq48VwYENss=
gopkg.in/go-playground/validator.v9 v9.30.0/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
Expand Down
17 changes: 14 additions & 3 deletions starport/pkg/chaincmd/runner/account.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,22 @@ var (
// returns with an error if the operation went unsuccessful or an account with the provided name
// already exists.
func (r Runner) AddAccount(ctx context.Context, name, mnemonic string) (Account, error) {
b := &bytes.Buffer{}
b := newBuffer()

// check if account already exists.
var accounts []Account
if err := r.run(ctx, runOptions{stdout: b}, r.chainCmd.ListKeysCommand()); err != nil {
return Account{}, err
}
if err := json.NewDecoder(b).Decode(&accounts); err != nil {

data, err := b.JSONEnsuredBytes()
if err != nil {
return Account{}, err
}
if err := json.Unmarshal(data, &accounts); err != nil {
return Account{}, err
}

for _, account := range accounts {
if account.Name == name {
return Account{}, ErrAccountAlreadyExists
Expand Down Expand Up @@ -72,7 +78,12 @@ func (r Runner) AddAccount(ctx context.Context, name, mnemonic string) (Account,
}, r.chainCmd.AddKeyCommand(name)); err != nil {
return Account{}, err
}
if err := json.NewDecoder(b).Decode(&account); err != nil {

data, err := b.JSONEnsuredBytes()
if err != nil {
return Account{}, err
}
if err := json.Unmarshal(data, &account); err != nil {
return Account{}, err
}

Expand Down
29 changes: 21 additions & 8 deletions starport/pkg/chaincmd/runner/chain.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,14 +118,19 @@ type NodeStatus struct {

// Status returns the node's status.
func (r Runner) Status(ctx context.Context) (NodeStatus, error) {
b := &bytes.Buffer{}
b := newBuffer()

if err := r.run(ctx, runOptions{stdout: b, stderr: b}, r.chainCmd.StatusCommand()); err != nil {
return NodeStatus{}, err
}

var chainID string

data, err := b.JSONEnsuredBytes()
if err != nil {
return NodeStatus{}, err
}

switch r.chainCmd.SDKVersion() {
case cosmosver.StargateZeroFourtyAndAbove:
out := struct {
Expand All @@ -134,7 +139,7 @@ func (r Runner) Status(ctx context.Context) (NodeStatus, error) {
} `json:"NodeInfo"`
}{}

if err := json.NewDecoder(b).Decode(&out); err != nil {
if err := json.Unmarshal(data, &out); err != nil {
return NodeStatus{}, err
}

Expand All @@ -146,7 +151,7 @@ func (r Runner) Status(ctx context.Context) (NodeStatus, error) {
} `json:"node_info"`
}{}

if err := json.NewDecoder(b).Decode(&out); err != nil {
if err := json.Unmarshal(data, &out); err != nil {
return NodeStatus{}, err
}

Expand All @@ -160,7 +165,7 @@ func (r Runner) Status(ctx context.Context) (NodeStatus, error) {

// BankSend sends amount from fromAccount to toAccount.
func (r Runner) BankSend(ctx context.Context, fromAccount, toAccount, amount string) error {
b := &bytes.Buffer{}
b := newBuffer()
opt := []step.Option{
r.chainCmd.BankSendCommand(fromAccount, toAccount, amount),
}
Expand Down Expand Up @@ -188,7 +193,11 @@ func (r Runner) BankSend(ctx context.Context, fromAccount, toAccount, amount str
Error string `json:"raw_log"`
}{}

if err := json.NewDecoder(b).Decode(&out); err != nil {
data, err := b.JSONEnsuredBytes()
if err != nil {
return err
}
if err := json.Unmarshal(data, &out); err != nil {
return err
}

Expand Down Expand Up @@ -235,7 +244,7 @@ type EventAttribute struct {
Value string
}

// r queries tx events by event selectors.
// QueryTxEvents queries tx events by event selectors.
func (r Runner) QueryTxEvents(
ctx context.Context,
selector EventSelector,
Expand All @@ -253,7 +262,7 @@ func (r Runner) QueryTxEvents(
query := strings.Join(list, "&")

// execute the commnd and parse the output.
b := &bytes.Buffer{}
b := newBuffer()

if err := r.run(ctx, runOptions{stdout: b}, r.chainCmd.QueryTxEventsCommand(query)); err != nil {
return nil, err
Expand All @@ -274,7 +283,11 @@ func (r Runner) QueryTxEvents(
} `json:"txs"`
}{}

if err := json.NewDecoder(b).Decode(&out); err != nil {
data, err := b.JSONEnsuredBytes()
if err != nil {
return nil, err
}
if err := json.Unmarshal(data, &out); err != nil {
return nil, err
}

Expand Down
27 changes: 27 additions & 0 deletions starport/pkg/chaincmd/runner/runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@
package chaincmdrunner

import (
"bytes"
"context"
"io"
"io/ioutil"

"github.com/ghodss/yaml"
"github.com/pkg/errors"
"github.com/tendermint/starport/starport/pkg/chaincmd"
"github.com/tendermint/starport/starport/pkg/cmdrunner"
Expand Down Expand Up @@ -150,3 +152,28 @@ func (r Runner) run(ctx context.Context, runOptions runOptions, stepOptions ...s

return errors.Wrap(err, errb.GetBuffer().String())
}

func newBuffer() *buffer {
return &buffer{
Buffer: new(bytes.Buffer),
}
}

// buffer is a bytes.Buffer with additional features.
type buffer struct {
*bytes.Buffer
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
*bytes.Buffer
b *bytes.Buffer

A good suggestion from the Uber code style

Copy link
Member Author

@ilgooz ilgooz Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

uber looks like very opinionated on this. although it does not apply to our case. they recommend avoiding it for public struct in our case, buffer is a private one.

}

// JSONEnsuredBytes ensures that encoding format for returned bytes is always
// JSON even if the written data is originally encoded in YAML.
func (b *buffer) JSONEnsuredBytes() ([]byte, error) {
bytes := b.Buffer.Bytes()

var out interface{}

if err := yaml.Unmarshal(bytes, &out); err == nil {
return yaml.YAMLToJSON(bytes)
}

return bytes, nil
}