You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.7 KiB
68 lines
1.7 KiB
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"code.gitea.io/sdk/gitea"
|
|
"git.jonasfranz.software/JonasFranzDEV/gitea-github-migrator/migrations"
|
|
"github.com/google/go-github/github"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/urfave/cli"
|
|
"golang.org/x/oauth2"
|
|
)
|
|
|
|
// CmdMigrate migrates a given repository to gitea
|
|
var CmdMigrate = cli.Command{
|
|
Name: "migrate",
|
|
Usage: "migrates a github to a gitea repository",
|
|
Action: runMigrate,
|
|
Flags: append(defaultMigrateFlags,
|
|
cli.StringFlag{
|
|
Name: "gh-repo",
|
|
Usage: "GitHub Repository",
|
|
Value: "username/reponame",
|
|
EnvVar: "GH_REPOSITORY",
|
|
},
|
|
),
|
|
}
|
|
|
|
func runMigrate(ctx *cli.Context) error {
|
|
onlyRepos := ctx.Bool("only-repo")
|
|
var gc *github.Client
|
|
if ctx.IsSet("gh-token") {
|
|
ts := oauth2.StaticTokenSource(
|
|
&oauth2.Token{AccessToken: ctx.String("gh-token")},
|
|
)
|
|
tc := oauth2.NewClient(context.Background(), ts)
|
|
gc = github.NewClient(tc)
|
|
} else {
|
|
gc = github.NewClient(nil)
|
|
}
|
|
logrus.SetLevel(logrus.InfoLevel)
|
|
job := migrations.NewJob(&migrations.Options{
|
|
Private: ctx.Bool("private"),
|
|
NewOwnerID: ctx.Int("owner"),
|
|
|
|
Comments: !onlyRepos,
|
|
Issues: !onlyRepos,
|
|
Labels: !onlyRepos,
|
|
Milestones: !onlyRepos,
|
|
PullRequests: !onlyRepos,
|
|
Strategy: migrations.Classic,
|
|
}, gitea.NewClient(ctx.String("url"), ctx.String("token")), gc, ctx.String("gh-repo"))
|
|
if job.Options.NewOwnerID == 0 {
|
|
usr, err := job.Client.GetMyUserInfo()
|
|
if err != nil {
|
|
return fmt.Errorf("cannot fetch user info about current user: %v", err)
|
|
}
|
|
job.Options.NewOwnerID = int(usr.ID)
|
|
}
|
|
errs := job.StartMigration()
|
|
for err := range errs {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|