mirror of
https://github.com/navidrome/navidrome.git
synced 2026-06-02 07:01:36 +00:00
* feat(conf): add Dir type with lazy directory creation Introduces the Dir type that wraps a directory path string and defers os.MkdirAll until the first call to Path() or MustPath(), using sync.Once to ensure the creation happens exactly once. Implements fmt.Stringer, encoding.TextMarshaler, and encoding.TextUnmarshaler for config integration. Includes Ginkgo/Gomega tests covering all methods and error paths. * refactor(conf): replace eager dir creation with lazy Dir type Change DataFolder, CacheFolder, Plugins.Folder, and Backup.Path from string to Dir. Remove all os.MkdirAll calls from Load() so directories are created lazily on first Path()/MustPath() call. Artwork folder creation was already handled at point-of-use in image_upload.go. Add SnapshotConfig() to conf package for safe test config save/restore that avoids copying sync.Once inside Dir fields. Fix copy-lock vet warning in nativeapi/config.go by marshalling pointer instead of value. * refactor(conf): migrate tests and db init to lazy Dir type Update all test files to use conf.NewDir() for Dir field assignments. Ensure DataFolder is created lazily when the database is first opened in db.Db(). Remove eager directory creation from conf.Load() tests. * fix(conf): address review findings for Dir type - Use os.ModePerm for DataFolder/CacheFolder (was 0700, should match original behavior). Add NewDirWithPerm for PluginsFolder (0700). - Use Path() instead of MustPath() in db.Prune() to avoid logFatal from background cron job. - Panic on marshal/unmarshal errors in SnapshotConfig (test helper). - Clean up redundant String()/MustPath() calls in plugin manager. - Remove dead code in dir_test.go. Signed-off-by: Deluan <deluan@navidrome.org> * fix(conf): add GoString to Dir for clean config dump output Implement fmt.GoStringer on Dir so pretty.Sprintf shows the path string instead of internal struct fields (sync.Once, perm, err). Also add TODO comment to configtest about removing the indirection. * fix(dir): improve error logging in MustPath method Signed-off-by: Deluan <deluan@navidrome.org> * refactor(tests): remove redundant tests for unwritable DataFolder and CacheFolder Signed-off-by: Deluan <deluan@navidrome.org> * fix(conf): address PR review feedback - Ensure Plugins.Folder always uses 0700, even when user-configured (previously only the derived default got restrictive permissions). - Create LogFile parent directory before opening, so LogFile paths inside a not-yet-created DataFolder work correctly. --------- Signed-off-by: Deluan <deluan@navidrome.org>
152 lines
6.2 KiB
Modula-2
152 lines
6.2 KiB
Modula-2
module github.com/navidrome/navidrome
|
|
|
|
go 1.26
|
|
|
|
// Fork to implement raw tags support
|
|
replace go.senan.xyz/taglib => github.com/deluan/go-taglib v0.0.0-20260511232939-ccd334abae3a
|
|
|
|
require (
|
|
github.com/Masterminds/squirrel v1.5.4
|
|
github.com/andybalholm/cascadia v1.3.3
|
|
github.com/bmatcuk/doublestar/v4 v4.10.0
|
|
github.com/deluan/rest v0.0.0-20211102003136-6260bc399cbf
|
|
github.com/deluan/sanitize v0.0.0-20241120162836-fdfd8fdfaa55
|
|
github.com/dexterlb/mpvipc v0.0.0-20241005113212-7cdefca0e933
|
|
github.com/djherbis/atime v1.1.0
|
|
github.com/djherbis/fscache v0.10.2-0.20231127215153-442a07e326c4
|
|
github.com/djherbis/stream v1.4.0
|
|
github.com/djherbis/times v1.6.0
|
|
github.com/dustin/go-humanize v1.0.1
|
|
github.com/extism/go-sdk v1.7.1
|
|
github.com/fatih/structs v1.1.0
|
|
github.com/gen2brain/webp v0.5.5
|
|
github.com/go-chi/chi/v5 v5.2.5
|
|
github.com/go-chi/cors v1.2.2
|
|
github.com/go-chi/httprate v0.15.0
|
|
github.com/go-chi/jwtauth/v5 v5.4.0
|
|
github.com/go-viper/encoding/ini v0.1.1
|
|
github.com/go-viper/mapstructure/v2 v2.5.0
|
|
github.com/gohugoio/hashstructure v0.6.0
|
|
github.com/google/go-pipeline v0.0.0-20230411140531-6cbedfc1d3fc
|
|
github.com/google/uuid v1.6.0
|
|
github.com/google/wire v0.7.0
|
|
github.com/gorilla/websocket v1.5.3
|
|
github.com/hashicorp/go-multierror v1.1.1
|
|
github.com/jellydator/ttlcache/v3 v3.4.0
|
|
github.com/kardianos/service v1.2.4
|
|
github.com/kr/pretty v0.3.1
|
|
github.com/lestrrat-go/jwx/v3 v3.1.1
|
|
github.com/mattn/go-sqlite3 v1.14.44
|
|
github.com/microcosm-cc/bluemonday v1.0.27
|
|
github.com/mileusna/useragent v1.3.5
|
|
github.com/onsi/ginkgo/v2 v2.28.3
|
|
github.com/onsi/gomega v1.40.0
|
|
github.com/pelletier/go-toml/v2 v2.3.1
|
|
github.com/pmezard/go-difflib v1.0.0
|
|
github.com/pocketbase/dbx v1.12.0
|
|
github.com/pressly/goose/v3 v3.27.1
|
|
github.com/prometheus/client_golang v1.23.2
|
|
github.com/rjeczalik/notify v0.9.3
|
|
github.com/robfig/cron/v3 v3.0.1
|
|
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06
|
|
github.com/santhosh-tekuri/jsonschema/v6 v6.0.2
|
|
github.com/sirupsen/logrus v1.9.4
|
|
github.com/spf13/cobra v1.10.2
|
|
github.com/spf13/viper v1.21.0
|
|
github.com/stretchr/testify v1.11.1
|
|
github.com/tetratelabs/wazero v1.11.1-0.20260428013916-2bbd517b7633
|
|
github.com/unrolled/secure v1.17.0
|
|
github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342
|
|
go.senan.xyz/taglib v0.11.1
|
|
go.uber.org/goleak v1.3.0
|
|
golang.org/x/image v0.40.0
|
|
golang.org/x/net v0.54.0
|
|
golang.org/x/sync v0.20.0
|
|
golang.org/x/sys v0.44.0
|
|
golang.org/x/term v0.43.0
|
|
golang.org/x/text v0.37.0
|
|
golang.org/x/time v0.15.0
|
|
gopkg.in/yaml.v3 v3.0.1
|
|
)
|
|
|
|
require (
|
|
dario.cat/mergo v1.0.2 // indirect
|
|
github.com/Masterminds/semver/v3 v3.5.0 // indirect
|
|
github.com/atombender/go-jsonschema v0.20.0 // indirect
|
|
github.com/aymerick/douceur v0.2.0 // indirect
|
|
github.com/beorn7/perks v1.0.1 // indirect
|
|
github.com/cespare/reflex v0.3.1 // indirect
|
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
|
github.com/creack/pty v1.1.24 // indirect
|
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
|
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect
|
|
github.com/dylibso/observe-sdk/go v0.0.0-20240828172851-9145d8ad07e1 // indirect
|
|
github.com/ebitengine/purego v0.10.0 // indirect
|
|
github.com/fsnotify/fsnotify v1.10.1 // indirect
|
|
github.com/go-logr/logr v1.4.3 // indirect
|
|
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
|
|
github.com/gobwas/glob v0.2.3 // indirect
|
|
github.com/goccy/go-json v0.10.6 // indirect
|
|
github.com/goccy/go-yaml v1.19.2 // indirect
|
|
github.com/google/go-cmp v0.7.0 // indirect
|
|
github.com/google/pprof v0.0.0-20260507013755-92041b743c96 // indirect
|
|
github.com/google/subcommands v1.2.0 // indirect
|
|
github.com/gorilla/css v1.0.1 // indirect
|
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
|
github.com/ianlancetaylor/demangle v0.0.0-20260505044615-1ff4bf46051f // indirect
|
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
|
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
|
|
github.com/kr/text v0.2.0 // indirect
|
|
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
|
|
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
|
|
github.com/lestrrat-go/blackmagic v1.0.4 // indirect
|
|
github.com/lestrrat-go/dsig v1.3.0 // indirect
|
|
github.com/lestrrat-go/dsig-secp256k1 v1.0.0 // indirect
|
|
github.com/lestrrat-go/httpcc v1.0.1 // indirect
|
|
github.com/lestrrat-go/httprc/v3 v3.0.5 // indirect
|
|
github.com/lestrrat-go/option/v2 v2.0.0 // indirect
|
|
github.com/maruel/natural v1.3.0 // indirect
|
|
github.com/mfridman/interpolate v0.0.2 // indirect
|
|
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
|
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
|
github.com/ogier/pflag v0.0.1 // indirect
|
|
github.com/pkg/errors v0.9.1 // indirect
|
|
github.com/prometheus/client_model v0.6.2 // indirect
|
|
github.com/prometheus/common v0.67.5 // indirect
|
|
github.com/prometheus/procfs v0.20.1 // indirect
|
|
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
|
github.com/sagikazarmark/locafero v0.12.0 // indirect
|
|
github.com/sanity-io/litter v1.5.8 // indirect
|
|
github.com/segmentio/asm v1.2.1 // indirect
|
|
github.com/sethvargo/go-retry v0.3.0 // indirect
|
|
github.com/sosodev/duration v1.3.1 // indirect
|
|
github.com/spf13/afero v1.15.0 // indirect
|
|
github.com/spf13/cast v1.10.0 // indirect
|
|
github.com/spf13/pflag v1.0.10 // indirect
|
|
github.com/stretchr/objx v0.5.3 // indirect
|
|
github.com/subosito/gotenv v1.6.0 // indirect
|
|
github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 // indirect
|
|
github.com/valyala/fastjson v1.6.10 // indirect
|
|
github.com/zeebo/xxh3 v1.1.0 // indirect
|
|
go.opentelemetry.io/proto/otlp v1.10.0 // indirect
|
|
go.uber.org/multierr v1.11.0 // indirect
|
|
go.yaml.in/yaml/v2 v2.4.3 // indirect
|
|
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
|
golang.org/x/crypto v0.51.0 // indirect
|
|
golang.org/x/mod v0.36.0 // indirect
|
|
golang.org/x/telemetry v0.0.0-20260508192327-42602be52be6 // indirect
|
|
golang.org/x/tools v0.45.0 // indirect
|
|
google.golang.org/protobuf v1.36.11 // indirect
|
|
gopkg.in/ini.v1 v1.67.2 // indirect
|
|
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
|
|
)
|
|
|
|
tool (
|
|
github.com/atombender/go-jsonschema
|
|
github.com/cespare/reflex
|
|
github.com/google/wire/cmd/wire
|
|
github.com/onsi/ginkgo/v2/ginkgo
|
|
golang.org/x/tools/cmd/goimports
|
|
)
|