diff --git a/.chloggen/delete_old_status.yaml b/.chloggen/delete_old_status.yaml new file mode 100644 index 00000000000..660b798456b --- /dev/null +++ b/.chloggen/delete_old_status.yaml @@ -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: [] diff --git a/cmd/mdatagen/internal/command.go b/cmd/mdatagen/internal/command.go index 9c5293f5fa1..384fb1e7301 100644 --- a/cmd/mdatagen/internal/command.go +++ b/cmd/mdatagen/internal/command.go @@ -84,6 +84,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"), @@ -116,6 +127,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 diff --git a/cmd/mdatagen/internal/command_test.go b/cmd/mdatagen/internal/command_test.go index 058b7bff9cd..d14d89dd9eb 100644 --- a/cmd/mdatagen/internal/command_test.go +++ b/cmd/mdatagen/internal/command_test.go @@ -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, + wantReadmeGenerated: true, + wantComponentTestGenerated: true, }, { - yml: "basic_receiver.yaml", + yml: "basic_pkg.yaml", wantErr: false, - wantStatusGenerated: true, + wantStatusGenerated: false, + wantReadmeGenerated: true, }, { - yml: "metrics_and_type.yaml", - wantMetricsGenerated: true, - wantConfigGenerated: true, - wantStatusGenerated: 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) { foo `), 0o600)) - - err = run(metadataFile) + md, err := LoadMetadata(metadataFile) if tt.wantErr { require.Error(t, err) return } 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)) - md, err := LoadMetadata(metadataFile) + err = run(metadataFile) require.NoError(t, err) - generatedPackageDir := filepath.Join("internal", md.GeneratedPackageName) 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) - 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) + 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") + } + + 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 diff --git a/cmd/mdatagen/internal/testdata/basic_pkg.yaml b/cmd/mdatagen/internal/testdata/basic_pkg.yaml new file mode 100644 index 00000000000..65f0244d062 --- /dev/null +++ b/cmd/mdatagen/internal/testdata/basic_pkg.yaml @@ -0,0 +1,6 @@ +type: test + +status: + class: pkg + stability: + beta: [logs] \ No newline at end of file