diff --git a/internal/command/cmd.go b/internal/command/cmd.go new file mode 100644 index 0000000..6491beb --- /dev/null +++ b/internal/command/cmd.go @@ -0,0 +1,22 @@ +package command + +import ( + "errors" + + "github.com/shoenig/ssh-key-sync/internal/config" + "github.com/shoenig/ssh-key-sync/internal/netapi" + "github.com/shoenig/ssh-key-sync/internal/ssh" +) + +func Start(args []string) error { + arguments := config.ParseArguments(args[0], args[1:]) + if arguments.GitHubUser == "" { + arguments.Usage() + return errors.New("missing required argument(s)") + } + + reader := ssh.NewKeysReader() + githubClient := netapi.NewGithubClient(arguments) + exe := NewExec(arguments.Verbose, reader, githubClient) + return exe.Execute(arguments) +} diff --git a/internal/config/arguments.go b/internal/config/arguments.go index 417d03e..adbd5e3 100644 --- a/internal/config/arguments.go +++ b/internal/config/arguments.go @@ -27,6 +27,12 @@ type Arguments struct { GitHubUser string GitHubAPI string + + usage func() +} + +func (a Arguments) Usage() { + a.usage() } func defaultUser() string { @@ -37,7 +43,7 @@ func defaultUser() string { } func ParseArguments(program string, args []string) Arguments { - flags := flag.NewFlagSet(program, flag.PanicOnError) + flags := flag.NewFlagSet(program, flag.ContinueOnError) var arguments Arguments flags.BoolVar( @@ -69,5 +75,6 @@ func ParseArguments(program string, args []string) Arguments { ) _ = flags.Parse(args) + arguments.usage = flags.Usage return arguments } diff --git a/main.go b/main.go index 3903b6d..667bf41 100644 --- a/main.go +++ b/main.go @@ -1,26 +1,15 @@ package main import ( + "fmt" "os" "github.com/shoenig/ssh-key-sync/internal/command" - "github.com/shoenig/ssh-key-sync/internal/config" - "github.com/shoenig/ssh-key-sync/internal/logs" - "github.com/shoenig/ssh-key-sync/internal/netapi" - "github.com/shoenig/ssh-key-sync/internal/ssh" ) func main() { - logger := logs.New(true) - args := config.ParseArguments(os.Args[0], os.Args[1:]) - if args.GitHubUser == "" { - logger.Fatal("ssh-key-sync requires --github-user") + if err := command.Start(os.Args); err != nil { + fmt.Println("[fatal]", err) + os.Exit(1) } - - reader := ssh.NewKeysReader() - githubClient := netapi.NewGithubClient(args) - exec := command.NewExec(args.Verbose, reader, githubClient) - if err := exec.Execute(args); err != nil { - logger.Fatalf("ssh-key-sync failed with error: %s", err) - } -} + }