in eng/tools/generator/cmd/v2/release/releaseCmd.go [238:399]
func (c *commandContext) generateFromRequest(sdkRepo repo.SDKRepository, specRepoParam, specCommitHash string) error {
var generateErr []error
var pullRequestUrls = make(map[string]string)
var pushBranch = make(map[string]struct {
requestLink string
pullRequestLabel string
})
forkRemote, err := repo.GetForkRemote(sdkRepo)
if err != nil {
return err
}
log.Printf("track2 parsing the config...")
cfg, err := config.ParseConfig(c.rpName)
if err != nil {
return fmt.Errorf("parse config err: %v", err)
}
log.Printf("Configuration: %s", cfg.String())
armServices, err := config.ParseTrack2(cfg, specRepoParam)
if err != nil {
generateErr = append(generateErr, err)
}
for arm, packageInfos := range armServices {
for _, info := range packageInfos {
originalHead, err := sdkRepo.Head()
if err != nil {
return err
}
// run generator
c.rpName = arm
c.namespaceName = info.Name
c.flags.SpecRPName = info.SpecName
c.flags.PackageConfig = info.Tag
if info.ReleaseDate != nil {
c.flags.ReleaseDate = info.ReleaseDate.Format("2006-01-02")
}
err = c.generate(sdkRepo, specCommitHash)
if err != nil {
generateErr = append(generateErr, err)
continue
}
// get current branch name
generateHead, err := sdkRepo.Head()
if err != nil {
return err
}
pushBranch[generateHead.Name().Short()] = struct {
requestLink string
pullRequestLabel string
}{requestLink: info.RequestLink, pullRequestLabel: c.pullRequestLabels}
log.Printf("git checkout %v", originalHead.Name().Short())
if err := sdkRepo.Checkout(&repo.CheckoutOptions{
Branch: plumbing.ReferenceName(originalHead.Name().Short()),
Force: true,
}); err != nil {
return err
}
}
}
tspProjects, err := config.GetTypeSpecProjectsFromConfig(cfg, specRepoParam)
if err != nil {
generateErr = append(generateErr, err)
}
for rpName, packageInfos := range tspProjects {
for _, packageInfo := range packageInfos {
originalHead, err := sdkRepo.Head()
if err != nil {
return err
}
// run tsp generator
c.rpName = rpName
c.namespaceName = packageInfo.Name
c.flags.TypeSpecConfig = packageInfo.TspConfigPath
if packageInfo.ReleaseDate != nil {
c.flags.ReleaseDate = packageInfo.ReleaseDate.Format("2006-01-02")
}
err = c.generate(sdkRepo, specCommitHash)
if err != nil {
generateErr = append(generateErr, err)
continue
}
// get current branch name
generateHead, err := sdkRepo.Head()
if err != nil {
return err
}
pushBranch[generateHead.Name().Short()] = struct {
requestLink string
pullRequestLabel string
}{requestLink: packageInfo.RequestLink, pullRequestLabel: c.pullRequestLabels}
log.Printf("git checkout %v", originalHead.Name().Short())
if err := sdkRepo.Checkout(&repo.CheckoutOptions{
Branch: plumbing.ReferenceName(originalHead.Name().Short()),
Force: true,
}); err != nil {
return err
}
}
}
for branch := range pushBranch {
log.Printf("Fixes: %s\n", branch)
}
if c.flags.Token != "" {
for branchName, issue := range pushBranch {
log.Printf("git push fork %s\n", branchName)
msg, err := common.ExecuteGitPush(sdkRepo.Root(), forkRemote.Config().Name, branchName)
if err != nil {
return fmt.Errorf("git push fork error:%v,msg:%s", err, msg)
}
githubUserName := repo.GetRemoteUserName(forkRemote)
if githubUserName == "" {
return errors.New("github user name not exist")
}
log.Printf("%s: create pull request...\n", branchName)
pullRequestUrl, err := common.ExecuteCreatePullRequest(sdkRepo.Root(), link.SpecOwner, link.SDKRepo, githubUserName, branchName, repo.ReleaseTitle(branchName), issue.requestLink, c.flags.Token, issue.pullRequestLabel)
if err != nil {
return err
}
pullRequestUrls[branchName] = pullRequestUrl
log.Printf("Leave a comment in %s...\n", issue)
issueNumber := strings.Split(issue.requestLink, "/")
err = common.ExecuteAddIssueComment(sdkRepo.Root(), link.SpecOwner, link.ReleaseIssueRepo, issueNumber[len(issueNumber)-1], fmt.Sprintf(confirmComment, pullRequestUrl), c.flags.Token)
if err != nil {
return err
}
log.Printf("Add Labels...\n")
err = common.ExecuteAddIssueLabels(sdkRepo.Root(), link.SpecOwner, link.ReleaseIssueRepo, issueNumber[len(issueNumber)-1], c.flags.Token, []string{"PRready", issue.pullRequestLabel})
if err != nil {
return err
}
}
}
if len(pullRequestUrls) != 0 {
log.Println("Fixes:")
for branch, url := range pullRequestUrls {
log.Printf("%s : %s", branch, url)
}
}
if len(generateErr) != 0 {
fmt.Println("generator error:")
for _, e := range generateErr {
fmt.Println(e)
}
}
return nil
}