diff options
Diffstat (limited to 'build.go')
-rw-r--r-- | build.go | 55 |
1 files changed, 38 insertions, 17 deletions
@@ -7,6 +7,7 @@ import ( "flag" "fmt" "html/template" + "log/slog" "maps" "os" "os/exec" @@ -16,7 +17,6 @@ import ( "strings" "github.com/BurntSushi/toml" - log "github.com/sirupsen/logrus" ) const caniuseRepoURL = "https://github.com/jplatte/caniuse.rs" @@ -36,7 +36,10 @@ var style []byte //go:embed find-lib-feats.sh var findLibFeatsShellCommand string +var log *slog.Logger + func main() { + log = slog.New(slog.NewTextHandler(os.Stderr, nil)) caniuseRepo := "caniuse.rs" rustRepo := "rust" outDir := "out" @@ -65,7 +68,8 @@ func main() { cmd.Stderr = &stderr libFeaturesText, err := cmd.Output() if err != nil { - log.WithField("stderr", stderr.String()).Fatalf("failed to run shell command to find library features: %s", err) + log.Error("failed to run shell command to find library features", Error(err), "stderr", stderr.String()) + os.Exit(1) } libFeatureFlags := strings.Split(string(libFeaturesText), "\n") @@ -73,11 +77,13 @@ func main() { versionsPath := fmt.Sprintf(caniuseRepo + "/data/versions.toml") _, err = toml.DecodeFile(versionsPath, &versionInfos) if err != nil { - log.Fatalf("error parsing %s: %s", versionsPath, err) + log.Error("failed to parse versions.toml", Error(err), "path", versionsPath) + os.Exit(1) } if len(versionInfos) == 0 { - log.Fatal("found no versions in versions.toml") + log.Error("found no versions in versions.toml") + os.Exit(1) } versions := make([]Version, 0) @@ -113,7 +119,8 @@ func main() { } if featureCount == 0 { - log.Fatal("found no features") + log.Error("found no features") + os.Exit(1) } tmpl := template.New("template.html.tmpl").Funcs(template.FuncMap{ @@ -129,17 +136,20 @@ func main() { tmpl, err = tmpl.Parse(templateText) if err != nil { - log.Fatalf("error parsing template: %s", err) + log.Error("error parsing template", Error(err)) + os.Exit(1) } err = os.MkdirAll(outDir, 0o755) if err != nil { - log.Fatalf("error creating directory: %s", err) + log.Error("error creating output directory", Error(err)) + os.Exit(1) } outputFile, err := os.Create(outDir + "/index.html") if err != nil { - log.Fatalf("error creating index.html: %s", err) + log.Error("error creating index.html", Error(err)) + os.Exit(1) } defer outputFile.Close() @@ -150,29 +160,34 @@ func main() { }, ) if err != nil { - log.Fatalf("error executing template: %s", err) + log.Error("error executing template", Error(err)) + os.Exit(1) } outputFile, err = os.Create(outDir + "/data.json") if err != nil { - log.Fatalf("error creating data.json: %s", err) + log.Error("error creating data.json", Error(err)) + os.Exit(1) } defer outputFile.Close() encoder := json.NewEncoder(outputFile) err = encoder.Encode(versions) if err != nil { - log.Fatalf("error encoding JSON: %s", err) + log.Error("error encoding JSON", Error(err)) + os.Exit(1) } err = os.WriteFile(outDir+"/script.js", script, 0o644) if err != nil { - log.Fatalf("error creating script.js: %s", err) + log.Error("error creating script.js", Error(err)) + os.Exit(1) } err = os.WriteFile(outDir+"/style.css", style, 0o644) if err != nil { - log.Fatalf("error creating style.css: %s", err) + log.Error("error creating style.css", Error(err)) + os.Exit(1) } } @@ -207,16 +222,19 @@ func getFeatures(caniuseRepo string, version string) map[string]Feature { if os.IsNotExist(err) { return nil } - log.Fatal(err) + log.Error("failed to read directory", "path", dirPath, Error(err)) + os.Exit(1) } features := make(map[string]Feature) for _, entry := range entries { var feature Feature - _, err := toml.DecodeFile(dirPath+"/"+entry.Name(), &feature) + path := dirPath + "/" + entry.Name() + _, err := toml.DecodeFile(path, &feature) if err != nil { - log.Fatalf("Error parsing %s: %s\n", dirPath+entry.Name(), err) + log.Error("error decoding TOML file", "path", path, Error(err)) + os.Exit(1) } if feature.TrackingIssueId != nil { feature.URL = fmt.Sprintf("https://github.com/rust-lang/rust/issues/%d", *feature.TrackingIssueId) @@ -276,7 +294,8 @@ func runCommand(name string, args ...string) { var stderr bytes.Buffer cmd.Stderr = &stderr if err := cmd.Run(); err != nil { - log.WithField("stderr", stderr.String()).Fatalf("command '%s %v' failed: %v", name, args, err) + log.Error("failed to run command", "command", cmd.String(), Error(err), "stderr", stderr.String()) + os.Exit(1) } } @@ -284,3 +303,5 @@ func runCommand(name string, args ...string) { func nilAsEmptyArray[T any](slice []T) []T { return append([]T{}, slice...) } + +func Error(value error) slog.Attr { return slog.String("error", value.Error()) } |