ignite / cli

Ignite is a CLI tool and hub designed for constructing Proof of Stake Blockchains rooted in Cosmos-SDK
https://ignite.com
Other
1.26k stars 549 forks source link

Ignite generate openapi inconsistencies with pagination.reverse #3465

Closed jcompagni10 closed 1 year ago

jcompagni10 commented 1 year ago

Describe the bug When running ignite generate openapi the resulting openapi.yml sometimes removes the pagination.reverse field from some queries

-        - name: pagination.reverse
-          description: >-
-            reverse is set to true if results are to be returned in the
-            descending order.
-
-
-            Since: cosmos-sdk 0.43
-          in: query
-          required: false
-          type: boolean

This error seems to be very unpredictable. Sometimes the pagination.reverse field is included, and sometimes it's removed. I cannot find any way to consistently replicate the bug.

To reproduce Steps to reproduce the behavior:

  1. run ignite generate openapi
  2. Make small changes to .proto files, repeat
  3. Eventually ignite generates an openapi.yml with the field missing

What version are you using? Error has occurred on both v0.23.0 and v0.25.2

go.mod

go 1.18

require (
    github.com/cosmos/admin-module v0.0.0
    github.com/cosmos/cosmos-sdk v0.46.6
    github.com/cosmos/ibc-go/v3 v3.4.0
    github.com/cosmos/interchain-security v1.0.0-rc1
    github.com/gogo/protobuf v1.3.3
    github.com/golang/protobuf v1.5.3
    github.com/gorilla/mux v1.8.0
    github.com/grpc-ecosystem/grpc-gateway v1.16.0
    github.com/ignite/cli v0.25.2
    github.com/spf13/cast v1.5.0
    github.com/spf13/cobra v1.6.1
    github.com/stretchr/testify v1.8.1
    github.com/tendermint/spm v0.1.9
    github.com/tendermint/tendermint v0.34.24
    github.com/tendermint/tm-db v0.6.7
    google.golang.org/genproto v0.0.0-20230223222841-637eb2293923
    google.golang.org/grpc v1.53.0
    gopkg.in/yaml.v2 v2.4.0
)

require (
    github.com/ghodss/yaml v1.0.0 // indirect
    github.com/google/go-cmp v0.5.9 // indirect
    github.com/pkg/errors v0.9.1 // indirect
)

