main.go (115 lines of code) (raw):

package main import ( "fmt" "github.com/korosuke613/octlango/core" "github.com/urfave/cli/v2" "log" "os" "runtime/debug" ) func action(c *cli.Context) error { octclient := core.NewOctclient(c.String("username"), c.String("token")) query, err := octclient.GetRepositoriesContributedTo( c.Context, c.Bool("sort-by-size"), c.Bool("reverse-order"), ) if err != nil { return err } var result string format := c.String("format") switch format { case "markdown": result = octclient.ConvertTableForMarkdown(query, &core.MarkdownOptions{IsEachExtension: c.Bool("each-extension")}) case "json": result, err = octclient.ConvertJson(query) if err != nil { return err } default: return fmt.Errorf("format option is invalid: %s", format) } fmt.Printf("%s\n", result) return nil } var ( version string ) func Version() string { info, ok := debug.ReadBuildInfo() if !ok { return "(devel)" } return info.Main.Version } func main() { if version == "" { version = Version() } isGlobalRequire := true switch os.Args[1] { case "version": case "help": isGlobalRequire = false } app := &cli.App{ Name: "octlango", Usage: "CLI to get statistics on languages used on GitHub.", Action: action, Version: version, Flags: []cli.Flag{ &cli.StringFlag{ Name: "username", Aliases: []string{"u"}, Usage: "your `GITHUB_USERNAME`", EnvVars: []string{"OCTLANGO_GH_USERNAME"}, Required: isGlobalRequire, }, &cli.StringFlag{ Name: "token", Aliases: []string{"t"}, Usage: "your `GITHUB_TOKEN`", EnvVars: []string{"OCTLANGO_GH_TOKEN", "GITHUB_TOKEN"}, Required: isGlobalRequire, }, &cli.StringFlag{ Name: "format", Aliases: []string{"f"}, Usage: "`format` is json or markdown", Value: "json", }, &cli.BoolFlag{ Name: "sort-by-size", Aliases: []string{"s"}, Usage: "if true, the order is by size.", Value: true, }, &cli.BoolFlag{ Name: "reverse-order", Aliases: []string{"r"}, Usage: "if true, reverse the result.", Value: false, }, &cli.BoolFlag{ Name: "each-extension", Usage: "if true, add extension each row for markdown format", Value: false, }, }, Commands: []*cli.Command{ { Name: "version", Usage: "Print octlango version", Action: func(c *cli.Context) error { fmt.Printf("octlango version %s\n", version) return nil }, }, }, } err := app.Run(os.Args) if err != nil { log.Fatal(err) } }