giteaworkgen/main.go

100 lines
1.7 KiB
Go

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 "<unknown input " + inp + ">"
}
fmt.Println(os.Expand(blurb, mapping))
}
}