Skip to content

Commit

Permalink
[mdatagen] delete generated_status.go in case it is not required
Browse files Browse the repository at this point in the history
  • Loading branch information
atoulme committed Feb 16, 2025
1 parent f9562a0 commit 0224642
Show file tree
Hide file tree
Showing 4 changed files with 175 additions and 60 deletions.
25 changes: 25 additions & 0 deletions .chloggen/delete_old_status.yaml
Original file line number Diff line number Diff line change
@@ -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: []
32 changes: 32 additions & 0 deletions cmd/mdatagen/internal/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
Expand Down Expand Up @@ -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
Expand Down
172 changes: 112 additions & 60 deletions cmd/mdatagen/internal/command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 {
Expand All @@ -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)
generatedPackageDir := filepath.Join("internal", md.GeneratedPackageName)
require.NoError(t, os.MkdirAll(filepath.Join(tmpdir, generatedPackageDir), 0755))
require.NoError(t, os.WriteFile(filepath.Join(tmpdir, generatedPackageDir, "generated_status.go"), []byte("status"), 0600))
require.NoError(t, os.WriteFile(filepath.Join(tmpdir, generatedPackageDir, "generated_telemetry_test.go"), []byte("test"), 0600))
require.NoError(t, os.WriteFile(filepath.Join(tmpdir, generatedPackageDir, "generated_component_test.go"), []byte("test"), 0600))

md, err := LoadMetadata(metadataFile)
err = run(metadataFile)
require.NoError(t, err)
generatedPackageDir := filepath.Join("internal", md.GeneratedPackageName)

var contents []byte
if tt.wantMetricsGenerated {
Expand Down Expand Up @@ -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 {
Expand All @@ -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
Expand Down
6 changes: 6 additions & 0 deletions cmd/mdatagen/internal/testdata/basic_pkg.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
type: test

status:
class: pkg
stability:
beta: [logs]

0 comments on commit 0224642

Please sign in to comment.