chore(config): rename SMARTMUSIC_ env prefix to MINSTREL_; default admin user

The legacy SMARTMUSIC_ prefix dates from when the project was specced
as "smart-music" before being renamed to Minstrel. Hard cutover to
MINSTREL_* across config.go, tests, config.example.yaml, README, and
docker-compose. Also renames SMARTMUSIC_CONFIG in cmd/minstrel/main.go
which was missed in the original audit.

Also seeds Auth.AdminBootstrap.Username = "admin" in Default() so
MINSTREL_DATABASE_URL is the only env var required for a fresh prod
deployment — the bootstrap auto-generates a password and prints it
to stderr. Drops the now-redundant MINSTREL_AUTH_ADMIN_USERNAME=admin
line from the README quickstart and docker-compose.

M1 follow-up from the #363 final review: guards
MINSTREL_BRANDING_APP_NAME and _DESCRIPTION against empty-string
overrides — empty would have shipped <title></title> to share-preview
crawlers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-03 18:40:59 -04:00
parent 841b4cd8df
commit ca82862346
6 changed files with 52 additions and 48 deletions
+11 -11
View File
@@ -56,10 +56,10 @@ func TestLoadMissingFileReturnsDefaults(t *testing.T) {
}
func TestEnvOverrides(t *testing.T) {
t.Setenv("SMARTMUSIC_SERVER_ADDRESS", ":8080")
t.Setenv("SMARTMUSIC_DATABASE_URL", "postgres://env")
t.Setenv("SMARTMUSIC_LOG_LEVEL", "WARN")
t.Setenv("SMARTMUSIC_LOG_FORMAT", "JSON")
t.Setenv("MINSTREL_SERVER_ADDRESS", ":8080")
t.Setenv("MINSTREL_DATABASE_URL", "postgres://env")
t.Setenv("MINSTREL_LOG_LEVEL", "WARN")
t.Setenv("MINSTREL_LOG_FORMAT", "JSON")
cfg, err := Load("")
if err != nil {
@@ -80,8 +80,8 @@ func TestEnvOverrides(t *testing.T) {
}
func TestAdminBootstrapEnvOverrides(t *testing.T) {
t.Setenv("SMARTMUSIC_AUTH_ADMIN_USERNAME", "root")
t.Setenv("SMARTMUSIC_AUTH_ADMIN_PASSWORD", "sekret")
t.Setenv("MINSTREL_AUTH_ADMIN_USERNAME", "root")
t.Setenv("MINSTREL_AUTH_ADMIN_PASSWORD", "sekret")
cfg, err := Load("")
if err != nil {
@@ -96,8 +96,8 @@ func TestAdminBootstrapEnvOverrides(t *testing.T) {
}
func TestLibraryEnvOverrides(t *testing.T) {
t.Setenv("SMARTMUSIC_LIBRARY_SCAN_PATHS", "/music:/other::/third")
t.Setenv("SMARTMUSIC_LIBRARY_SCAN_ON_STARTUP", "true")
t.Setenv("MINSTREL_LIBRARY_SCAN_PATHS", "/music:/other::/third")
t.Setenv("MINSTREL_LIBRARY_SCAN_ON_STARTUP", "true")
cfg, err := Load("")
if err != nil {
@@ -118,7 +118,7 @@ func TestLibraryEnvOverrides(t *testing.T) {
}
func TestSubsonicEnvOverride(t *testing.T) {
t.Setenv("SMARTMUSIC_SUBSONIC_ALLOW_PLAINTEXT_PASSWORD", "true")
t.Setenv("MINSTREL_SUBSONIC_ALLOW_PLAINTEXT_PASSWORD", "true")
cfg, err := Load("")
if err != nil {
t.Fatalf("Load: %v", err)
@@ -185,8 +185,8 @@ func TestBrandingYAMLOverride(t *testing.T) {
}
func TestBrandingEnvOverride(t *testing.T) {
t.Setenv("SMARTMUSIC_BRANDING_APP_NAME", "Office Music")
t.Setenv("SMARTMUSIC_BRANDING_DESCRIPTION", "Office tunes.")
t.Setenv("MINSTREL_BRANDING_APP_NAME", "Office Music")
t.Setenv("MINSTREL_BRANDING_DESCRIPTION", "Office tunes.")
cfg, err := Load("")
if err != nil {
t.Fatalf("Load: %v", err)