diff --git a/tools/cli/Makefile b/tools/cli/Makefile index 768e41363c..1b769c121a 100644 --- a/tools/cli/Makefile +++ b/tools/cli/Makefile @@ -1,6 +1,6 @@ # A Self-Documenting Makefile: http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html -GOLANGCI_VERSION=v1.64.5 +GOLANGCI_VERSION=v1.64.7 SOURCE_FILES?=./cmd BINARY_NAME=foascli VERSION=v0.0.1 diff --git a/tools/cli/internal/cli/flatten/flatten.go b/tools/cli/internal/cli/flatten/flatten.go new file mode 100644 index 0000000000..de382a8e36 --- /dev/null +++ b/tools/cli/internal/cli/flatten/flatten.go @@ -0,0 +1,46 @@ +package flatten + +import ( + "fmt" + "github.com/getkin/kin-openapi/openapi3" + "github.com/mongodb/openapi/tools/cli/internal/cli/flag" + "github.com/mongodb/openapi/tools/cli/internal/cli/usage" + "github.com/spf13/cobra" + "github.com/tufin/oasdiff/flatten/allof" + "gopkg.in/yaml.v3" +) + +func Builder() *cobra.Command { + var spec string + + cmd := &cobra.Command{ + Use: "flatten -s ", + Short: "Flatten the spec.", + Args: cobra.NoArgs, + + RunE: func(_ *cobra.Command, _ []string) error { + loader := openapi3.NewLoader() + loader.IsExternalRefsAllowed = true + specInfo, err := loader.LoadFromFile(spec) + //spec, err := load.NewSpecInfo(loader, spec, load.WithFlattenAllOf()) + //loader := openapi.NewOpenAPI3() + //specInfo, err := loader.CreateOpenAPISpecFromPath(spec) + //if err != nil { + // return err + //} + result, err := allof.MergeSpec(specInfo) + if err != nil { + return err + } + yamlData, err := yaml.Marshal(result) + fmt.Print(string(yamlData)) + return nil + }, + } + + cmd.Flags().StringVarP(&spec, flag.Spec, flag.SpecShort, "-", usage.Spec) + + _ = cmd.MarkFlagRequired(flag.Spec) + + return cmd +} diff --git a/tools/cli/internal/cli/root/openapi/builder.go b/tools/cli/internal/cli/root/openapi/builder.go index fe81ade583..33bb9c16af 100644 --- a/tools/cli/internal/cli/root/openapi/builder.go +++ b/tools/cli/internal/cli/root/openapi/builder.go @@ -16,17 +16,17 @@ package openapi import ( "fmt" - "runtime" - "github.com/mongodb/openapi/tools/cli/internal/cli/breakingchanges" "github.com/mongodb/openapi/tools/cli/internal/cli/changelog" "github.com/mongodb/openapi/tools/cli/internal/cli/filter" + "github.com/mongodb/openapi/tools/cli/internal/cli/flatten" "github.com/mongodb/openapi/tools/cli/internal/cli/merge" "github.com/mongodb/openapi/tools/cli/internal/cli/split" "github.com/mongodb/openapi/tools/cli/internal/cli/sunset" "github.com/mongodb/openapi/tools/cli/internal/cli/versions" "github.com/mongodb/openapi/tools/cli/internal/version" "github.com/spf13/cobra" + "runtime" ) const ( @@ -63,6 +63,7 @@ func Builder() *cobra.Command { breakingchanges.Builder(), sunset.Builder(), filter.Builder(), + flatten.Builder(), ) return rootCmd } diff --git a/tools/cli/internal/openapi/openapi.go b/tools/cli/internal/openapi/openapi.go index 4002c46e5e..9c3dc86783 100644 --- a/tools/cli/internal/openapi/openapi.go +++ b/tools/cli/internal/openapi/openapi.go @@ -35,6 +35,7 @@ type Spec struct { Components *openapi3.Components `json:"components,omitempty" yaml:"components,omitempty"` ExternalDocs *openapi3.ExternalDocs `json:"externalDocs,omitempty" yaml:"externalDocs,omitempty"` } + type Parser interface { CreateOpenAPISpecFromPath(string) (*load.SpecInfo, error) } diff --git a/tools/postman/scripts/upload-collection.sh b/tools/postman/scripts/upload-collection.sh index f913e7596e..00908f7344 100755 --- a/tools/postman/scripts/upload-collection.sh +++ b/tools/postman/scripts/upload-collection.sh @@ -28,10 +28,11 @@ pushd "${OPENAPI_FOLDER}" current_collection_name="⭐MongoDB Atlas Administration API ${current_api_revision}" echo "Fetching list of current collections" -echo "curl -o ${COLLECTIONS_LIST_FILE} +echo "curl -o ${COLLECTIONS_LIST_FILE} --location 'https://api.getpostman.com/collections?workspace=${WORKSPACE_ID}' --header 'X-API-Key: **********'" -curl --show-error --fail --silent -o "${COLLECTIONS_LIST_FILE}" \ +curl --show-error \ + --fail --silent -o "${COLLECTIONS_LIST_FILE}" \ --location "https://api.getpostman.com/collections?workspace=${WORKSPACE_ID}" \ --header "X-API-Key: ${POSTMAN_API_KEY}" @@ -63,7 +64,11 @@ if [ "$collection_exists" = "false" ]; then --header 'Content-Type: application/json' --header 'X-API-Key: **********' --data ${collection_transformed_path}" - curl --show-error --fail --retry 5 --retry-all-errors --silent \ + curl --show-error \ + --fail \ + --retry 5 \ + --retry-all-errors \ + --silent \ --location "https://api.getpostman.com/collections?workspace=${WORKSPACE_ID}" \ --header "Content-Type: application/json" \ --header "X-API-Key: ${POSTMAN_API_KEY}" \ @@ -80,7 +85,12 @@ else --header 'X-API-Key: **********' --data ${collection_transformed_path}" - curl --show-error --fail --retry 5 --retry-all-errors --silent --request PUT \ + curl --show-error \ + --fail \ + --retry 5 \ + --retry-all-errors \ + --silent \ + --request PUT \ --location "https://api.getpostman.com/collections/${collection_id}" \ --header "Content-Type: application/json" \ --header "X-API-Key: ${POSTMAN_API_KEY}" \