github.com/grafana/pyroscope@v1.18.0/pkg/frontend/vcs/source/golang/gen.go (about)

     1  //go:build ignore
     2  
     3  package main
     4  
     5  import (
     6  	"bytes"
     7  	"context"
     8  	"html/template"
     9  	"io"
    10  	"log"
    11  	"os"
    12  
    13  	"github.com/github/go-pipe/pipe"
    14  
    15  	"github.com/grafana/pyroscope/pkg/querier/golang"
    16  )
    17  
    18  func main() {
    19  	// todo: In the future we might want to support more than one version
    20  	// Or even list all files from standard packages to improve matching.
    21  	packages, err := golang.StdPackages("")
    22  	if err != nil {
    23  		log.Fatal(err)
    24  	}
    25  	t := template.Must(template.New("packages").Parse(packagesTemplate))
    26  	var buff bytes.Buffer
    27  	p := pipe.New(pipe.WithStdout(&buff))
    28  	p.Add(
    29  		pipe.Function("", func(ctx context.Context, env pipe.Env, stdin io.Reader, stdout io.Writer) error {
    30  			err = t.Execute(stdout, packages)
    31  			if err != nil {
    32  				log.Fatal(err)
    33  			}
    34  			return nil
    35  		}),
    36  		// This might be a bit overkill, but it's nice to have a consistent format.
    37  		// todo: We could use "go/format" package only that will simplify the code but also remove the needs
    38  		// for expected installed binaries.
    39  		pipe.Command("gofmt"),
    40  		pipe.Command("goimports"),
    41  	)
    42  	p.Run(context.Background())
    43  	err = os.WriteFile("packages_gen.go", buff.Bytes(), 0666)
    44  	if err != nil {
    45  		log.Fatal(err)
    46  	}
    47  }
    48  
    49  var packagesTemplate = `
    50  package golang
    51  // Code generated. DO NOT EDIT.
    52  
    53  var StandardPackages = map[string]struct{}{
    54  	{{- range $key, $value := .}}
    55  	"{{$key}}": {},
    56  	{{- end}}
    57  }
    58  `