package main import ( "flag" "fmt" "log" "os" "time" "code.gitea.io/sdk/gitea" "github.com/facebookgo/flagenv" _ "github.com/joho/godotenv/autoload" ) var ( token = flag.String("gitea-token", "", "Gitea API token") server = flag.String("gitea-server", "https://tulpa.dev", "Gitea server") ) func main() { flagenv.Parse() flag.Parse() if *token == "" { log.Fatal("need -gitea-token") } cli, err := gitea.NewClient(*server, gitea.SetToken(*token)) if err != nil { log.Fatalf("error logging in: %v", err) } var repos []*gitea.Repository var np int for { mRepos, _, err := cli.ListMyRepos(gitea.ListReposOptions{ ListOptions: gitea.ListOptions{ Page: np, PageSize: 50, }, }) if err != nil { log.Fatalf("can't get page %d: %v", err) } repos = append(repos, mRepos...) log.Printf("got info on %d repos", len(repos)) if len(mRepos) < 50 { break } np++ } for _, repo := range repos { if repo.Private || repo.Archived { continue } name := repo.Name desc := repo.Description refn := repo.CloneURL creat := repo.Created.Format(time.RFC3339) lastm := repo.Updated.Format(time.RFC3339) const blurb = `name: ${name} description: ${desc} reference number: ${refn} date of creation: ${creat} date of last modification: ${lastm} other owners: none ` mapping := func(inp string) string { switch inp { case "name": return name case "desc": if desc == "" { return "no description available" } return desc case "refn": return refn case "creat": return creat case "lastm": return lastm } return "" } fmt.Println(os.Expand(blurb, mapping)) } }