diff --git a/cmd/mdatagen/go.mod b/cmd/mdatagen/go.mod index c1a76e56b32..31831adc565 100644 --- a/cmd/mdatagen/go.mod +++ b/cmd/mdatagen/go.mod @@ -14,6 +14,7 @@ require ( go.opentelemetry.io/collector/connector/connectortest v0.143.0 go.opentelemetry.io/collector/consumer v1.49.0 go.opentelemetry.io/collector/consumer/consumertest v0.143.0 + go.opentelemetry.io/collector/featuregate v1.49.0 go.opentelemetry.io/collector/filter v0.143.0 go.opentelemetry.io/collector/pdata v1.49.0 go.opentelemetry.io/collector/pdata/xpdata v0.143.0 @@ -60,7 +61,6 @@ require ( go.opentelemetry.io/collector/connector/xconnector v0.143.0 // indirect go.opentelemetry.io/collector/consumer/consumererror v0.143.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.143.0 // indirect - go.opentelemetry.io/collector/featuregate v1.49.0 // indirect go.opentelemetry.io/collector/internal/componentalias v0.0.0-00010101000000-000000000000 // indirect go.opentelemetry.io/collector/internal/fanoutconsumer v0.143.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.143.0 // indirect diff --git a/cmd/mdatagen/internal/command.go b/cmd/mdatagen/internal/command.go index 0916c5ba945..9ecf8f58fd6 100644 --- a/cmd/mdatagen/internal/command.go +++ b/cmd/mdatagen/internal/command.go @@ -203,6 +203,10 @@ func run(ymlPath string) error { toGenerate[filepath.Join(tmplDir, "logs_test.go.tmpl")] = filepath.Join(codeDir, "generated_logs_test.go") } + if len(md.FeatureGates) > 0 { // only generate feature gates if feature gates are present + toGenerate[filepath.Join(tmplDir, "feature_gates.go.tmpl")] = filepath.Join(codeDir, "generated_feature_gates.go") + } + // If at least one file to generate, will need the codeDir if len(toGenerate) > 0 { if err = os.MkdirAll(codeDir, 0o700); err != nil { diff --git a/cmd/mdatagen/internal/embedded_templates_test.go b/cmd/mdatagen/internal/embedded_templates_test.go index b52dd4feff3..255126dd44d 100644 --- a/cmd/mdatagen/internal/embedded_templates_test.go +++ b/cmd/mdatagen/internal/embedded_templates_test.go @@ -41,6 +41,7 @@ func TestEnsureTemplatesLoaded(t *testing.T) { path.Join(rootDir, "telemetrytest_test.go.tmpl"): {}, path.Join(rootDir, "helper.tmpl"): {}, path.Join(rootDir, "feature_gates.md.tmpl"): {}, + path.Join(rootDir, "feature_gates.go.tmpl"): {}, } count = 0 ) diff --git a/cmd/mdatagen/internal/loader_test.go b/cmd/mdatagen/internal/loader_test.go index b84b59c8e55..d2a2177c46e 100644 --- a/cmd/mdatagen/internal/loader_test.go +++ b/cmd/mdatagen/internal/loader_test.go @@ -464,6 +464,15 @@ func TestLoadMetadata(t *testing.T) { ScopeName: "go.opentelemetry.io/collector/internal/receiver/samplereceiver", ShortFolderName: "sample", Tests: Tests{Host: "newMdatagenNopHost()"}, + FeatureGates: []FeatureGate{ + { + ID: "receiver.sample.featuregate.example", + Description: "This is an example feature gate for testing mdatagen code generation.", + Stage: "alpha", + FromVersion: "v0.100.0", + ReferenceURL: "https://github.com/open-telemetry/opentelemetry-collector/issues/12345", + }, + }, }, }, { diff --git a/cmd/mdatagen/internal/samplereceiver/documentation.md b/cmd/mdatagen/internal/samplereceiver/documentation.md index 392823cbc68..84b8153bfbe 100644 --- a/cmd/mdatagen/internal/samplereceiver/documentation.md +++ b/cmd/mdatagen/internal/samplereceiver/documentation.md @@ -256,3 +256,13 @@ Duration of request [Alpha] | Unit | Metric Type | Value Type | Stability | | ---- | ----------- | ---------- | --------- | | s | Histogram | Double | Alpha | + +## Feature Gates + +This component has the following feature gates: + +| Feature Gate | Stage | Description | From Version | To Version | Reference | +| ------------ | ----- | ----------- | ------------ | ---------- | --------- | +| `receiver.sample.featuregate.example` | alpha | This is an example feature gate for testing mdatagen code generation. | v0.100.0 | N/A | [Link](https://github.com/open-telemetry/opentelemetry-collector/issues/12345) | + +For more information about feature gates, see the [Feature Gates](https://github.com/open-telemetry/opentelemetry-collector/blob/main/featuregate/README.md) documentation. diff --git a/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_feature_gates.go b/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_feature_gates.go new file mode 100644 index 00000000000..6537d6b20c3 --- /dev/null +++ b/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_feature_gates.go @@ -0,0 +1,15 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package metadata + +import ( + "go.opentelemetry.io/collector/featuregate" +) + +var ReceiverSampleFeaturegateExampleFeatureGate = featuregate.GlobalRegistry().MustRegister( + "receiver.sample.featuregate.example", + featuregate.StageAlpha, + featuregate.WithRegisterDescription("This is an example feature gate for testing mdatagen code generation."), + featuregate.WithRegisterReferenceURL("https://github.com/open-telemetry/opentelemetry-collector/issues/12345"), + featuregate.WithRegisterFromVersion("v0.100.0"), +) diff --git a/cmd/mdatagen/internal/samplereceiver/metadata.yaml b/cmd/mdatagen/internal/samplereceiver/metadata.yaml index 77c502160e2..691d3b21ee1 100644 --- a/cmd/mdatagen/internal/samplereceiver/metadata.yaml +++ b/cmd/mdatagen/internal/samplereceiver/metadata.yaml @@ -9,6 +9,13 @@ github_project: open-telemetry/opentelemetry-collector sem_conv_version: 1.38.0 +feature_gates: + - id: receiver.sample.featuregate.example + description: This is an example feature gate for testing mdatagen code generation. + stage: alpha + from_version: v0.100.0 + reference_url: https://github.com/open-telemetry/opentelemetry-collector/issues/12345 + status: disable_codecov_badge: true class: receiver diff --git a/cmd/mdatagen/internal/templates/feature_gates.go.tmpl b/cmd/mdatagen/internal/templates/feature_gates.go.tmpl new file mode 100644 index 00000000000..5410857b189 --- /dev/null +++ b/cmd/mdatagen/internal/templates/feature_gates.go.tmpl @@ -0,0 +1,21 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package {{ .Package }} + +import ( + "go.opentelemetry.io/collector/featuregate" +) + +{{- range $idx, $gate := .FeatureGates }} + +var {{ printf "%s" $gate.ID | publicVar }}FeatureGate = featuregate.GlobalRegistry().MustRegister( + "{{ $gate.ID }}", + featuregate.Stage{{ printf "%s" $gate.Stage | casesTitle }}, + featuregate.WithRegisterDescription("{{ $gate.Description }}"), + featuregate.WithRegisterReferenceURL("{{ $gate.ReferenceURL }}"), + featuregate.WithRegisterFromVersion("{{ $gate.FromVersion }}"), + {{- if $gate.ToVersion }} + featuregate.WithRegisterToVersion("{{ $gate.ToVersion }}"), + {{- end }} +) +{{- end }}