@@ -32,13 +32,13 @@ var archAliases = map[string][]string{
3232
3333func runInstall (cmd * cobra.Command , args []string ) error { // NOSONAR
3434 cmd .SilenceUsage = true // set here so subcommands do not silence usage
35- var err error
3635 binPath := viper .GetString ("bin" )
3736 log .Debug ("runInstall" , "args" , args , "binPath" , binPath )
38- skipPrompts , _ := cmd .Flags ().GetBool ("yes" )
39- assetName , _ := cmd .Flags ().GetString ("asset" )
40- destName , _ := cmd .Flags ().GetString ("name" )
41- log .Info ("Flags:" , "skipPrompts" , skipPrompts , "assetName" , assetName , "destName" , destName )
37+ skipPrompts := viper .GetBool ("yes" )
38+ assetName := viper .GetString ("asset" )
39+ destName := viper .GetString ("name" )
40+ preRelease , _ := cmd .Flags ().GetBool ("pre" )
41+ log .Info ("Flags:" , "skipPrompts" , skipPrompts , "assetName" , assetName , "destName" , destName , "preRelease" , preRelease )
4242
4343 if len (args ) < 1 {
4444 _ = cmd .Help ()
@@ -48,7 +48,7 @@ func runInstall(cmd *cobra.Command, args []string) error { // NOSONAR
4848 owner , repo , err := parseRepository (args [0 ])
4949 if err != nil {
5050 _ = cmd .Help ()
51- log . Fatal ( err )
51+ return err
5252 }
5353
5454 tag := "latest"
@@ -61,15 +61,15 @@ func runInstall(cmd *cobra.Command, args []string) error { // NOSONAR
6161
6262 client := getClient ()
6363
64- release , err := getRelease (client , owner , repo , tag )
64+ release , err := getRelease (client , owner , repo , tag , preRelease )
6565 if err != nil {
6666 return fmt .Errorf ("get release error: %w" , err )
6767 }
6868 if verbose >= 3 {
6969 log .Debugf ("release: %v" , release )
7070 }
7171
72- styles .PrintKV ("Version:" , release .GetTagName ())
72+ styles .PrintKV ("Version:" , fmt . Sprintf ( "%s (%s)" , release .GetTagName (), release . GetName () ))
7373
7474 // Asset
7575 var asset * github.ReleaseAsset
@@ -198,7 +198,7 @@ func runInstall(cmd *cobra.Command, args []string) error { // NOSONAR
198198 }).
199199 Value (& destName )
200200 if err := form .Run (); err != nil {
201- log . Fatalf ( "Prompt failed %v" , err )
201+ return err
202202 }
203203 log .Debugf ("4 destName: %v" , destName )
204204 }
@@ -380,11 +380,13 @@ func getClient() *github.Client {
380380 return github .NewClient (httpClient )
381381}
382382
383- func getRelease (client * github.Client , owner , repo , tag string ) (* github.RepositoryRelease , error ) {
383+ func getRelease (client * github.Client , owner , repo , tag string , pre bool ) (* github.RepositoryRelease , error ) {
384384 ctx := context .Background ()
385385 var release * github.RepositoryRelease
386386 var err error
387- if tag == "" || tag == "latest" {
387+ if pre {
388+ release , err = getLatestRelease (client , owner , repo )
389+ } else if tag == "" || tag == "latest" {
388390 release , _ , err = client .Repositories .GetLatestRelease (ctx , owner , repo )
389391 } else {
390392 release , _ , err = client .Repositories .GetReleaseByTag (ctx , owner , repo , tag )
@@ -395,6 +397,19 @@ func getRelease(client *github.Client, owner, repo, tag string) (*github.Reposit
395397 return release , nil
396398}
397399
400+ func getLatestRelease (client * github.Client , owner , repo string ) (* github.RepositoryRelease , error ) {
401+ ctx := context .Background ()
402+ releases , _ , err := client .Repositories .ListReleases (ctx , owner , repo , & github.ListOptions {PerPage : 1 })
403+ if err != nil {
404+ return nil , err
405+ }
406+
407+ if len (releases ) > 0 {
408+ return releases [0 ], nil
409+ }
410+ return nil , nil
411+ }
412+
398413func ensureWinExt (destName string ) string {
399414 if runtime .GOOS == "windows" {
400415 if ! strings .HasSuffix (destName , ".exe" ) {
0 commit comments