mirror of
https://github.com/bryanpedini/gitea-mirror.git
synced 2024-11-22 22:12:24 +00:00
moved github migration code to separate file
This commit is contained in:
parent
5a372a5e49
commit
600406e957
57
github.go
Normal file
57
github.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"code.gitea.io/sdk/gitea"
|
||||||
|
"github.com/google/go-github/github"
|
||||||
|
"golang.org/x/oauth2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func migrateGithubToGitea(githubOrg, githubToken, giteaHost, giteaToken string) {
|
||||||
|
ctx := context.Background()
|
||||||
|
ts := oauth2.StaticTokenSource(
|
||||||
|
&oauth2.Token{AccessToken: githubToken}, // TODO: GET TOKEN FROM GITHUB
|
||||||
|
)
|
||||||
|
tc := oauth2.NewClient(ctx, ts)
|
||||||
|
|
||||||
|
client := github.NewClient(tc)
|
||||||
|
giteaclient := gitea.NewClient("https://"+giteaHost+"/", giteaToken) // TODO: CONFIGURE WITH URL of your GITEA INSTANCE AND A TOKEN FROM YOUR GITEA INSTANCE
|
||||||
|
|
||||||
|
opt := &github.RepositoryListByOrgOptions{
|
||||||
|
ListOptions: github.ListOptions{PerPage: 100},
|
||||||
|
}
|
||||||
|
|
||||||
|
// get all pages of results
|
||||||
|
var allRepos []*github.Repository
|
||||||
|
for {
|
||||||
|
repos, resp, err := client.Repositories.ListByOrg(ctx, githubOrg, opt) // TODO: SET WITH NAME OF GITHUB ORG YOU WANT CLONED
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
allRepos = append(allRepos, repos...)
|
||||||
|
if resp.NextPage == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
opt.Page = resp.NextPage
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < len(allRepos); i++ {
|
||||||
|
description := ""
|
||||||
|
if allRepos[i].Description != nil { // will throw a nil pointer error if description is passed directly to the below struct
|
||||||
|
description = *allRepos[i].Description
|
||||||
|
}
|
||||||
|
giteaclient.MigrateRepo(gitea.MigrateRepoOption{
|
||||||
|
CloneAddr: *allRepos[i].CloneURL,
|
||||||
|
UID: 4, // TODO: SET WITH THE ID OF YOUR USER IN GITEA (IN MY CASE 4 is the user id of an org on my gitea instance)
|
||||||
|
RepoName: *allRepos[i].Name,
|
||||||
|
// Mirror: true, // TODO: uncomment this if you want gitea to periodically check for changes
|
||||||
|
// Private: true, // TODO: uncomment this if you want the repo to be private on gitea
|
||||||
|
Description: description,
|
||||||
|
})
|
||||||
|
time.Sleep(100 * time.Millisecond) // THIS IS HERE SO THE GITEA SERVER DOESNT GET HAMMERED WITH REQUESTS
|
||||||
|
}
|
||||||
|
}
|
56
main.go
56
main.go
@ -1,58 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"code.gitea.io/sdk/gitea"
|
|
||||||
"github.com/google/go-github/github"
|
|
||||||
"golang.org/x/oauth2"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
ctx := context.Background()
|
githubOrg, githubToken, giteaHost, giteaToken := "", "", "", ""
|
||||||
ts := oauth2.StaticTokenSource(
|
migrateGithubToGitea(githubOrg, githubToken, giteaHost, giteaToken)
|
||||||
&oauth2.Token{AccessToken: "GETTOKENFROMGITHUB"}, // TODO: GET TOKEN FROM GITHUB
|
|
||||||
)
|
|
||||||
tc := oauth2.NewClient(ctx, ts)
|
|
||||||
|
|
||||||
client := github.NewClient(tc)
|
|
||||||
giteaclient := gitea.NewClient("https://YOURGITEAHOST/", "GETTOKENFROMGITEA") // TODO: CONFIGURE WITH URL of your GITEA INSTANCE AND A TOKEN FROM YOUR GITEA INSTANCE
|
|
||||||
|
|
||||||
opt := &github.RepositoryListByOrgOptions{
|
|
||||||
ListOptions: github.ListOptions{PerPage: 100},
|
|
||||||
}
|
|
||||||
|
|
||||||
// get all pages of results
|
|
||||||
var allRepos []*github.Repository
|
|
||||||
for {
|
|
||||||
repos, resp, err := client.Repositories.ListByOrg(ctx, "PUTGITHUBORGYOUWANTCLONEDHERE", opt) // TODO: SET WITH NAME OF GITHUB ORG YOU WANT CLONED
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
allRepos = append(allRepos, repos...)
|
|
||||||
if resp.NextPage == 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
opt.Page = resp.NextPage
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := 0; i < len(allRepos); i++ {
|
|
||||||
description := ""
|
|
||||||
if allRepos[i].Description != nil { // will throw a nil pointer error if description is passed directly to the below struct
|
|
||||||
description = *allRepos[i].Description
|
|
||||||
}
|
|
||||||
giteaclient.MigrateRepo(gitea.MigrateRepoOption{
|
|
||||||
CloneAddr: *allRepos[i].CloneURL,
|
|
||||||
UID: 4, // TODO: SET WITH THE ID OF YOUR USER IN GITEA (IN MY CASE 4 is the user id of an org on my gitea instance)
|
|
||||||
RepoName: *allRepos[i].Name,
|
|
||||||
// Mirror: true, // TODO: uncomment this if you want gitea to periodically check for changes
|
|
||||||
// Private: true, // TODO: uncomment this if you want the repo to be private on gitea
|
|
||||||
Description: description,
|
|
||||||
})
|
|
||||||
time.Sleep(100 * time.Millisecond) // THIS IS HERE SO THE GITEA SERVER DOESNT GET HAMMERED WITH REQUESTS
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user