@@ -17,6 +17,7 @@ package versions
1717import  (
1818	"encoding/json" 
1919	"fmt" 
20+ 	"github.com/mongodb/openapi/tools/cli/internal/apiversion" 
2021	"strings" 
2122
2223	"github.com/mongodb/openapi/tools/cli/internal/cli/flag" 
@@ -28,11 +29,12 @@ import (
2829)
2930
3031type  Opts  struct  {
31- 	fs          afero.Fs 
32- 	basePath    string 
33- 	outputPath  string 
34- 	format      string 
35- 	env         string 
32+ 	fs              afero.Fs 
33+ 	basePath        string 
34+ 	outputPath      string 
35+ 	format          string 
36+ 	env             string 
37+ 	stabilityLevel  string 
3638}
3739
3840func  (o  * Opts ) Run () error  {
@@ -43,11 +45,7 @@ func (o *Opts) Run() error {
4345	}
4446
4547	var  versions  []string 
46- 	if  o .env  ==  ""  {
47- 		versions , err  =  openapi .ExtractVersions (specInfo .Spec )
48- 	} else  {
49- 		versions , err  =  openapi .ExtractVersionsWithEnv (specInfo .Spec , o .env )
50- 	}
48+ 	versions , err  =  openapi .ExtractVersionsWithEnv (specInfo .Spec , o .env )
5149
5250	if  err  !=  nil  {
5351		return  err 
@@ -57,7 +55,7 @@ func (o *Opts) Run() error {
5755		return  fmt .Errorf ("no versions found in the OpenAPI specification" )
5856	}
5957
60- 	bytes , err  :=  o .getVersionBytes (versions )
58+ 	bytes , err  :=  o .versionsAsBytes (versions )
6159	if  err  !=  nil  {
6260		return  err 
6361	}
@@ -70,7 +68,7 @@ func (o *Opts) Run() error {
7068	return  nil 
7169}
7270
73- func  (o  * Opts ) getVersionBytes (versions  []string ) ([]byte , error ) {
71+ func  (o  * Opts ) versionsAsBytes (versions  []string ) ([]byte , error ) {
7472	data , err  :=  json .MarshalIndent (versions , "" , "  " )
7573	if  err  !=  nil  {
7674		return  nil , err 
@@ -94,16 +92,21 @@ func (o *Opts) getVersionBytes(versions []string) ([]byte, error) {
9492}
9593
9694func  (o  * Opts ) PreRunE (_  []string ) error  {
95+ 	o .stabilityLevel  =  strings .ToUpper (o .stabilityLevel )
96+ 	if  o .stabilityLevel  !=  ""  &&  o .stabilityLevel  !=  apiversion .PreviewStabilityLevel  &&  o .stabilityLevel  !=  apiversion .StableStabilityLevel  {
97+ 		return  fmt .Errorf ("stability level must be %q or %q, got %q" , apiversion .PreviewStabilityLevel , apiversion .StableStabilityLevel , o .stabilityLevel )
98+ 	}
99+ 
97100	if  o .basePath  ==  ""  {
98- 		return  fmt .Errorf ("no OAS detected. Please, use the flag %s  to include the base OAS" , flag .Base )
101+ 		return  fmt .Errorf ("no OAS detected. Please, use the flag %q  to include the base OAS" , flag .Base )
99102	}
100103
101104	if  o .outputPath  !=  ""  &&  ! strings .Contains (o .outputPath , ".json" ) &&  ! strings .Contains (o .outputPath , ".yaml" ) {
102- 		return  fmt .Errorf ("output file must be either a JSON or YAML file, got %s " , o .outputPath )
105+ 		return  fmt .Errorf ("output file must be either a JSON or YAML file, got %q " , o .outputPath )
103106	}
104107
105108	if  o .format  !=  "json"  &&  o .format  !=  "yaml"  {
106- 		return  fmt .Errorf ("output format must be either 'json' or 'yaml', got %s " , o .format )
109+ 		return  fmt .Errorf ("output format must be either 'json' or 'yaml', got %q " , o .format )
107110	}
108111
109112	return  nil 
@@ -117,9 +120,10 @@ func Builder() *cobra.Command {
117120	}
118121
119122	cmd  :=  & cobra.Command {
120- 		Use :   "versions -s spec " ,
121- 		Short : "Get a list of versions from an OpenAPI specification." ,
122- 		Args :  cobra .NoArgs ,
123+ 		Use :     "versions -s spec " ,
124+ 		Aliases : []string {"versions list" , "versions ls" },
125+ 		Short :   "Get a list of versions from an OpenAPI specification." ,
126+ 		Args :    cobra .NoArgs ,
123127		PreRunE : func (_  * cobra.Command , args  []string ) error  {
124128			return  opts .PreRunE (args )
125129		},
@@ -130,7 +134,9 @@ func Builder() *cobra.Command {
130134
131135	cmd .Flags ().StringVarP (& opts .basePath , flag .Spec , flag .SpecShort , "" , usage .Spec )
132136	cmd .Flags ().StringVar (& opts .env , flag .Environment , "" , usage .Environment )
137+ 	cmd .Flags ().StringVarP (& opts .stabilityLevel , flag .StabilityLevel , flag .StabilityLevelShort , "" , usage .StabilityLevel )
133138	cmd .Flags ().StringVarP (& opts .outputPath , flag .Output , flag .OutputShort , "" , usage .Output )
134139	cmd .Flags ().StringVarP (& opts .format , flag .Format , flag .FormatShort , "json" , usage .Format )
140+ 
135141	return  cmd 
136142}
0 commit comments