summaryrefslogtreecommitdiff
path: root/build.go
diff options
context:
space:
mode:
Diffstat (limited to 'build.go')
-rw-r--r--build.go55
1 files changed, 38 insertions, 17 deletions
diff --git a/build.go b/build.go
index c15c8e2..4143582 100644
--- a/build.go
+++ b/build.go
@@ -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()) }