require (
    filippo.io/edwards25519 v1.0.0-rc.1 // indirect
    github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
    github.com/99designs/keyring v1.2.1 // indirect
    github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect
    github.com/Workiva/go-datastructures v1.0.53 // indirect
    github.com/armon/go-metrics v0.4.0 // indirect
    github.com/beorn7/perks v1.0.1 // indirect
    github.com/bgentry/speakeasy v0.1.0 // indirect
    github.com/btcsuite/btcd v0.22.1 // indirect
    github.com/cenkalti/backoff/v4 v4.1.3 // indirect
    github.com/cespare/xxhash v1.1.0 // indirect
    github.com/cespare/xxhash/v2 v2.1.2 // indirect
    github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect
    github.com/confio/ics23/go v0.7.0 // indirect
    github.com/cosmos/btcutil v1.0.4 // indirect
    github.com/cosmos/gaia/v8 v8.0.0-20230108202408-c3c3586e5ab8 // indirect
    github.com/cosmos/go-bip39 v1.0.0 // indirect
    github.com/cosmos/gorocksdb v1.2.0 // indirect
    github.com/cosmos/iavl v0.19.4 // indirect
    github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect
    github.com/cosmos/ledger-go v0.9.3 // indirect
    github.com/creachadair/taskgroup v0.3.2 // indirect
    github.com/danieljoos/wincred v1.1.2 // indirect
    github.com/davecgh/go-spew v1.1.1 // indirect
    github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
    github.com/dgraph-io/badger/v2 v2.2007.4 // indirect
    github.com/dgraph-io/ristretto v0.1.0 // indirect
    github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
    github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac // indirect
    github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
    github.com/felixge/httpsnoop v1.0.2 // indirect
    github.com/fsnotify/fsnotify v1.6.0 // indirect
    github.com/go-kit/kit v0.12.0 // indirect
    github.com/go-kit/log v0.2.1 // indirect
    github.com/go-logfmt/logfmt v0.5.1 // indirect
    github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
    github.com/gogo/gateway v1.1.0 // indirect
    github.com/golang/glog v1.0.0 // indirect
    github.com/golang/mock v1.6.0 // indirect
    github.com/golang/snappy v0.0.4 // indirect
    github.com/google/btree v1.0.1 // indirect
    github.com/google/orderedcode v0.0.1 // indirect
    github.com/gorilla/handlers v1.5.1 // indirect
    github.com/gorilla/websocket v1.5.0 // indirect
    github.com/gravity-devs/liquidity v1.5.3 // indirect
    github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
    github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2 // indirect
    github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
    github.com/gtank/merlin v0.1.1 // indirect
    github.com/gtank/ristretto255 v0.1.2 // indirect
    github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
    github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect
    github.com/hashicorp/hcl v1.0.0 // indirect
    github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect
    github.com/improbable-eng/grpc-web v0.15.0 // indirect
    github.com/inconshreveable/mousetrap v1.0.1 // indirect
    github.com/jmhodges/levigo v1.0.0 // indirect
    github.com/klauspost/compress v1.15.11 // indirect
    github.com/lib/pq v1.10.6 // indirect
    github.com/libp2p/go-buffer-pool v0.1.0 // indirect
    github.com/magiconair/properties v1.8.6 // indirect
    github.com/mattn/go-colorable v0.1.13 // indirect
    github.com/mattn/go-isatty v0.0.16 // indirect
    github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
    github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect
    github.com/minio/highwayhash v1.0.2 // indirect
    github.com/mitchellh/mapstructure v1.5.0 // indirect
    github.com/mtibben/percent v0.2.1 // indirect
    github.com/oxyno-zeta/gomock-extra-matcher v1.1.0 // indirect
    github.com/pelletier/go-toml v1.9.5 // indirect
    github.com/pelletier/go-toml/v2 v2.0.5 // indirect
    github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect
    github.com/pmezard/go-difflib v1.0.0 // indirect
    github.com/prometheus/client_golang v1.12.2 // indirect
    github.com/prometheus/client_model v0.2.0 // indirect
    github.com/prometheus/common v0.34.0 // indirect
    github.com/prometheus/procfs v0.8.0 // indirect
    github.com/rakyll/statik v0.1.7 // indirect
    github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
    github.com/regen-network/cosmos-proto v0.3.1 // indirect
    github.com/rs/cors v1.8.2 // indirect
    github.com/rs/zerolog v1.27.0 // indirect
    github.com/sasha-s/go-deadlock v0.3.1 // indirect
    github.com/spf13/afero v1.9.2 // indirect
    github.com/spf13/jwalterweatherman v1.1.0 // indirect
    github.com/spf13/pflag v1.0.5
    github.com/spf13/viper v1.14.0 // indirect
    github.com/strangelove-ventures/packet-forward-middleware/v3 v3.0.0 // indirect
    github.com/subosito/gotenv v1.4.1 // indirect
    github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect
    github.com/tendermint/btcd v0.1.1 // indirect
    github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect
    github.com/tendermint/go-amino v0.16.0 // indirect
    github.com/zondax/hid v0.9.1 // indirect
    go.etcd.io/bbolt v1.3.6 // indirect
    golang.org/x/crypto v0.1.0 // indirect
    golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e
    golang.org/x/net v0.7.0 // indirect
    golang.org/x/sys v0.5.0 // indirect
    golang.org/x/term v0.5.0 // indirect
    golang.org/x/text v0.7.0 // indirect
    google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8
    gopkg.in/ini.v1 v1.67.0 // indirect
    gopkg.in/yaml.v3 v3.0.1 // indirect
    gotest.tools v2.2.0+incompatible
    nhooyr.io/websocket v1.8.6 // indirect
)

replace (
    // github.com/99designs/keyring => github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76
    github.com/cosmos/admin-module => github.com/Ethernal-Tech/admin-module v0.0.0-20221102105340-e693f4d379c3
    github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.45.11-ics
    github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1
    github.com/stretchr/testify => github.com/stretchr/testify v1.7.1
    google.golang.org/grpc => google.golang.org/grpc v1.33.2
)
jeronimoalbi commented 1 year ago

I was not able to replicate the issue.

The field reverse comes from the PageRequest message type defined in cosmos/base/query/v1beta1/pagination.proto and it should be available when the type is used within a protobuf message definition, for example:

import "cosmos/base/query/v1beta1/pagination.proto";

service Query {
  rpc Params(QueryCustomRequest) returns (QueryCustomResponse) {
    option (google.api.http).get = "/demo/demo/custom";
  }
}

message QueryCustomRequest {
  // This should result in a "pagination.reverse" field
  // when Cosmos SDK >= v0.43 is used
  cosmos.base.query.v1beta1.PageRequest pagination = 1; // <--
}

message QueryCustomResponse {
  string foo = 1;
  cosmos.base.query.v1beta1.PageResponse pagination = 2; // <--
}

Adding the PageRequest should result in protoc_gen_openapiv2 generating the corresponding OpenAPI definition for the query parameters used for paging.

@jcompagni10 maybe you can try to run the generation using the clear cache flag:

ignite generate openapi --clear-cache
teddyknox commented 1 year ago

Hi @jeronimoalbi, --clear-cache does not improve the issue unfortunately. Since this behavior is non-deterministic across several developers at Duality we feel confident it's a real issue. Try checking out revision 86369dc12bd687d5878c9a3cf693605bcc6cadc4 from https://github.com/duality-labs/duality, running ignite generate openapi (either with or without --clear-cache), and commiting the changes before repeating again.

teddyknox commented 1 year ago

This change has forced us to manually decide when to update update the openapi.yml since, it's difficult to ascertain programmatically when it's out of date.

Pantani commented 1 year ago

@teddyknox, which ignite and os version are you using?

Pantani commented 1 year ago

can you run ignite version?