Skip to content

Commit ee4886e

Browse files
authored
Update release-v2 tooling (Azure#18349)
* tool: update release tool to support non-prefix auto-generated files * tool: change all go generate cmd * tool: change breaking change tag * Revert "tool: change all go generate cmd" This reverts commit 5c653a5. * tool: default generate code file without filename prefix * tool: change init changelog generation * tool: fix version replace regex * tool: remove beta version changelog when release stable * tool: change some teample variable name and fix template flag * tool: fix batch deletion script
1 parent e917375 commit ee4886e

File tree

8 files changed

+97
-96
lines changed

8 files changed

+97
-96
lines changed

eng/scripts/MgmtTestLib.ps1

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function Invoke-MgmtTestgen ()
2020
[string]$config = "autorest.md",
2121
[string]$autorestVersion = "3.8.2",
2222
[string]$goExtension = "@autorest/go@4.0.0-preview.41",
23-
[string]$testExtension = "@autorest/gotest@4.0.1",
23+
[string]$testExtension = "@autorest/gotest@4.0.2",
2424
[string]$outputFolder
2525
)
2626
if ($clean)
@@ -33,8 +33,7 @@ function Invoke-MgmtTestgen ()
3333
if ($cleanGenerated)
3434
{
3535
Write-Host "##[command]Cleaning auto-generated files in" $sdkDirectory
36-
Remove-Item "ze_generated_*"
37-
Remove-Item "zt_generated_*"
36+
(Get-ChildItem "*_test.go" | Select-String -Pattern "Code generated by Microsoft" | Select-Object -ExpandProperty path) | Remove-Item -Force
3837
}
3938

4039
if ($generateExample -or $generateMockTest)

eng/scripts/build.ps1

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ param(
1111
[string]$config = "autorest.md",
1212
[string]$autorestVersion = "3.8.2",
1313
[string]$goExtension = "@autorest/go@4.0.0-preview.41",
14+
[string]$filePrefix,
1415
[string]$outputFolder
1516
)
1617

@@ -29,7 +30,7 @@ function Process-Sdk ()
2930
if ($cleanGenerated)
3031
{
3132
Write-Host "##[command]Cleaning auto-generated files in" $currentDirectory
32-
Remove-Item "zz_generated_*"
33+
(Get-ChildItem "*.go" | Where-Object {$_.Name -notlike '*_test.go'} | Select-String -Pattern "Code generated by Microsoft" | Select-Object -ExpandProperty path) | Remove-Item -Force
3334
}
3435

3536
if ($generate)
@@ -41,7 +42,15 @@ function Process-Sdk ()
4142
{
4243
$outputFolder = $currentDirectory
4344
}
44-
autorest --version=$autorestVersion --use=$goExtension --go --track2 --output-folder=$outputFolder --file-prefix="zz_generated_" --clear-output-folder=false --go.clear-output-folder=false $autorestPath
45+
if ($filePrefix)
46+
{
47+
autorest --version=$autorestVersion --use=$goExtension --go --track2 --output-folder=$outputFolder --file-prefix=$filePrefix --clear-output-folder=false --go.clear-output-folder=false $autorestPath
48+
}
49+
else
50+
{
51+
autorest --version=$autorestVersion --use=$goExtension --go --track2 --output-folder=$outputFolder --clear-output-folder=false --go.clear-output-folder=false $autorestPath
52+
}
53+
4554
if ($LASTEXITCODE)
4655
{
4756
Write-Host "##[error]Error running autorest.go"

eng/swagger_to_sdk_config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@
2323
}
2424
},
2525
"packageOptions": {
26-
"breakingChangeLabel": "CI-BreakingChange-Go-V2"
26+
"breakingChangeLabel": "CI-BreakingChange-Go"
2727
}
2828
}

eng/tools/generator/cmd/template/templateCmd.go

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -61,30 +61,33 @@ func BindFlags(flagSet *pflag.FlagSet) {
6161
flagSet.String("release-date", "", "Specifies the release date in changelog")
6262
flagSet.String("package-config", "", "Additional config for package")
6363
flagSet.String("go-version", "1.18", "Go version")
64+
flagSet.String("package-version", "", "Specify the version number of this release")
6465
}
6566

