Add config generator
This commit is contained in:
parent
cf5675d04f
commit
dfb2699417
19
README.md
19
README.md
@ -34,6 +34,23 @@ The basic workflow looks like this:
|
|||||||
1. **List** -- get a list of your configured projects any time with `plist`
|
1. **List** -- get a list of your configured projects any time with `plist`
|
||||||
1. **Reward** -- buy the author a beer, because this thing is a time saver
|
1. **Reward** -- buy the author a beer, because this thing is a time saver
|
||||||
|
|
||||||
|
## Installing
|
||||||
|
|
||||||
|
1. Install into your go path by running `go install .`
|
||||||
|
1. Copy `contrib/gpm_func_omz.zsh` into your `~/.oh-my-zsh/custom/` path, or just source from your bashrc/zshrc
|
||||||
|
1. Generate config file: `gpm config gen --write`
|
||||||
|
1. You can run this any time to update settings
|
||||||
|
1. Run `gpm cache load` (if aliases is in-place, otherwise `gitlab-project-manager cache load`)
|
||||||
|
|
||||||
|
### Config Sample
|
||||||
|
```yaml
|
||||||
|
gitlabHost: https://gitlab.sweetwater.com
|
||||||
|
gitlabToken: <your token here>
|
||||||
|
logLevel: info
|
||||||
|
cache:
|
||||||
|
ttl: 168h
|
||||||
|
ownerOnly: false
|
||||||
|
```
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
- [ ] Fix NPE when cache is reset or project for whatever reason leaves an orphaned alias
|
- [ ] Fix NPE when cache is reset or project for whatever reason leaves an orphaned alias
|
||||||
@ -49,6 +66,8 @@ The basic workflow looks like this:
|
|||||||
- [ ] Make a Makefile
|
- [ ] Make a Makefile
|
||||||
- [ ] Add git repo status to project go (up-to-date, pending commits, etc..)
|
- [ ] Add git repo status to project go (up-to-date, pending commits, etc..)
|
||||||
- [ ] Update `gpm project show` with pterm box like `gpm project list`
|
- [ ] Update `gpm project show` with pterm box like `gpm project list`
|
||||||
|
- [ ] Build pipeline, and link to gitlab registry for a release binary
|
||||||
|
- [ ] Brew package and GitHub
|
||||||
- [x] Merge aliases together for same project when selecting
|
- [x] Merge aliases together for same project when selecting
|
||||||
- [x] If after merging there is only one project, go there by default
|
- [x] If after merging there is only one project, go there by default
|
||||||
|
|
||||||
|
@ -2,8 +2,11 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/pterm/pterm"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/spf13/viper"
|
||||||
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/config"
|
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/config"
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
@ -17,11 +20,87 @@ var configGenerateCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runConfigGenerateCmd(cmd *cobra.Command, args []string) {
|
func runConfigGenerateCmd(cmd *cobra.Command, args []string) {
|
||||||
plog.Info("Suggest running with > " + defConfigPath)
|
var configFile string
|
||||||
c, _ := yaml.Marshal(config.DefaultConfig)
|
if viper.ConfigFileUsed() != "" {
|
||||||
|
configFile = viper.ConfigFileUsed()
|
||||||
|
} else {
|
||||||
|
configFile = defConfigPath
|
||||||
|
}
|
||||||
|
|
||||||
|
plog.Debug("Using config file " + configFile)
|
||||||
|
|
||||||
|
configFile, _ = resolvePath(configFile)
|
||||||
|
|
||||||
|
newConf := promptConfigSettings(&conf)
|
||||||
|
|
||||||
|
if write, _ := cmd.Flags().GetBool("write"); write {
|
||||||
|
write, _ := pterm.DefaultInteractiveContinue.
|
||||||
|
WithDefaultText("Really write config file?").
|
||||||
|
WithOptions([]string{"yes", "no"}).
|
||||||
|
Show()
|
||||||
|
if write != "yes" {
|
||||||
|
plog.Fatal("Aborting config file write")
|
||||||
|
}
|
||||||
|
|
||||||
|
writeConfigFile(newConf, configFile)
|
||||||
|
plog.Info("Wrote config to file",
|
||||||
|
plog.Args("file", configFile))
|
||||||
|
|
||||||
|
} else {
|
||||||
|
c, _ := yaml.Marshal(newConf)
|
||||||
|
plog.Info("Suggest running with --write or redirect (> " + configFile + ")")
|
||||||
fmt.Print(string(c))
|
fmt.Print(string(c))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeConfigFile(c *config.Config, path string) {
|
||||||
|
file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0640)
|
||||||
|
if err != nil {
|
||||||
|
plog.Error("Failed to prepare config for writing", plog.Args("error", err))
|
||||||
|
}
|
||||||
|
enc := yaml.NewEncoder(file)
|
||||||
|
if err := enc.Encode(c); err != nil {
|
||||||
|
plog.Fatal("Failed writing config file", plog.Args("file", path))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func promptConfigSettings(c *config.Config) *config.Config {
|
||||||
|
if host, err := pterm.DefaultInteractiveTextInput.
|
||||||
|
WithDefaultValue(c.GitlabHost).
|
||||||
|
WithDefaultText("Enter gitlab URL").
|
||||||
|
Show(); err == nil {
|
||||||
|
c.GitlabHost = host
|
||||||
|
}
|
||||||
|
|
||||||
|
if pPath, err := pterm.DefaultInteractiveTextInput.
|
||||||
|
WithDefaultValue(c.ProjectPath).
|
||||||
|
WithDefaultText("Enter path for projects and cache").
|
||||||
|
Show(); err == nil {
|
||||||
|
c.ProjectPath = pPath
|
||||||
|
}
|
||||||
|
|
||||||
|
if ownerOnly, err := pterm.DefaultInteractiveConfirm.
|
||||||
|
WithDefaultText("Only cache projects you are owner of?").
|
||||||
|
Show(); err == nil {
|
||||||
|
if ownerOnly {
|
||||||
|
c.Cache.Load.OwnerOnly = true
|
||||||
|
} else {
|
||||||
|
c.Cache.Load.OwnerOnly = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if token, err := pterm.DefaultInteractiveTextInput.
|
||||||
|
WithMask("*").
|
||||||
|
WithDefaultValue(c.GitlabToken).
|
||||||
|
WithDefaultText("Enter gitlab Token").
|
||||||
|
Show(); err == nil {
|
||||||
|
c.GitlabToken = token
|
||||||
|
}
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
configCmd.AddCommand(configGenerateCmd)
|
configCmd.AddCommand(configGenerateCmd)
|
||||||
|
configGenerateCmd.PersistentFlags().Bool("prompt", false, "Prompt for settings")
|
||||||
|
configGenerateCmd.PersistentFlags().Bool("write", false, "Write config to file")
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/config"
|
||||||
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/gitlab"
|
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/gitlab"
|
||||||
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/projects"
|
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/projects"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
@ -53,6 +54,9 @@ func postProjectCache(cmd *cobra.Command, args []string) {
|
|||||||
func initProjectPath(cmd *cobra.Command, args []string) {
|
func initProjectPath(cmd *cobra.Command, args []string) {
|
||||||
plog.Debug("Running persistent pre-run for rootCmd")
|
plog.Debug("Running persistent pre-run for rootCmd")
|
||||||
var err error
|
var err error
|
||||||
|
if conf.ProjectPath == "" {
|
||||||
|
conf.ProjectPath = config.DefaultConfig.ProjectPath
|
||||||
|
}
|
||||||
if conf.ProjectPath, err = resolvePath(conf.ProjectPath); err != nil {
|
if conf.ProjectPath, err = resolvePath(conf.ProjectPath); err != nil {
|
||||||
plog.Error("Failed to determine project path", plog.Args("error", err))
|
plog.Error("Failed to determine project path", plog.Args("error", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
Loading…
Reference in New Issue
Block a user