76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
|
|
"code.gitea.io/sdk/gitea"
|
|
"github.com/facebookarchive/flagenv"
|
|
"github.com/gogs/go-gogs-client"
|
|
_ "github.com/joho/godotenv/autoload"
|
|
)
|
|
|
|
var (
|
|
gogsApiKey = flag.String("gogs-api-key", "", "gogs api key")
|
|
gogsURL = flag.String("gogs-url", "", "gogs url")
|
|
gogsUsername = flag.String("gogs-username", "", "gogs username")
|
|
giteaApiKey = flag.String("gitea-api-key", "", "gitea api key")
|
|
giteaURL = flag.String("gitea-url", "", "gitea url")
|
|
giteaUsername = flag.String("gitea-username", "", "gitea username")
|
|
)
|
|
|
|
func main() {
|
|
flagenv.Parse()
|
|
flag.Parse()
|
|
|
|
gogsClient := gogs.NewClient(*gogsURL, *gogsApiKey)
|
|
giteaClient := gitea.NewClient(*giteaURL, *giteaApiKey)
|
|
|
|
repos, err := gogsClient.ListMyRepos()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for _, gogsRepo := range repos {
|
|
log.Printf("gogs repo %s", gogsRepo.FullName)
|
|
giteaRepo, err := giteaClient.GetRepo(*giteaUsername, gogsRepo.Name)
|
|
if err == nil {
|
|
log.Printf("skipping gogs repo %s", gogsRepo.FullName)
|
|
continue
|
|
}
|
|
giteaRepo, err = giteaClient.CreateRepo(gitea.CreateRepoOption{
|
|
Name: gogsRepo.Name,
|
|
Description: gogsRepo.Description,
|
|
Private: gogsRepo.Private,
|
|
})
|
|
if err != nil {
|
|
log.Printf("can't create repo for gogs repo %s: %v, skipping", gogsRepo.FullName, err)
|
|
continue
|
|
}
|
|
|
|
tmpDir, err := ioutil.TempDir("", "gogs2gitea")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer os.RemoveAll(tmpDir)
|
|
|
|
cmd := exec.Command("git", "clone", "--bare", gogsRepo.SSHURL, tmpDir)
|
|
err = cmd.Run()
|
|
if err != nil {
|
|
log.Printf("can't clone gogs repo %s: %v, skipping", gogsRepo.FullName, err)
|
|
continue
|
|
}
|
|
|
|
cmd = exec.Command("git", "push", "--mirror", giteaRepo.SSHURL)
|
|
cmd.Dir = tmpDir
|
|
err = cmd.Run()
|
|
if err != nil {
|
|
log.Printf("can't push repo to gitea repo %s: %v, skipping", giteaRepo.FullName, err)
|
|
continue
|
|
}
|
|
}
|
|
}
|