6667
// ParseFlags parses the flags to a Flags struct
6768
func ParseFlags(flagSet *pflag.FlagSet) Flags {
6869
return Flags{
69-
SDKRoot: flags.GetString(flagSet, "go-sdk-folder"),
70-
TemplatePath: flags.GetString(flagSet, "template-path"),
71-
PackageTitle: flags.GetString(flagSet, "package-title"),
72-
Commit: flags.GetString(flagSet, "commit"),
73-
ReleaseDate: flags.GetString(flagSet, "release-date"),
74-
PackageConfig: flags.GetString(flagSet, "package-config"),
75-
GoVersion: flags.GetString(flagSet, "go-version"),
70+
SDKRoot: flags.GetString(flagSet, "go-sdk-folder"),
71+
TemplatePath: flags.GetString(flagSet, "template-path"),
72+
PackageTitle: flags.GetString(flagSet, "package-title"),
73+
Commit: flags.GetString(flagSet, "commit"),
74+
ReleaseDate: flags.GetString(flagSet, "release-date"),
75+
PackageConfig: flags.GetString(flagSet, "package-config"),
76+
GoVersion: flags.GetString(flagSet, "go-version"),
77+
PackageVersion: flags.GetString(flagSet, "package-version"),
7678
}
7779
}
7880

7981
// Flags ...
8082
type Flags struct {
81-
SDKRoot string
82-
TemplatePath string
83-
PackageTitle string
84-
Commit string
85-
ReleaseDate string
86-
PackageConfig string
87-
GoVersion string
83+
SDKRoot string
84+
TemplatePath string
85+
PackageTitle string
86+
Commit string
87+
ReleaseDate string
88+
PackageConfig string
89+
GoVersion string
90+
PackageVersion string
8891
}
8992

9093
// GeneratePackageByTemplate creates a new set of files based on the things in template directory
@@ -105,7 +108,7 @@ func GeneratePackageByTemplate(rpName, packageName string, flags Flags) error {
105108
}
106109

107110
// build the replaceMap
108-
buildReplaceMap(rpName, packageName, flags.PackageConfig, flags.PackageTitle, flags.Commit, flags.ReleaseDate, flags.GoVersion)
111+
buildReplaceMap(rpName, packageName, flags.PackageConfig, flags.PackageTitle, flags.Commit, flags.ReleaseDate, flags.GoVersion, flags.PackageVersion)
109112

