Skip to content

Commit

Permalink
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 19 deletions.
36 changes: 19 additions & 17 deletions cmd/mdatagen/internal/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,16 @@ func templatize(tmplFile string, md Metadata) *template.Template {
}).ParseFS(TemplateFS, strings.ReplaceAll(tmplFile, "\\", "/")))
}

func executeTemplate(tmplFile string, md Metadata, goPackage string) ([]byte, error) {
tmpl := templatize(tmplFile, md)
buf := bytes.Buffer{}

if err := tmpl.Execute(&buf, TemplateContext{Metadata: md, Package: goPackage}); err != nil {
return []byte{}, fmt.Errorf("failed executing template: %w", err)
}
return buf.Bytes(), nil
}

func inlineReplace(tmplFile string, outputFile string, md Metadata, start string, end string) error {
var readmeContents []byte
var err error
Expand All @@ -373,20 +383,16 @@ func inlineReplace(tmplFile string, outputFile string, md Metadata, start string
return nil
}

tmpl := templatize(tmplFile, md)
buf := bytes.Buffer{}

if md.GithubProject == "" {
md.GithubProject = "open-telemetry/opentelemetry-collector-contrib"
}

if err := tmpl.Execute(&buf, TemplateContext{Metadata: md, Package: "metadata"}); err != nil {
return fmt.Errorf("failed executing template: %w", err)
buf, err := executeTemplate(tmplFile, md, "metadata")
if err != nil {
return err
}

result := buf.String()

s := re.ReplaceAllString(string(readmeContents), result)
s := re.ReplaceAllString(string(readmeContents), string(buf))
if err := os.WriteFile(outputFile, []byte(s), 0600); err != nil {
return fmt.Errorf("failed writing %q: %w", outputFile, err)
}
Expand All @@ -395,21 +401,17 @@ func inlineReplace(tmplFile string, outputFile string, md Metadata, start string
}

func generateFile(tmplFile string, outputFile string, md Metadata, goPackage string) error {
tmpl := templatize(tmplFile, md)
buf := bytes.Buffer{}

if err := tmpl.Execute(&buf, TemplateContext{Metadata: md, Package: goPackage}); err != nil {
return fmt.Errorf("failed executing template: %w", err)
}

if err := os.Remove(outputFile); err != nil && !errors.Is(err, os.ErrNotExist) {
return fmt.Errorf("unable to remove generated file %q: %w", outputFile, err)
}

result := buf.Bytes()
result, err := executeTemplate(tmplFile, md, goPackage)
if err != nil {
return err
}
var formatErr error
if strings.HasSuffix(outputFile, ".go") {
if formatted, err := format.Source(buf.Bytes()); err == nil {
if formatted, err := format.Source(result); err == nil {
result = formatted
} else {
formatErr = fmt.Errorf("failed formatting %s:%w", outputFile, err)
Expand Down
24 changes: 23 additions & 1 deletion cmd/mdatagen/internal/command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,23 @@ import (
"path/filepath"
"testing"

"github.com/spf13/cobra"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"go.opentelemetry.io/collector/component"
)

func TestNewCommand(t *testing.T) {
cmd, err := NewCommand()
require.NoError(t, err)

assert.NotNil(t, cmd)
assert.IsType(t, &cobra.Command{}, cmd)
assert.Equal(t, "mdatagen", cmd.Use)
assert.True(t, cmd.SilenceUsage)
}

func TestRunContents(t *testing.T) {
tests := []struct {
yml string
Expand All @@ -36,6 +48,16 @@ func TestRunContents(t *testing.T) {
yml: "invalid.yaml",
wantErr: true,
},
{
yml: "basic_connector.yaml",
wantErr: false,
wantStatusGenerated: true,
},
{
yml: "basic_receiver.yaml",
wantErr: false,
wantStatusGenerated: true,
},
{
yml: "metrics_and_type.yaml",
wantMetricsGenerated: true,
Expand Down Expand Up @@ -344,7 +366,7 @@ Some info about a component
componentClass: "receiver",
distros: []string{"contrib"},
codeowners: &Codeowners{
Active: []string{"foo"},
Active: []string{"open-telemetry/collector-approvers"},
},
},
{
Expand Down
6 changes: 6 additions & 0 deletions cmd/mdatagen/internal/testdata/basic_connector.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
type: test

status:
class: connector
stability:
beta: [traces_to_traces]
6 changes: 6 additions & 0 deletions cmd/mdatagen/internal/testdata/basic_receiver.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
type: test

status:
class: receiver
stability:
beta: [logs]
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
| Stability | [beta]: metrics |
| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Areceiver%2Ffoo%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Areceiver%2Ffoo) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Areceiver%2Ffoo%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Areceiver%2Ffoo) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@foo](https://www.github.com/foo) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@open-telemetry/collector-approvers](https://github.com/orgs/open-telemetry/teams/collector-approvers) |

[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
Expand Down

0 comments on commit 83b18b1

Please sign in to comment.