diff --git a/devel-importer/main.go b/devel-importer/main.go index 9a3090a..73aa5a3 100644 --- a/devel-importer/main.go +++ b/devel-importer/main.go @@ -9,6 +9,7 @@ import ( "path" "slices" "strings" + "time" transport "github.com/go-openapi/runtime/client" "src.opensuse.org/autogits/common" @@ -79,7 +80,7 @@ func main() { os.Exit(2) } packages := strings.Split(strings.TrimSpace(string(packageList)), "\n") - fmt.Printf("%d packages: %s\n\n", len(packages), strings.Join(packages, ",")) + fmt.Printf("%d packages: %s\n\n", len(packages), strings.Join(packages, " ")) r := transport.New("src.opensuse.org", apiclient.DefaultBasePath, [](string){"https"}) r.DefaultAuthentication = transport.BearerToken(common.GetGiteaToken()) @@ -162,6 +163,8 @@ func main() { fmt.Printf("Error returned by importer. Err: %v\n", err) os.Exit(14) } + + reposOK := true for i := range oldPackageRepos { pkg := oldPackageRepos[i] dir := path.Join("repos", pkg.Name) @@ -175,7 +178,7 @@ func main() { } } if !slices.Contains(strings.Split(out, "\n"), "rpm") { - out := gitExec(dir, "remote", "add", "rpm", "https://src.opensuse.org/rpm/" + pkg.Name + ".git") + out := gitExec(dir, "remote", "add", "rpm", "https://src.opensuse.org/rpm/"+pkg.Name+".git") if len(strings.TrimSpace(out)) > 1 { fmt.Println(out) } @@ -194,76 +197,119 @@ func main() { out = gitExec(dir, "rev-list", "factory", "^rpm/factory") added_rpm_revs := strings.Split(out, "\n") if len(added_revs) == len(old_revs) && len(added_rpm_revs) == len(old_revs) { - fmt.Printf("Something is wrong with revl-ist for (len %d): %s\n", len(added_revs), pkg.Name) + fmt.Printf("Something is wrong with rev-ist for (len %d): %s\n", len(added_revs), pkg.Name) + reposOK = false + } + } + + args := make([]string, 2, len(newPackages)+2) + args[0] = "-p" + args[1] = prj + args = append(args, newPackages...) + cmd = exec.Command("./git-importer", args...) + out, err = cmd.CombinedOutput() + fmt.Print(string(out)) + if err != nil { + fmt.Printf("Error returned by importer. Err: %v\n", err) + os.Exit(15) + } + + if !reposOK { + fmt.Printf("aborting import due to broken repos above...\n") + os.Exit(100) + } + + for _, pkg := range oldPackageRepos { + // update package + fork, err := client.Repository.CreateFork(repository.NewCreateForkParams(). + WithOwner("pool"). + WithRepo(pkg.Name). + WithBody(&models.CreateForkOption{ + Organization: org, + }), r.DefaultAuthentication) + if err != nil { + fmt.Printf("Error while trying to create fork from pool/%s. Err: %v\n", pkg.Name, err) + os.Exit(10) } - // update package - /* - fork, err := client.Repository.CreateFork(repository.NewCreateForkParams(). - WithOwner("pool"). - WithRepo(pkg.Name). - WithBody(&models.CreateForkOption{ - Organization: org, - }), r.DefaultAuthentication) - if err != nil { - fmt.Printf("Error while trying to create fork from pool/%s. Err: %v\n", pkg.Name, err) - os.Exit(10) + repo := fork.Payload + repoList, err := client.Repository.RepoListBranches( + repository.NewRepoListBranchesParams().WithOwner(org).WithRepo(pkg.Name), + r.DefaultAuthentication, + ) + if err != nil { + fmt.Printf("Cannot get list of branches for forked repo: %s/%s\n", org, pkg.Name) + os.Exit(11) + } + priorityBranches := []string{ + "devel", + "factory", + } + idx := len(priorityBranches) + for _, branch := range repoList.Payload { + i := slices.Index(priorityBranches, branch.Name) + if i > -1 && i < idx { + idx = i } + } - repo := fork.Payload - repoList, err := client.Repository.RepoListBranches( - repository.NewRepoListBranchesParams().WithOwner(org).WithRepo(pkg.Name), - r.DefaultAuthentication, - ) - if err != nil { - fmt.Printf("Cannot get list of branches for forked repo: %s/%s\n", org, pkg.Name) - os.Exit(11) - } - priorityBranches := []string{ - "devel", - "factory", - } - idx := len(priorityBranches) - for _, branch := range repoList.Payload { - i := slices.Index(priorityBranches, branch.Name) - if i > -1 && i < idx { - idx = i - } - } + branchName := priorityBranches[idx] + dir := path.Join("repos", pkg.Name) + remotes := gitExec(dir, "remote", "show") + if !slices.Contains(strings.Split(remotes, "\n"), "devel") { + gitExec(dir, "remote", "add", "devel", repo.SSHURL) + } + gitExec(dir, "branch", "main", "-f", branchName) + time.Sleep(2 * time.Second) + gitExec(dir, "push", "devel", "main") + time.Sleep(2 * time.Second) - if idx < len(priorityBranches) { - _, err := client.Repository.RepoEdit(repository.NewRepoEditParams().WithOwner(repo.Owner.UserName).WithRepo(repo.Name).WithBody(&models.EditRepoOption{ - DefaultBranch: priorityBranches[idx], - DefaultMergeStyle: "fast-forward-only", - }), r.DefaultAuthentication) + _, err = client.Repository.RepoEdit(repository.NewRepoEditParams().WithOwner(org).WithRepo(repo.Name).WithBody(&models.EditRepoOption{ + DefaultBranch: "main", + DefaultMergeStyle: "fast-forward-only", + }), r.DefaultAuthentication) - if err != nil { - fmt.Printf("Failed to set default branch for package fork: %s/%s Err: %v", repo.Owner.UserName, repo.Name, err) - os.Exit(12) - } - } - */ + if err != nil { + fmt.Printf("Failed to set default branch for package fork: %s/%s Err: %v", repo.Owner.UserName, repo.Name, err) + os.Exit(12) + } } - // create new repositories for _, pkg := range newPackages { - fmt.Printf(" %s\n", pkg) - /* - _, err := client.Organization.CreateOrgRepo( - organization.NewCreateOrgRepoParams(). - WithOrg(org). - WithBody( - &models.CreateRepoOption{ - Name: &pkg, - AutoInit: false, - ObjectFormatName: "sha256", - }), - r.DefaultAuthentication) + ret, err := client.Organization.CreateOrgRepo(organization.NewCreateOrgRepoParams().WithOrg(org).WithBody( + &models.CreateRepoOption{ + ObjectFormatName: "sha256", + AutoInit: false, + Name: &pkg, + DefaultBranch: "main", + }), + r.DefaultAuthentication, + ) - if err != nil { - fmt.Printf("Cannot create %s/%s. Err: %v", org, pkg, err) - os.Exit(13) - } - */ + if err != nil { + fmt.Printf("Error creating new package repository: %s Err: %v", pkg, err) + os.Exit(13) + } + + repo := ret.Payload + dir := path.Join("repos", pkg) + remotes := gitExec(dir, "remote", "show") + if !slices.Contains(strings.Split(remotes, "\n"), "devel") { + gitExec(dir, "remote", "add", "devel", repo.SSHURL) + } + gitExec(dir, "branch", "main", "-f", "factory") + time.Sleep(2 * time.Second) + gitExec(dir, "push", "devel", "main") + time.Sleep(2 * time.Second) + + _, err = client.Repository.RepoEdit(repository.NewRepoEditParams().WithOwner(org).WithRepo(pkg).WithBody(&models.EditRepoOption{ + DefaultBranch: "main", + DefaultMergeStyle: "fast-forward-only", + }), r.DefaultAuthentication) + + if err != nil { + fmt.Printf("Failed to set default branch for package fork: %s/%s Err: %v", repo.Owner.UserName, repo.Name, err) + os.Exit(14) + } } } diff --git a/pr-review/main.go b/pr-review/main.go index be49412..6da1db0 100644 --- a/pr-review/main.go +++ b/pr-review/main.go @@ -134,7 +134,7 @@ func processPullRequest(h *common.RequestHandler) error { req := h.Data.(*common.PullRequestAction) switch req.Action { - case "opened": + case "opened", "reopened": return processPullRequestOpened(h) case "synchronized": return processPullRequestSync(h)