110113
// copy everything to destination directory
111114
for _, file := range fileList {
@@ -129,7 +132,7 @@ func GeneratePackageByTemplate(rpName, packageName string, flags Flags) error {
129132
return nil
130133
}
131134

132-
func buildReplaceMap(rpName, packageName, packageConfig, packageTitle, commitID, releaseDate, goVersion string) {
135+
func buildReplaceMap(rpName, packageName, packageConfig, packageTitle, commitID, releaseDate, goVersion, packageVersion string) {
133136
replaceMap = make(map[string]string)
134137

135138
replaceMap[RPNameKey] = rpName
@@ -143,6 +146,7 @@ func buildReplaceMap(rpName, packageName, packageConfig, packageTitle, commitID,
143146
replaceMap[ReleaseDate] = releaseDate
144147
}
145148
replaceMap[GoVersion] = goVersion
149+
replaceMap[PackageVersion] = packageVersion
146150
}
147151

148152
func readAndReplace(path string) (string, error) {
@@ -180,10 +184,11 @@ var (
180184
const (
181185
RPNameKey = "{{rpName}}"
182186
PackageNameKey = "{{packageName}}"
183-
PackageTitleKey = "{{PackageTitle}}"
187+
PackageTitleKey = "{{packageTitle}}"
184188
CommitIDKey = "{{commitID}}"
185189
FilenameSuffix = ".tpl"
186190
ReleaseDate = "{{releaseDate}}"
187191
PackageConfigKey = "{{packageConfig}}"
188192
GoVersion = "{{goVersion}}"
193+
PackageVersion = "{{packageVersion}}"
189194
)

eng/tools/generator/cmd/v2/common/fileProcessor.go

Lines changed: 27 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,20 @@ import (
2222
)
2323

2424
const (
25-
sdk_generated_file_prefix = "zz_generated_"
26-
sdk_example_file_prefix = "ze_generated_"
27-
sdk_test_file_prefix = "zt_generated_"
25+
generated_file_scan_string = "Code generated by Microsoft"
2826
autorest_md_file_suffix = "readme.md"
2927
autorest_md_module_version_prefix = "module-version: "
3028
swagger_md_module_name_prefix = "module-name: "
3129
)
3230

3331
var (
34-
v2BeginRegex = regexp.MustCompile("^```\\s*yaml\\s*\\$\\(go\\)\\s*&&\\s*\\$\\((track2|v2)\\)")
35-
v2EndRegex = regexp.MustCompile("^\\s*```\\s*$")
36-
newClientMethodNameRegex = regexp.MustCompile("^New.*Client$")
37-
versionLineRegex = regexp.MustCompile(`moduleVersion\s*=\s*\".*v\d+\.\d+\.\d+\"`)
38-
changelogVersionRegex = regexp.MustCompile(`##\s*(?P<version>\d+\.\d+\.\d+)\s*\((\d{4}-\d{2}-\d{2}|Unreleased)\)`)
39-
packageConfigRegex = regexp.MustCompile(`\$\((package-.+)\)`)
32+
v2BeginRegex = regexp.MustCompile("^```\\s*yaml\\s*\\$\\(go\\)\\s*&&\\s*\\$\\((track2|v2)\\)")
33+
v2EndRegex = regexp.MustCompile("^\\s*```\\s*$")
34+
newClientMethodNameRegex = regexp.MustCompile("^New.*Client$")
35+
versionLineRegex = regexp.MustCompile(`moduleVersion\s*=\s*\".*v.+"`)
36+
changelogPosWithPreviewRegex = regexp.MustCompile(`##\s*(?P<version>.+)\s*\((\d{4}-\d{2}-\d{2}|Unreleased)\)`)
37+
changelogPosWithoutPreviewRegex = regexp.MustCompile(`##\s*(?P<version>\d+\.\d+\.\d+)\s*\((\d{4}-\d{2}-\d{2}|Unreleased)\)`)
38+
packageConfigRegex = regexp.MustCompile(`\$\((package-.+)\)`)
4039
)
4140

4241
type PackageInfo struct {
@@ -113,11 +112,19 @@ func CleanSDKGeneratedFiles(path string) error {
113112
}
114113

115114
for _, file := range files {
116-
if strings.HasPrefix(file.Name(), sdk_generated_file_prefix) || strings.HasPrefix(file.Name(), sdk_example_file_prefix) || strings.HasPrefix(file.Name(), sdk_test_file_prefix) {
117-
err = os.Remove(filepath.Join(path, file.Name()))
115+
if strings.HasSuffix(file.Name(), ".go") {
116+
fileWithPath := filepath.Join(path, file.Name())
117+
b, err := ioutil.ReadFile(fileWithPath)
118118
if err != nil {
119119
return err
120120
}
121+
122+
if strings.Contains(string(b), generated_file_scan_string) {
123+
err = os.Remove(fileWithPath)
124+
if err != nil {
125+
return err
126+
}
127+
}
121128
}
122129
}
123130
return nil
@@ -189,27 +196,6 @@ func GetSpecRpName(packageRootPath string) (string, error) {
189196
return "", fmt.Errorf("cannot get sepc rp name from config")
190197
}
191198

192-
// get latest version from changelog file according to first line with: `## 0.2.1 (2021-11-22)`
193-
func GetLatestVersion(packageRootPath string) (*semver.Version, error) {
194-
path := filepath.Join(packageRootPath, common.ChangelogFilename)
195-
b, err := ioutil.ReadFile(path)
196-
if err != nil {
197-
return nil, fmt.Errorf("cannot parse version from changelog")
198-
}
199-
200-
lines := strings.Split(string(b), "\n")
201-
for _, line := range lines {
202-
matchResults := changelogVersionRegex.FindAllStringSubmatch(line, -1)
203-
for _, matchResult := range matchResults {
204-
if matchResult[2] != "Unreleased" {
205-
return semver.NewVersion(matchResult[1])
206-
}
207-
}
208-
}
209-
210-
return nil, fmt.Errorf("cannot parse version from changelog")
211-
}
212-
213199
// replace version: use `module-version: ` prefix to locate version in autorest.md file, use version = "v*.*.*" regrex to locate version in constants.go file
214200
func ReplaceVersion(packageRootPath string, newVersion string) error {
215201
path := filepath.Join(packageRootPath, "autorest.md")
@@ -230,7 +216,7 @@ func ReplaceVersion(packageRootPath string, newVersion string) error {
230216
return err
231217
}
232218

233-
path = filepath.Join(packageRootPath, sdk_generated_file_prefix+"constants.go")
219+
path = filepath.Join(packageRootPath, "constants.go")
234220
if b, err = ioutil.ReadFile(path); err != nil {
235221
return err
236222
}
@@ -307,23 +293,20 @@ func AddChangelogToFile(changelog *model.Changelog, version *semver.Version, pac
307293
}
308294

309295
oldChangelog := string(b)
310-
newChangelog := ""
311-
matchResults := changelogVersionRegex.FindAllStringSubmatchIndex(oldChangelog, -1)
296+
newChangelog := "# Release History\n\n"
297+
var matchResults [][]int
298+
if version.Prerelease() == "" {
299+
matchResults = changelogPosWithoutPreviewRegex.FindAllStringSubmatchIndex(oldChangelog, -1)
300+
} else {
301+
matchResults = changelogPosWithPreviewRegex.FindAllStringSubmatchIndex(oldChangelog, -1)
302+
}
312303
additionalChangelog := changelog.ToCompactMarkdown()
313304
if releaseDate == "" {
314305
releaseDate = time.Now().Format("2006-01-02")
315306
}
316307

317308
for _, matchResult := range matchResults {
318-
if oldChangelog[matchResult[4]:matchResult[5]] == "Unreleased" {
319-
newChangelog = newChangelog + oldChangelog[0:matchResult[0]]
320-
} else {
321-
if newChangelog == "" {
322-
newChangelog = newChangelog + oldChangelog[0:matchResult[0]]
323-
}
324-
newChangelog = newChangelog + "## " + version.String() + " (" + releaseDate + ")\r\n" + additionalChangelog + "\r\n\r\n" + oldChangelog[matchResult[0]:]
325-
break
326-
}
309+
newChangelog = newChangelog + "## " + version.String() + " (" + releaseDate + ")\r\n" + additionalChangelog + "\r\n\r\n" + oldChangelog[matchResult[0]:]
327310
}
328311

329312
err = ioutil.WriteFile(path, []byte(newChangelog), 0644)

eng/tools/generator/cmd/v2/common/generation.go

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,19 @@ func (ctx GenerateContext) GenerateForSingleRPNamespace(generateParam *GenerateP
9090
changelogPath := filepath.Join(packagePath, common.ChangelogFilename)
9191

9292
onBoard := false
93+
94+
version, err := semver.NewVersion("0.1.0")
95+
if err != nil {
96+
return nil, err
97+
}
98+
if generateParam.SpecficVersion != "" {
99+
log.Printf("Use specfic version: %s", generateParam.SpecficVersion)
100+
version, err = semver.NewVersion(generateParam.SpecficVersion)
101+
if err != nil {
102+
return nil, err
103+
}
104+
}
105+
93106
if _, err := os.Stat(changelogPath); os.IsNotExist(err) {
94107
onBoard = true
95108
log.Printf("Package '%s' changelog not exist, do onboard process", packagePath)
@@ -100,19 +113,20 @@ func (ctx GenerateContext) GenerateForSingleRPNamespace(generateParam *GenerateP
100113

101114
log.Printf("Use template to generate new rp folder and basic package files...")
102115
if err = template.GeneratePackageByTemplate(generateParam.RPName, generateParam.NamespaceName, template.Flags{
103-
SDKRoot: ctx.SDKPath,
104-
TemplatePath: "eng/tools/generator/template/rpName/packageName",
105-
PackageTitle: generateParam.SpecficPackageTitle,
106-
Commit: ctx.SpecCommitHash,
107-
PackageConfig: generateParam.NamespaceConfig,
108-
GoVersion: generateParam.GoVersion,
116+
SDKRoot: ctx.SDKPath,
117+
TemplatePath: "eng/tools/generator/template/rpName/packageName",
118+
PackageTitle: generateParam.SpecficPackageTitle,
119+
Commit: ctx.SpecCommitHash,
120+
PackageConfig: generateParam.NamespaceConfig,
121+
GoVersion: generateParam.GoVersion,
122+
PackageVersion: version.String(),
109123
}); err != nil {
110124
return nil, err
111125
}
112126
} else {
113127
log.Printf("Package '%s' existed, do update process", packagePath)
114128

115-
log.Printf("Remove all the files that start with `zz_generated_`...")
129+
log.Printf("Remove all the generated files ...")
116130
if err = CleanSDKGeneratedFiles(packagePath); err != nil {
117131
return nil, err
118132
}
@@ -182,12 +196,6 @@ func (ctx GenerateContext) GenerateForSingleRPNamespace(generateParam *GenerateP
182196
return nil, err
183197
}
184198

185-
version := "0.1.0"
186-
if generateParam.SpecficVersion != "" {
187-
log.Printf("Use specfic version: %s", generateParam.SpecficVersion)
188-
version = generateParam.SpecficVersion
189-
}
190-
191199
if !generateParam.SkipGenerateExample {
192200
log.Printf("Generate examples...")
193201
if err := ExecuteExampleGenerate(packagePath, filepath.Join("resourcemanager", generateParam.RPName, generateParam.NamespaceName)); err != nil {
@@ -196,7 +204,7 @@ func (ctx GenerateContext) GenerateForSingleRPNamespace(generateParam *GenerateP
196204
}
197205

198206
return &GenerateResult{
199-
Version: version,
207+
Version: version.String(),
200208
RPName: generateParam.RPName,
201209
PackageName: generateParam.NamespaceName,
202210
PackageAbsPath: packagePath,
@@ -205,18 +213,11 @@ func (ctx GenerateContext) GenerateForSingleRPNamespace(generateParam *GenerateP
205213
}, nil
206214
} else {
207215
log.Printf("Calculate new version...")
208-
var version *semver.Version
209216
if generateParam.SpecficVersion == "" {
210217
version, err = CalculateNewVersion(changelog, previousVersion, isCurrentPreview)
211218
if err != nil {
212219
return nil, err
213220
}
214-
} else {
215-
log.Printf("Use specfic version: %s", generateParam.SpecficVersion)
216-
version, err = semver.NewVersion(generateParam.SpecficVersion)
217-
if err != nil {
218-
return nil, err
219-
}
220221
}
221222

222223
log.Printf("Add changelog to file...")
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Release History
22

3-
## 0.1.0 ({{releaseDate}})
3+
## {{packageVersion}} ({{releaseDate}})
44

5-
- Init release.
5+
The package of `github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/{{rpName}}/{{packageName}}` is using our [next generation design principles](https://azure.github.io/azure-sdk/general_introduction.html) since version {{version}}, which contains breaking changes.
6+
7+
To migrate the existing applications to the latest version, please refer to [Migration Guide](https://aka.ms/azsdk/go/mgmt/migration).
8+
9+
To learn more, please refer to our documentation [Quick Start](https://aka.ms/azsdk/go/mgmt).

0 commit comments

Comments
 (0)