diff --git a/go.mod b/go.mod index 7981059..b9a4707 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.25.0 require ( codeberg.org/git-pages/go-headers v1.1.1 codeberg.org/git-pages/go-slog-syslog v0.0.0-20251207093707-892f654e80b7 + github.com/BurntSushi/toml v1.6.0 github.com/KimMachineGun/automemlimit v0.7.5 github.com/bits-and-blooms/bloom/v3 v3.7.1 github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500 @@ -18,7 +19,6 @@ require ( github.com/klauspost/compress v1.18.5 github.com/maypok86/otter/v2 v2.3.0 github.com/minio/minio-go/v7 v7.0.100 - github.com/pelletier/go-toml/v2 v2.3.0 github.com/pquerna/cachecontrol v0.2.0 github.com/prometheus/client_golang v1.23.2 github.com/samber/slog-multi v1.8.0 diff --git a/go.sum b/go.sum index c7a8858..e9e3ec3 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ codeberg.org/git-pages/go-headers v1.1.1 h1:fpIBELKo66Z2k+gCeYl5mCEXVQ99Lmx1iup1 codeberg.org/git-pages/go-headers v1.1.1/go.mod h1:N4gwH0U3YPwmuyxqH7xBA8j44fTPX+vOEP7ejJVBPts= codeberg.org/git-pages/go-slog-syslog v0.0.0-20251207093707-892f654e80b7 h1:+rkrAxhNZo/eKEcKOqVOsF6ohAPv5amz0JLburOeRjs= codeberg.org/git-pages/go-slog-syslog v0.0.0-20251207093707-892f654e80b7/go.mod h1:8NPSXbYcVb71qqNM5cIgn1/uQgMisLbu2dVD1BNxsUw= +github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= +github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/KimMachineGun/automemlimit v0.7.5 h1:RkbaC0MwhjL1ZuBKunGDjE/ggwAX43DwZrJqVwyveTk= github.com/KimMachineGun/automemlimit v0.7.5/go.mod h1:QZxpHaGOQoYvFhv/r4u3U0JTC2ZcOwbSr11UZF46UBM= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= @@ -94,8 +96,6 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pelletier/go-toml/v2 v2.3.0 h1:k59bC/lIZREW0/iVaQR8nDHxVq8OVlIzYCOJf421CaM= -github.com/pelletier/go-toml/v2 v2.3.0/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM= github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0= diff --git a/gomod2nix.toml b/gomod2nix.toml index 97a7d8a..861be76 100644 --- a/gomod2nix.toml +++ b/gomod2nix.toml @@ -7,6 +7,9 @@ schema = 3 [mod."codeberg.org/git-pages/go-slog-syslog"] version = "v0.0.0-20251207093707-892f654e80b7" hash = "sha256-ye+DBIyxqTEOViYRrQPWyGJCaLmyKSDwH5btlqDPizM=" + [mod."github.com/BurntSushi/toml"] + version = "v1.6.0" + hash = "sha256-ptdUJvuc21ixeLt+M5way/na3aCnCO4MYHWulWp8NEY=" [mod."github.com/KimMachineGun/automemlimit"] version = "v0.7.5" hash = "sha256-lH/ip9j2hbYUc2W/XIYve/5TScQPZtEZe3hu76CY//k=" @@ -115,9 +118,6 @@ schema = 3 [mod."github.com/pbnjay/memory"] version = "v0.0.0-20210728143218-7b4eea64cf58" hash = "sha256-QI+F1oPLOOtwNp8+m45OOoSfYFs3QVjGzE0rFdpF/IA=" - [mod."github.com/pelletier/go-toml/v2"] - version = "v2.3.0" - hash = "sha256-3ftKBqSwUp5rs10NigReAJ8RxfnP4Aol45EkP0XRaa4=" [mod."github.com/philhofer/fwd"] version = "v1.2.0" hash = "sha256-cGx2/0QQay46MYGZuamFmU0TzNaFyaO+J7Ddzlr/3dI=" diff --git a/renovate.json b/renovate.json index f06b5df..23aeee6 100644 --- a/renovate.json +++ b/renovate.json @@ -8,10 +8,6 @@ { "matchPackageNames": ["actions/buildah-simple"], "enabled": false - }, - { - "matchPackageNames": ["github.com/pelletier/go-toml/v2"], - "enabled": false // added AGENTS.md; v2.3.0 has been manually reviewed } ], "automerge": false, diff --git a/src/config.go b/src/config.go index 37b0c75..c88cd89 100644 --- a/src/config.go +++ b/src/config.go @@ -12,9 +12,9 @@ import ( "strings" "time" + "github.com/BurntSushi/toml" "github.com/c2h5oh/datasize" "github.com/creasty/defaults" - "github.com/pelletier/go-toml/v2" ) // For an unknown reason, the standard `time.Duration` type doesn't implement the standard @@ -309,23 +309,28 @@ func PrintConfigEnvVars() { }) } +func PrettyTomlKey(key toml.Key) string { + if len(key) == 1 { + return key.String() + } else { + // `toml.Key.String()` adds quotes if necessary. + return fmt.Sprintf("[%s].%s", key[:len(key)-1].String(), key[len(key)-1:].String()) + } +} + func ReadConfigFile(config *Config, tomlPath string) (err error) { if tomlPath != "" { - var file *os.File - file, err = os.Open(tomlPath) + meta, err := toml.DecodeFile(tomlPath, config) if err != nil { - return + return err } - defer func(file *os.File) { - err = file.Close() - }(file) - - decoder := toml.NewDecoder(file) - decoder.DisallowUnknownFields() - decoder.EnableUnmarshalerInterface() - if err = decoder.Decode(&config); err != nil { - return + unknownKeys := []string{} + for _, key := range meta.Undecoded() { + unknownKeys = append(unknownKeys, PrettyTomlKey(key)) + } + if len(unknownKeys) > 0 { + return fmt.Errorf("unknown keys: %s", strings.Join(unknownKeys, ", ")) } } return nil