Skip to content

Commit ecd4c4a

Browse files
authored
Add pre-release (#29)
1 parent cf670de commit ecd4c4a

7 files changed

Lines changed: 91 additions & 26 deletions

File tree

README.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,13 @@ Install the latest release.
9797
ir owner/repo
9898
```
9999

100-
Install a specific version.
100+
Include pre-releases.
101+
102+
```shell
103+
ir owner/repo --pre
104+
```
105+
106+
Install a specific version/tag.
101107

102108
```shell
103109
ir owner/repo v4.2.0
@@ -135,10 +141,22 @@ ir list
135141

136142
Remove an app.
137143

144+
```shell
145+
ir remove
146+
```
147+
148+
Remove an app by name.
149+
138150
```shell
139151
ir remove name
140152
```
141153

154+
Edit the settings.
155+
156+
```shell
157+
ir config
158+
```
159+
142160
[![View Documentation](https://img.shields.io/badge/view_documentation-blue?style=for-the-badge&logo=googledocs&logoColor=white)](https://smashedr.github.io/install-release/)
143161

144162
# Development

cmd/info.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,28 @@ import (
1313
)
1414

1515
var infoCmd = &cobra.Command{
16-
Use: "info [owner/repo]",
16+
Use: "info [owner/repo] [tag]",
1717
Aliases: []string{"i", "in", "inf"},
1818
Short: "Show app or package information",
1919
Long: "Show app or package information.",
2020
Run: func(cmd *cobra.Command, args []string) {
2121
binPath := viper.GetString("bin")
22-
//sumFlag, _ := cmd.Flags().GetBool("summary")
23-
log.Debug("infoCmd", "args", args, "binPath", binPath)
22+
preRelease, _ := cmd.Flags().GetBool("pre")
23+
log.Debug("infoCmd", "args", args, "binPath", binPath, "preRelease", preRelease)
2424

2525
if len(args) >= 1 && strings.Contains(args[0], "/") {
2626
owner, repo, err := parseRepository(args[0])
2727
if err != nil {
2828
_ = cmd.Help()
2929
log.Fatal(err)
3030
}
31+
tag := "latest"
32+
if len(args) > 1 {
33+
tag = args[1]
34+
}
3135
log.Info("Repository", "owner", owner, "repo", repo)
3236
client := getClient()
33-
release, err := getRelease(client, owner, repo, "")
37+
release, err := getRelease(client, owner, repo, tag, preRelease)
3438
if err != nil {
3539
log.Fatalf("Error getting release: %v", err)
3640
}

cmd/install.go

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ var archAliases = map[string][]string{
3232

3333
func 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+
398413
func ensureWinExt(destName string) string {
399414
if runtime.GOOS == "windows" {
400415
if !strings.HasSuffix(destName, ".exe") {

cmd/remove.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ var removeCmd = &cobra.Command{
2020
Run: func(cmd *cobra.Command, args []string) {
2121
binPath := viper.GetString("bin")
2222
log.Debug("removeCmd", "args", args, "binPath", binPath)
23-
//noConfirm, _ := cmd.Flags().GetBool("yes")
24-
//log.Debug("Flags", "noConfirm", noConfirm)
23+
//skipPrompts := viper.GetBool("yes")
24+
//log.Info("Flags:", "skipPrompts", skipPrompts)
2525

2626
var name string
2727
var err error

cmd/root.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,18 @@ func Execute() {
3636

3737
func init() {
3838
cobra.OnInitialize(onInitialize)
39-
rootCmd.Flags().StringP("asset", "a", "", "asset name to download")
40-
rootCmd.Flags().StringP("name", "n", "", "binary file name to use")
41-
rootCmd.Flags().BoolP("yes", "y", false, "answer yes to prompts")
39+
rootCmd.PersistentFlags().StringP("asset", "a", "", "asset name to download")
40+
_ = viper.BindPFlag("asset", rootCmd.PersistentFlags().Lookup("asset"))
41+
rootCmd.PersistentFlags().StringP("name", "n", "", "binary file name to use")
42+
_ = viper.BindPFlag("name", rootCmd.PersistentFlags().Lookup("name"))
43+
rootCmd.PersistentFlags().BoolP("pre", "p", false, "include pre-releases")
44+
45+
rootCmd.PersistentFlags().BoolP("yes", "y", false, "answer yes to prompts")
46+
_ = viper.BindPFlag("yes", rootCmd.PersistentFlags().Lookup("yes"))
4247

4348
rootCmd.PersistentFlags().StringP("bin", "b", "", "bin path to use")
4449
_ = viper.BindPFlag("bin", rootCmd.PersistentFlags().Lookup("bin"))
50+
4551
rootCmd.PersistentFlags().CountVarP(&verbose, "verbose", "v", "verbose output (-vvv debug)")
4652

4753
rootCmd.Flags().BoolP("version", "V", false, "show installed version")
@@ -52,9 +58,13 @@ func onInitialize() {
5258
log.Info("Log Level", "verbose", verbose)
5359

5460
configName := "install-release"
55-
//viper.SetEnvPrefix("ir")
61+
configType := "yaml"
5662
viper.SetConfigName(configName)
57-
viper.SetConfigType("yaml")
63+
viper.SetConfigType(configType)
64+
viper.SetEnvPrefix("ir")
65+
viper.AutomaticEnv()
66+
67+
viper.SetDefault("yes", false)
5868

5969
homeDir, err := os.UserHomeDir()
6070
if err != nil {
@@ -76,7 +86,7 @@ func onInitialize() {
7686
if err := os.MkdirAll(configPath, 0755); err != nil {
7787
log.Fatalf("Creating config directory: %v: %v", configPath, err)
7888
}
79-
configFile := filepath.Join(configPath, configName+".yaml")
89+
configFile := filepath.Join(configPath, fmt.Sprintf("%s.%s", configName, configType))
8090
log.Infof("Config File: %v", configFile)
8191
viper.SetConfigFile(configFile)
8292
if err := viper.SafeWriteConfigAs(configFile); err != nil {

docs/index.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,13 @@ Install the latest release.
5959
ir owner/repo
6060
```
6161

62-
Install a specific version.
62+
Include pre-releases.
63+
64+
```shell
65+
ir owner/repo --pre
66+
```
67+
68+
Install a specific version/tag.
6369

6470
```shell
6571
ir owner/repo v4.2.0
@@ -97,10 +103,22 @@ ir list
97103

98104
Remove an app.
99105

106+
```shell
107+
ir remove
108+
```
109+
110+
Remove an app by name.
111+
100112
```shell
101113
ir remove name
102114
```
103115

116+
Edit the settings.
117+
118+
```shell
119+
ir config
120+
```
121+
104122
&nbsp;
105123

106124
!!! question

internal/pathmgr/pathmgr.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ func IsDirInPath(dirPath string) (found bool, err error) {
1212
log.Debug("IsDirInPath", "dirPath", dirPath)
1313

1414
// NOTE: Determine how to handle PATH in DOCKER
15-
if os.Getenv("DOCKER") != "true" {
15+
if os.Getenv("DOCKER") == "true" {
1616
log.Infof("IsDirInPath is Disabled in DOCKER")
1717
return true, nil
1818
}

0 commit comments

Comments
 (0)