package main import ( "context" "flag" "os" "github.com/google/subcommands" ) type FetchCmd struct{} func (s *FetchCmd) Name() string { return "fetch" } func (s *FetchCmd) Synopsis() string { return "fetch SSH keys for the given Github Users" } func (s *FetchCmd) Usage() string { return `fetch [user 1] [user 2]` } func (s *FetchCmd) SetFlags(_ *flag.FlagSet) {} func (s *FetchCmd) Execute( _ context.Context, f *flag.FlagSet, _ ...interface{}, ) subcommands.ExitStatus { Fetch(f.Args()...) return subcommands.ExitSuccess } type SyncUsersCmd struct{} func (s *SyncUsersCmd) Name() string { return "sync-users" } func (s *SyncUsersCmd) Synopsis() string { return "Sync SSH keys for the given users." } func (s *SyncUsersCmd) Usage() string { return `sync-user [user1] [user2]` } func (s *SyncUsersCmd) SetFlags(_ *flag.FlagSet) {} func (s *SyncUsersCmd) Execute( _ context.Context, f *flag.FlagSet, _ ...interface{}, ) subcommands.ExitStatus { SyncUsers(f.Args()...) return subcommands.ExitSuccess } type SyncGroupsCmd struct{} func (s *SyncGroupsCmd) Name() string { return "sync-group" } func (s *SyncGroupsCmd) Synopsis() string { return "Sync SSH keys for the given groups." } func (s *SyncGroupsCmd) Usage() string { return `sync-group [group1] [group2]` } func (s *SyncGroupsCmd) SetFlags(_ *flag.FlagSet) {} func (s *SyncGroupsCmd) Execute( _ context.Context, f *flag.FlagSet, _ ...interface{}, ) subcommands.ExitStatus { SyncGroups(f.Args()...) return subcommands.ExitSuccess } func main() { subcommands.Register(subcommands.HelpCommand(), "") subcommands.Register(subcommands.FlagsCommand(), "") subcommands.Register(subcommands.CommandsCommand(), "") subcommands.Register(&FetchCmd{}, "") subcommands.Register(&SyncUsersCmd{}, "") subcommands.Register(&SyncGroupsCmd{}, "") flag.Parse() ctx := context.Background() os.Exit(int(subcommands.Execute(ctx))) }