/ go / app / cmd / make_samples / make-samples.go
make-samples.go
 1  package make_samples
 2  
 3  import (
 4  	"github.com/spf13/cobra"
 5  	"github.com/thunderbrewhq/binana/go/app"
 6  	"github.com/thunderbrewhq/binana/go/app/cmd/root"
 7  	"github.com/thunderbrewhq/binana/go/app/util"
 8  	"github.com/thunderbrewhq/binana/go/app/util/dbutil"
 9  )
10  
11  var make_samples_cmd = cobra.Command{
12  	Use: "make-samples",
13  	Run: run_make_samples_command,
14  }
15  
16  func init() {
17  	f := make_samples_cmd.Flags()
18  	f.StringP("source", "s", "", "required: source tree of sample binaries")
19  	f.StringP("output-file", "o", "", "write the database to a file")
20  	f.StringSlice("direct-mirror", nil, "list of direct mirror URLs that already contain the sample binaries")
21  	f.StringSlice("ipfs-gateway", nil, "list of IPFS gateways")
22  	f.StringP("format", "f", "json", "the format of the output database [json|parquet]")
23  	root.RootCmd.AddCommand(&make_samples_cmd)
24  }
25  
26  func run_make_samples_command(cmd *cobra.Command, args []string) {
27  	f := cmd.Flags()
28  	var (
29  		params util.MakeSampleDatabaseParams
30  		err    error
31  		format string
32  	)
33  	params.Source, err = f.GetString("source")
34  	if err != nil {
35  		app.Fatal(err)
36  	}
37  	if params.Source == "" {
38  		cmd.Help()
39  		return
40  	}
41  	params.Output, err = f.GetString("output-file")
42  	if err != nil {
43  		app.Fatal(err)
44  	}
45  	format, err = f.GetString("format")
46  	if err != nil {
47  		app.Fatal(err)
48  	}
49  	switch format {
50  	case "json":
51  		params.Format = dbutil.DatabaseJSON
52  	case "parquet":
53  		params.Format = dbutil.DatabaseParquet
54  	default:
55  		app.Fatal("unknown format", format)
56  	}
57  
58  	params.DirectMirrors, err = f.GetStringSlice("direct-mirror")
59  	if err != nil {
60  		app.Fatal(err)
61  	}
62  	params.IPFSGateways, err = f.GetStringSlice("ipfs-gateway")
63  	if err != nil {
64  		app.Fatal(err)
65  	}
66  
67  	util.MakeSampleDatabase(&params)
68  }