diff --git a/eng/tools/generator/cmd/v2/automation/automationCmd.go b/eng/tools/generator/cmd/v2/automation/automationCmd.go index 1a4ae5c17dfe..2723714e6e8c 100644 --- a/eng/tools/generator/cmd/v2/automation/automationCmd.go +++ b/eng/tools/generator/cmd/v2/automation/automationCmd.go @@ -76,12 +76,30 @@ func execute(inputPath, outputPath, goVersion string) error { } } if err != nil { - return err + // Temporary strategy: Only if the project is a management plane project, the generator will return an error. + if IsManagementPlaneProject(input) { + return err + } + fmt.Println(err) } return nil } +func IsManagementPlaneProject(input *pipeline.GenerateInput) bool { + for _, tspProjectFolder := range input.RelatedTypeSpecProjectFolder { + if !strings.Contains(tspProjectFolder, ".Management") { + return false + } + } + for _, readme := range input.RelatedReadmeMdFiles { + if !strings.Contains(readme, "resource-manager") { + return false + } + } + return true +} + type automationContext struct { sdkRoot string specRoot string @@ -144,7 +162,14 @@ func (ctx *automationContext) generate(input *pipeline.GenerateInput) (*pipeline TspClientOptions: []string{"--debug"}, }, packageModuleRelativePath) if err != nil { + // save the error package for monitoring errorBuilder.add(err) + errorPackageResult := pipeline.PackageResult{ + PackageName: packageModuleRelativePath, + HasExceptions: true, + TypespecProject: []string{tspProjectFolder}, + } + results = append(results, errorPackageResult) continue } else { content := namespaceResult.ChangelogMD @@ -209,6 +234,17 @@ func (ctx *automationContext) generate(input *pipeline.GenerateInput) (*pipeline namespaceResults, errors := generateCtx.GenerateForAutomation(readme, input.RepoHTTPSURL, ctx.goVersion) if len(errors) != 0 { errorBuilder.add(errors...) + for _, result := range namespaceResults { + if !result.HasError { + continue + } + errorPackageResult := pipeline.PackageResult{ + PackageName: result.PackageName, + HasExceptions: true, + ReadmeMd: []string{readme}, + } + results = append(results, errorPackageResult) + } continue } diff --git a/eng/tools/generator/cmd/v2/automation/pipeline/model.go b/eng/tools/generator/cmd/v2/automation/pipeline/model.go index 1a3c0726687c..7c60ba6e2558 100644 --- a/eng/tools/generator/cmd/v2/automation/pipeline/model.go +++ b/eng/tools/generator/cmd/v2/automation/pipeline/model.go @@ -86,6 +86,7 @@ type PackageResult struct { APIViewArtifact string `json:"apiViewArtifact,omitempty"` Language string `json:"language,omitempty"` TypespecProject []string `json:"typespecProject,omitempty"` + HasExceptions bool `json:"hasExceptions,omitempty"` } // Changelog ... diff --git a/eng/tools/generator/cmd/v2/common/generation.go b/eng/tools/generator/cmd/v2/common/generation.go index 3e229cb3d00e..94f6bcae93f7 100644 --- a/eng/tools/generator/cmd/v2/common/generation.go +++ b/eng/tools/generator/cmd/v2/common/generation.go @@ -39,6 +39,7 @@ type GenerateResult struct { Changelog Changelog ChangelogMD string PullRequestLabels string + HasError bool } type GenerateParam struct { @@ -94,6 +95,7 @@ func (ctx *GenerateContext) GenerateForAutomation(readme, repo, goVersion string }) if err != nil { errors = append(errors, fmt.Errorf("failed to generate for rp: %s, namespace: %s: %+v", rpName, packageInfo.Name, err)) + result = append(result, GenerateResult{PackageName: packageInfo.Name, HasError: true}) continue } result = append(result, *singleResult)