From 3a4f3541ba3e8f3ae943acf01bfee4bdbf92c28a Mon Sep 17 00:00:00 2001 From: RW Date: Tue, 29 Jul 2025 16:48:44 +0200 Subject: [PATCH] fix migration for moved config fields --- cmd/internal/migrations/v3/common.go | 39 ++++++++++++++++++++--- cmd/internal/migrations/v3/common_test.go | 7 ++-- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/cmd/internal/migrations/v3/common.go b/cmd/internal/migrations/v3/common.go index eaa716a..e0a5794 100644 --- a/cmd/internal/migrations/v3/common.go +++ b/cmd/internal/migrations/v3/common.go @@ -365,11 +365,40 @@ func MigrateTrustedProxyConfig(cmd *cobra.Command, cwd string, _, _ *semver.Vers // listener configuration fields. func MigrateConfigListenerFields(cmd *cobra.Command, cwd string, _, _ *semver.Version) error { err := internal.ChangeFileContent(cwd, func(content string) string { - replacer := strings.NewReplacer( - "Prefork:", "EnablePrefork:", - "Network:", "ListenerNetwork:", - ) - return replacer.Replace(content) + // collect fields that were moved from Config to ListenConfig + moved := []string{} + reMoved := regexp.MustCompile(`(?m)^\s*(Prefork|Network|DisableStartupMessage|EnablePrintRoutes):\s*([^,]+),?\n`) + content = reMoved.ReplaceAllStringFunc(content, func(m string) string { + sub := reMoved.FindStringSubmatch(m) + if len(sub) == 3 { + name := sub[1] + val := strings.TrimSpace(sub[2]) + switch name { + case "Prefork": + name = "EnablePrefork" + case "Network": + name = "ListenerNetwork" + } + moved = append(moved, fmt.Sprintf("%s: %s", name, val)) + } + return "" + }) + + if len(moved) == 0 { + return content + } + + // inject ListenConfig with the moved fields if Listen is used without config + reListen := regexp.MustCompile(`\.Listen\(([^,\n]+)\)`) + content = reListen.ReplaceAllStringFunc(content, func(m string) string { + if strings.Contains(m, "ListenConfig{") { + return m + } + addr := reListen.FindStringSubmatch(m)[1] + return fmt.Sprintf(".Listen(%s, fiber.ListenConfig{%s})", addr, strings.Join(moved, ", ")) + }) + + return content }) if err != nil { return fmt.Errorf("failed to migrate listener related config fields: %w", err) diff --git a/cmd/internal/migrations/v3/common_test.go b/cmd/internal/migrations/v3/common_test.go index 88d7ce6..bce71d8 100644 --- a/cmd/internal/migrations/v3/common_test.go +++ b/cmd/internal/migrations/v3/common_test.go @@ -485,8 +485,10 @@ func main() { app := fiber.New(fiber.Config{ Prefork: true, Network: "tcp", + DisableStartupMessage: true, + EnablePrintRoutes: true, }) - _ = app + app.Listen(":3000") }`) var buf bytes.Buffer @@ -494,8 +496,7 @@ func main() { require.NoError(t, v3.MigrateConfigListenerFields(cmd, dir, nil, nil)) content := readFile(t, file) - assert.Contains(t, content, "EnablePrefork: true") - assert.Contains(t, content, "ListenerNetwork: \"tcp\"") + assert.Contains(t, content, "fiber.ListenConfig{EnablePrefork: true, ListenerNetwork: \"tcp\", DisableStartupMessage: true, EnablePrintRoutes: true}") assert.Contains(t, buf.String(), "Migrating listener related config fields") }