[mdatagen] delete generated_status.go in case it is not required (#12348)

<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue.
Ex. Adding a feature - Explain what this achieves.-->
#### Description
Delete generated_status.go if the component type doesn't require it.

<!-- Issue number if applicable -->
#### Link to tracking issue
Fixes #12346
This commit is contained in:
Antoine Toulme 2025-03-13 06:10:55 -07:00 committed by GitHub
parent 4f9fc6bb2d
commit bfaf8da9b8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 177 additions and 62 deletions

View File

@ -0,0 +1,25 @@
# Use this changelog template to create an entry for release notes.
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: enhancement
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
component: mdatagen
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: Delete generated_status.go if the component type doesn't require it.
# One or more tracking issues or pull requests related to the change
issues: [12346]
# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext:
# Optional: The change log or logs in which this entry should be included.
# e.g. '[user]' or '[user, api]'
# Include 'user' if the change is relevant to end users.
# Include 'api' if there is a change to a library API.
# Default: '[user]'
change_logs: []

View File

@ -92,6 +92,17 @@ func run(ymlPath string) error {
filepath.Join(ymlDir, "generated_component_test.go"), md, packageName); err != nil {
return err
}
} else {
if _, err = os.Stat(filepath.Join(codeDir, "generated_status.go")); err == nil {
if err = os.Remove(filepath.Join(codeDir, "generated_status.go")); err != nil {
return err
}
}
if _, err = os.Stat(filepath.Join(ymlDir, "generated_component_test.go")); err == nil {
if err = os.Remove(filepath.Join(ymlDir, "generated_component_test.go")); err != nil {
return err
}
}
}
if err = generateFile(filepath.Join(tmplDir, "package_test.go.tmpl"),
@ -124,6 +135,27 @@ func run(ymlPath string) error {
toGenerate[filepath.Join(tmplDir, "telemetry_test.go.tmpl")] = filepath.Join(codeDir, "generated_telemetry_test.go")
toGenerate[filepath.Join(tmplDir, "telemetrytest.go.tmpl")] = filepath.Join(testDir, "generated_telemetrytest.go")
toGenerate[filepath.Join(tmplDir, "telemetrytest_test.go.tmpl")] = filepath.Join(testDir, "generated_telemetrytest_test.go")
} else {
if _, err = os.Stat(filepath.Join(ymlDir, "generated_telemetry.go")); err == nil {
if err = os.Remove(filepath.Join(ymlDir, "generated_telemetry.go")); err != nil {
return err
}
}
if _, err = os.Stat(filepath.Join(ymlDir, "generated_telemetry_test.go")); err == nil {
if err = os.Remove(filepath.Join(ymlDir, "generated_telemetry_test.go")); err != nil {
return err
}
}
if _, err = os.Stat(filepath.Join(ymlDir, "generated_telemetrytest.go")); err == nil {
if err = os.Remove(filepath.Join(ymlDir, "generated_telemetrytest.go")); err != nil {
return err
}
}
if _, err = os.Stat(filepath.Join(ymlDir, "generated_telemetrytest_test.go")); err == nil {
if err = os.Remove(filepath.Join(ymlDir, "generated_telemetrytest_test.go")); err != nil {
return err
}
}
}
if len(md.Metrics) != 0 || len(md.Telemetry.Metrics) != 0 || len(md.ResourceAttributes) != 0 { // if there's metrics or internal metrics, generate documentation for them

View File

@ -37,7 +37,9 @@ func TestRunContents(t *testing.T) {
wantConfigGenerated bool
wantTelemetryGenerated bool
wantResourceAttributesGenerated bool
wantReadmeGenerated bool
wantStatusGenerated bool
wantComponentTestGenerated bool
wantGoleakIgnore bool
wantGoleakSkip bool
wantGoleakSetup bool
@ -49,89 +51,131 @@ func TestRunContents(t *testing.T) {
wantErr: true,
},
{
yml: "basic_connector.yaml",
wantErr: false,
wantStatusGenerated: true,
yml: "basic_connector.yaml",
wantErr: false,
wantStatusGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "basic_receiver.yaml",
wantErr: false,
wantStatusGenerated: true,
yml: "basic_receiver.yaml",
wantErr: false,
wantStatusGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "metrics_and_type.yaml",
wantMetricsGenerated: true,
wantConfigGenerated: true,
wantStatusGenerated: true,
yml: "basic_pkg.yaml",
wantErr: false,
wantStatusGenerated: false,
wantReadmeGenerated: true,
},
{
yml: "metrics_and_type.yaml",
wantMetricsGenerated: true,
wantConfigGenerated: true,
wantStatusGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "resource_attributes_only.yaml",
wantConfigGenerated: true,
wantStatusGenerated: true,
wantResourceAttributesGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "status_only.yaml",
wantStatusGenerated: true,
yml: "status_only.yaml",
wantStatusGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "with_tests_receiver.yaml",
wantStatusGenerated: true,
yml: "with_tests_receiver.yaml",
wantStatusGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "with_tests_exporter.yaml",
wantStatusGenerated: true,
yml: "with_tests_exporter.yaml",
wantStatusGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "with_tests_processor.yaml",
wantStatusGenerated: true,
yml: "with_tests_processor.yaml",
wantStatusGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "with_tests_extension.yaml",
wantStatusGenerated: true,
yml: "with_tests_extension.yaml",
wantStatusGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "with_tests_connector.yaml",
wantStatusGenerated: true,
yml: "with_tests_connector.yaml",
wantStatusGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "with_goleak_ignores.yaml",
wantStatusGenerated: true,
wantGoleakIgnore: true,
yml: "with_goleak_ignores.yaml",
wantStatusGenerated: true,
wantGoleakIgnore: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "with_goleak_skip.yaml",
wantStatusGenerated: true,
wantGoleakSkip: true,
yml: "with_goleak_skip.yaml",
wantStatusGenerated: true,
wantGoleakSkip: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "with_goleak_setup.yaml",
wantStatusGenerated: true,
wantGoleakSetup: true,
yml: "with_goleak_setup.yaml",
wantStatusGenerated: true,
wantGoleakSetup: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "with_goleak_teardown.yaml",
wantStatusGenerated: true,
wantGoleakTeardown: true,
yml: "with_goleak_teardown.yaml",
wantStatusGenerated: true,
wantGoleakTeardown: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "with_telemetry.yaml",
wantStatusGenerated: true,
wantTelemetryGenerated: true,
yml: "with_telemetry.yaml",
wantStatusGenerated: true,
wantTelemetryGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "invalid_telemetry_missing_value_type_for_histogram.yaml",
wantErr: true,
yml: "invalid_telemetry_missing_value_type_for_histogram.yaml",
wantErr: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "async_metric.yaml",
wantMetricsGenerated: true,
wantConfigGenerated: true,
wantStatusGenerated: true,
yml: "async_metric.yaml",
wantMetricsGenerated: true,
wantConfigGenerated: true,
wantStatusGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
{
yml: "custom_generated_package_name.yaml",
wantStatusGenerated: true,
yml: "custom_generated_package_name.yaml",
wantStatusGenerated: true,
wantReadmeGenerated: true,
wantComponentTestGenerated: true,
},
}
for _, tt := range tests {
@ -147,17 +191,20 @@ func TestRunContents(t *testing.T) {
<!-- status autogenerated section -->
foo
<!-- end autogenerated section -->`), 0o600))
err = run(metadataFile)
md, err := LoadMetadata(metadataFile)
if tt.wantErr {
require.Error(t, err)
return
}
require.NoError(t, err)
md, err := LoadMetadata(metadataFile)
require.NoError(t, err)
generatedPackageDir := filepath.Join("internal", md.GeneratedPackageName)
require.NoError(t, os.MkdirAll(filepath.Join(tmpdir, generatedPackageDir), 0o700))
require.NoError(t, os.WriteFile(filepath.Join(tmpdir, generatedPackageDir, "generated_status.go"), []byte("status"), 0o600))
require.NoError(t, os.WriteFile(filepath.Join(tmpdir, generatedPackageDir, "generated_telemetry_test.go"), []byte("test"), 0o600))
require.NoError(t, os.WriteFile(filepath.Join(tmpdir, generatedPackageDir, "generated_component_test.go"), []byte("test"), 0o600))
err = run(metadataFile)
require.NoError(t, err)
var contents []byte
if tt.wantMetricsGenerated {
@ -197,7 +244,6 @@ foo
}
} else {
require.NoFileExists(t, filepath.Join(tmpdir, generatedPackageDir, "generated_telemetry.go"))
require.NoFileExists(t, filepath.Join(tmpdir, generatedPackageDir, "generated_telemetry_test.go"))
}
if !tt.wantMetricsGenerated && !tt.wantTelemetryGenerated && !tt.wantResourceAttributesGenerated {
@ -206,22 +252,28 @@ foo
if tt.wantStatusGenerated {
require.FileExists(t, filepath.Join(tmpdir, generatedPackageDir, "generated_status.go"))
contents, err = os.ReadFile(filepath.Join(tmpdir, "README.md")) //nolint:gosec
require.NoError(t, err)
require.NotContains(t, string(contents), "foo")
} else {
require.NoFileExists(t, filepath.Join(tmpdir, generatedPackageDir, "generated_status.go"))
contents, err = os.ReadFile(filepath.Join(tmpdir, "README.md")) //nolint:gosec
require.NoError(t, err)
}
contents, err = os.ReadFile(filepath.Join(tmpdir, "README.md")) //nolint:gosec
require.NoError(t, err)
if tt.wantReadmeGenerated {
require.NotContains(t, string(contents), "foo")
} else {
require.Contains(t, string(contents), "foo")
}
require.FileExists(t, filepath.Join(tmpdir, "generated_component_test.go"))
contents, err = os.ReadFile(filepath.Join(tmpdir, "generated_component_test.go")) //nolint:gosec
require.NoError(t, err)
require.Contains(t, string(contents), "func Test")
_, err = parser.ParseFile(token.NewFileSet(), "", contents, parser.DeclarationErrors)
require.NoError(t, err)
if tt.wantComponentTestGenerated {
require.FileExists(t, filepath.Join(tmpdir, "generated_component_test.go"))
contents, err = os.ReadFile(filepath.Join(tmpdir, "generated_component_test.go")) //nolint:gosec
require.NoError(t, err)
require.Contains(t, string(contents), "func Test")
_, err = parser.ParseFile(token.NewFileSet(), "", contents, parser.DeclarationErrors)
require.NoError(t, err)
} else {
require.NoFileExists(t, filepath.Join(tmpdir, "generated_component_test.go"))
}
require.FileExists(t, filepath.Join(tmpdir, "generated_package_test.go"))
contents, err = os.ReadFile(filepath.Join(tmpdir, "generated_package_test.go")) //nolint:gosec

View File

@ -0,0 +1,6 @@
type: test
status:
class: pkg
stability:
beta: [logs]