diff --git a/tools/generator/cmd/track2/automation/automationCmd.go b/tools/generator/cmd/track2/automation/automationCmd.go index 0f905291e7dd..8056dd8047d3 100644 --- a/tools/generator/cmd/track2/automation/automationCmd.go +++ b/tools/generator/cmd/track2/automation/automationCmd.go @@ -91,7 +91,7 @@ func (ctx *automationContext) generate(input *pipeline.GenerateInput) (*pipeline CommitHash: ctx.commitHash, } - namespaceResults, errors := generateCtx.GenerateForAutomation(readme) + namespaceResults, errors := generateCtx.GenerateForAutomation(readme, input.RepoHTTPSURL) if len(errors) != 0 { errorBuilder.add(errors...) continue diff --git a/tools/generator/cmd/track2/common/fileProcessor.go b/tools/generator/cmd/track2/common/fileProcessor.go index 6a791c8552f8..b8da520be88b 100644 --- a/tools/generator/cmd/track2/common/fileProcessor.go +++ b/tools/generator/cmd/track2/common/fileProcessor.go @@ -25,8 +25,9 @@ const ( ) var ( - track2BeginRegex = regexp.MustCompile("^```\\s*yaml\\s*\\$\\(go\\)\\s*&&\\s*\\$\\(track2\\)") - track2EndRegex = regexp.MustCompile("^\\s*```\\s*$") + track2BeginRegex = regexp.MustCompile("^```\\s*yaml\\s*\\$\\(go\\)\\s*&&\\s*\\$\\(track2\\)") + track2EndRegex = regexp.MustCompile("^\\s*```\\s*$") + autorestMdSwaggerURLBeginRegex = regexp.MustCompile(`https://github.com/.+/azure-rest-api-specs/`) ) // reads from readme.go.md, parses the `track2` section to get module and package name @@ -105,7 +106,7 @@ func CleanSDKGeneratedFiles(path string) error { // replace all commit id in autorest.md files func ReplaceCommitID(path string, commitID string) error { - log.Printf("Replacing commit id from autorest.md ...") + log.Printf("Replacing commit id in autorest.md ...") b, err := ioutil.ReadFile(path) if err != nil { return err @@ -122,6 +123,24 @@ func ReplaceCommitID(path string, commitID string) error { return err } +func ReplaceRepoURL(path string, repoUrl string) error { + log.Printf("Replacing repo url in autorest.md ...") + b, err := ioutil.ReadFile(path) + if err != nil { + return err + } + + lines := strings.Split(string(b), "\n") + for i, line := range lines { + if pos := autorestMdSwaggerURLBeginRegex.FindStringIndex(line); pos != nil { + lines[i] = line[:pos[0]] + repoUrl + "/" + line[pos[1]:] + } + } + + err = ioutil.WriteFile(path, []byte(strings.Join(lines, "\n")), 0644) + return err +} + func GetLatestVersion(packageRootPath string) (*semver.Version, error) { b, err := ioutil.ReadFile(filepath.Join(packageRootPath, "autorest.md")) if err != nil { diff --git a/tools/generator/cmd/track2/common/generation.go b/tools/generator/cmd/track2/common/generation.go index ef1fa967287d..5eea74d7f144 100644 --- a/tools/generator/cmd/track2/common/generation.go +++ b/tools/generator/cmd/track2/common/generation.go @@ -41,7 +41,7 @@ func (ctx GenerateContext) SpecRoot() string { return ctx.SpecPath } -func (ctx GenerateContext) GenerateForAutomation(readme string) ([]GenerateResult, []error) { +func (ctx GenerateContext) GenerateForAutomation(readme string, repo string) ([]GenerateResult, []error) { absReadme := filepath.Join(ctx.SpecPath, readme) absReadmeGo := filepath.Join(filepath.Dir(absReadme), "readme.go.md") @@ -59,7 +59,7 @@ func (ctx GenerateContext) GenerateForAutomation(readme string) ([]GenerateResul for rpName, namespaceNames := range rpMap { for _, namespaceName := range namespaceNames { log.Printf("Process rp: %s, namespace: %s", rpName, namespaceName) - singleResult, err := ctx.GenerateForSingleRpNamespace(rpName, namespaceName, "") + singleResult, err := ctx.GenerateForSingleRpNamespace(rpName, namespaceName, "", repo) if err != nil { errors = append(errors, err) continue @@ -70,7 +70,7 @@ func (ctx GenerateContext) GenerateForAutomation(readme string) ([]GenerateResul return result, errors } -func (ctx GenerateContext) GenerateForSingleRpNamespace(rpName, namespaceName string, specficVersion string) (*GenerateResult, error) { +func (ctx GenerateContext) GenerateForSingleRpNamespace(rpName, namespaceName string, specficVersion string, specficRepoURL string) (*GenerateResult, error) { packagePath := filepath.Join(ctx.SdkPath, "sdk", rpName, namespaceName) changelogPath := filepath.Join(packagePath, common.ChangelogFilename) if _, err := os.Stat(changelogPath); os.IsNotExist(err) { @@ -86,6 +86,14 @@ func (ctx GenerateContext) GenerateForSingleRpNamespace(rpName, namespaceName st return nil, err } + if specficRepoURL != "" { + log.Printf("Change the repo url in `autorest.md`...") + autorestMdPath := filepath.Join(packagePath, "autorest.md") + if err = ReplaceRepoURL(autorestMdPath, specficRepoURL); err != nil { + return nil, err + } + } + log.Printf("Run `go generate` to regenerate the code...") if err = ExecuteGoGenerate(packagePath); err != nil { return nil, err @@ -129,6 +137,13 @@ func (ctx GenerateContext) GenerateForSingleRpNamespace(rpName, namespaceName st return nil, err } + if specficRepoURL != "" { + log.Printf("Change the repo url in `autorest.md`...") + if err = ReplaceRepoURL(autorestMdPath, specficRepoURL); err != nil { + return nil, err + } + } + log.Printf("Run `go generate` to regenerate the code...") if err = ExecuteGoGenerate(packagePath); err != nil { return nil, err @@ -146,7 +161,7 @@ func (ctx GenerateContext) GenerateForSingleRpNamespace(rpName, namespaceName st log.Printf("Calculate new version...") var version *semver.Version - if len(specficVersion) == 0 { + if specficVersion == "" { version, err = CalculateNewVersion(changelog, packagePath) if err != nil { return nil, err diff --git a/tools/generator/cmd/track2/release/releaseCmd.go b/tools/generator/cmd/track2/release/releaseCmd.go index 57f8f9d843f8..1b15960f9fd9 100644 --- a/tools/generator/cmd/track2/release/releaseCmd.go +++ b/tools/generator/cmd/track2/release/releaseCmd.go @@ -63,6 +63,7 @@ namespaceName: name of namespace to be released, default value is arm+rp-name type Flags struct { VersionNumber string + RepoURL string } func BindFlags(flagSet *pflag.FlagSet) { @@ -117,7 +118,7 @@ func (c *commandContext) execute() error { CommitHash: specRef.Hash().String(), } - result, err := generateCtx.GenerateForSingleRpNamespace(c.rpName, c.namespaceName, c.flags.VersionNumber) + result, err := generateCtx.GenerateForSingleRpNamespace(c.rpName, c.namespaceName, c.flags.VersionNumber, c.flags.RepoURL) if err != nil { return fmt.Errorf("failed to finish release generation process: %+v", err) }