| //go:build ignore |
| // +build ignore |
| |
| package main |
| |
| import ( |
| "bytes" |
| "context" |
| "encoding/json" |
| "fmt" |
| "os" |
| "path" |
| "runtime" |
| "sort" |
| "strings" |
| |
| "go.skia.org/infra/go/exec" |
| "go.skia.org/infra/go/git" |
| "go.skia.org/infra/go/gitiles" |
| "go.skia.org/infra/go/sklog" |
| "go.skia.org/infra/go/taskname" |
| ) |
| |
| const ( |
| TARGET_FILE = "task_name_schema_gen.go" |
| TMPL = `// Code generated by "go run gen_schema.go"; DO NOT EDIT |
| |
| package taskname |
| |
| var SCHEMA_FROM_GIT = map[string]*Schema{ |
| %s} |
| |
| var SEPARATOR_FROM_GIT = "%s" |
| ` |
| ) |
| |
| type taskNameSchema struct { |
| // Schema maps a role (e.g. Build) to a taskname.Schema instance. |
| // Note, the json names are a carryover from Buildbot days, where builder == task |
| Schema map[string]*taskname.Schema `json:"builder_name_schema"` |
| // TaskNameSep specifies how the various keys will be seperated, e.g. "-" |
| TaskNameSep string `json:"builder_name_sep"` |
| } |
| |
| func main() { |
| _, filename, _, _ := runtime.Caller(0) |
| pkgDir := path.Dir(filename) |
| |
| // Load the schema from JSON |
| r := gitiles.NewRepo("https://skia.googlesource.com/skia", nil) |
| b, err := r.ReadFileAtRef(context.Background(), "infra/bots/recipe_modules/builder_name_schema/builder_name_schema.json", git.MainBranch) |
| if err != nil { |
| sklog.Fatalf("Could not read schema file: %s\n", err) |
| } |
| schema := new(taskNameSchema) |
| if err := json.NewDecoder(bytes.NewReader(b)).Decode(schema); err != nil { |
| sklog.Fatalf("Could not decode schema file: %s\n", err) |
| } |
| |
| schemaLines := []string{} |
| for key, value := range schema.Schema { |
| line := fmt.Sprintf("\t\"%s\": %#v,\n", key, value) |
| // "%#v" includes the package name, ie "taskname.Schema", |
| // but since the generated file is part of the taskname |
| // package, that results in a circular import. So we remove it |
| // here. |
| line = strings.Replace(line, "taskname.", "", -1) |
| schemaLines = append(schemaLines, line) |
| } |
| sort.Strings(schemaLines) |
| assetsStr := strings.Join(schemaLines, "") |
| fileContents := []byte(fmt.Sprintf(TMPL, assetsStr, schema.TaskNameSep)) |
| targetFile := path.Join(pkgDir, TARGET_FILE) |
| if err := os.WriteFile(targetFile, fileContents, os.ModePerm); err != nil { |
| sklog.Fatal(err) |
| } |
| if _, err := exec.RunCwd(context.Background(), ".", "gofmt", "-s", "-w", targetFile); err != nil { |
| sklog.Fatal(err) |
| } |
| } |