From 4571f6e5f7c95612f2a3bbde2d436531e74b224e Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Sun, 11 Oct 2020 11:28:57 +0000 Subject: [PATCH] initial commit --- .gitignore | 2 ++ LICENSE | 19 +++++++++++ go.mod | 13 +++++++ go.sum | 26 ++++++++++++++ main.go | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 159 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..37e8c79 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.env +priorwork-gitea.txt \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3d1119d --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020 Christine Dodrill + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..d3dee4d --- /dev/null +++ b/go.mod @@ -0,0 +1,13 @@ +module tulpa.dev/cadey/giteaworkgen + +go 1.13 + +require ( + code.gitea.io/sdk/gitea v0.13.1 + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c // indirect + github.com/facebookgo/flagenv v0.0.0-20160425205200-fcd59fca7456 + github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect + github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 // indirect + github.com/joho/godotenv v1.3.0 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..a958354 --- /dev/null +++ b/go.sum @@ -0,0 +1,26 @@ +code.gitea.io/sdk v0.11.0 h1:R3VdjBCxObyLKnv4Svd/TM6oGsXzN8JORbzgkEFb83w= +code.gitea.io/sdk/gitea v0.13.1 h1:Y7bpH2iO6Q0KhhMJfjP/LZ0AmiYITeRQlCD8b0oYqhk= +code.gitea.io/sdk/gitea v0.13.1/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/flagenv v0.0.0-20160425205200-fcd59fca7456 h1:CkmB2l68uhvRlwOTPrwnuitSxi/S3Cg4L5QYOcL9MBc= +github.com/facebookgo/flagenv v0.0.0-20160425205200-fcd59fca7456/go.mod h1:zFhibDvPDWmtk4dAQ05sRobtyoffEHygEt3wSNuAzz8= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= +github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/main.go b/main.go new file mode 100644 index 0000000..615e6f6 --- /dev/null +++ b/main.go @@ -0,0 +1,99 @@ +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)) + } +}