Skip to content

Commit e36b3c3

Browse files
committed
migrate listener fields into listen config
1 parent a5e7ef7 commit e36b3c3

File tree

2 files changed

+143
-7
lines changed

2 files changed

+143
-7
lines changed

cmd/internal/migrations/v3/common.go

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,17 +364,98 @@ func MigrateTrustedProxyConfig(cmd *cobra.Command, cwd string, _, _ *semver.Vers
364364
// in Fiber v3. It renames Prefork and Network fields and adapts them to the new
365365
// listener configuration fields.
366366
func MigrateConfigListenerFields(cmd *cobra.Command, cwd string, _, _ *semver.Version) error {
367+
var disableStartup string
368+
var enablePrint string
369+
367370
err := internal.ChangeFileContent(cwd, func(content string) string {
368371
replacer := strings.NewReplacer(
369372
"Prefork:", "EnablePrefork:",
370373
"Network:", "ListenerNetwork:",
371374
)
372-
return replacer.Replace(content)
375+
content = replacer.Replace(content)
376+
377+
reStartup := regexp.MustCompile(`(?m)^\s*DisableStartupMessage:\s*([^,]+),?\n`)
378+
content = reStartup.ReplaceAllStringFunc(content, func(s string) string {
379+
if disableStartup == "" {
380+
sub := reStartup.FindStringSubmatch(s)
381+
if len(sub) > 1 {
382+
disableStartup = strings.TrimSpace(sub[1])
383+
}
384+
}
385+
return ""
386+
})
387+
388+
rePrint := regexp.MustCompile(`(?m)^\s*EnablePrintRoutes:\s*([^,]+),?\n`)
389+
content = rePrint.ReplaceAllStringFunc(content, func(s string) string {
390+
if enablePrint == "" {
391+
sub := rePrint.FindStringSubmatch(s)
392+
if len(sub) > 1 {
393+
enablePrint = strings.TrimSpace(sub[1])
394+
}
395+
}
396+
return ""
397+
})
398+
399+
return content
373400
})
374401
if err != nil {
375402
return fmt.Errorf("failed to migrate listener related config fields: %w", err)
376403
}
377404

405+
err = internal.ChangeFileContent(cwd, func(content string) string {
406+
if disableStartup == "" && enablePrint == "" {
407+
return content
408+
}
409+
410+
reWithCfg := regexp.MustCompile(`\.Listen\(([^,]+),\s*fiber.ListenConfig\{([^}]*)\}\)`)
411+
content = reWithCfg.ReplaceAllStringFunc(content, func(s string) string {
412+
sub := reWithCfg.FindStringSubmatch(s)
413+
addr := sub[1]
414+
cfg := strings.TrimSpace(sub[2])
415+
416+
if disableStartup != "" && !strings.Contains(cfg, "DisableStartupMessage:") {
417+
if len(cfg) > 0 && !strings.HasSuffix(cfg, ",") {
418+
cfg += ","
419+
}
420+
cfg += " DisableStartupMessage: " + disableStartup + ","
421+
}
422+
if enablePrint != "" && !strings.Contains(cfg, "EnablePrintRoutes:") {
423+
if len(cfg) > 0 && !strings.HasSuffix(cfg, ",") {
424+
cfg += ","
425+
}
426+
cfg += " EnablePrintRoutes: " + enablePrint + ","
427+
}
428+
429+
cfg = strings.TrimSuffix(cfg, ",")
430+
return fmt.Sprintf(".Listen(%s, fiber.ListenConfig{%s})", addr, cfg)
431+
})
432+
433+
rePlain := regexp.MustCompile(`\.Listen\(([^,\n)]+)\)`)
434+
content = rePlain.ReplaceAllStringFunc(content, func(s string) string {
435+
if strings.Contains(s, "fiber.ListenConfig") {
436+
return s
437+
}
438+
439+
addr := rePlain.FindStringSubmatch(s)[1]
440+
fields := ""
441+
if disableStartup != "" {
442+
fields += "DisableStartupMessage: " + disableStartup + ", "
443+
}
444+
if enablePrint != "" {
445+
fields += "EnablePrintRoutes: " + enablePrint + ", "
446+
}
447+
fields = strings.TrimSpace(fields)
448+
fields = strings.TrimSuffix(fields, ",")
449+
450+
return fmt.Sprintf(".Listen(%s, fiber.ListenConfig{%s})", addr, fields)
451+
})
452+
453+
return content
454+
})
455+
if err != nil {
456+
return fmt.Errorf("failed to migrate listener related listen calls: %w", err)
457+
}
458+
378459
cmd.Println("Migrating listener related config fields")
379460
return nil
380461
}

cmd/internal/migrations/v3/common_test.go

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -479,23 +479,78 @@ func Test_MigrateConfigListenerFields(t *testing.T) {
479479
require.NoError(t, err)
480480
defer func() { require.NoError(t, os.RemoveAll(dir)) }()
481481

482-
file := writeTempFile(t, dir, `package main
482+
file1 := filepath.Join(dir, "app.go")
483+
require.NoError(t, os.WriteFile(file1, []byte(`package main
483484
import "github.com/gofiber/fiber/v2"
484-
func main() {
485-
app := fiber.New(fiber.Config{
485+
func newApp() *fiber.App {
486+
return fiber.New(fiber.Config{
486487
Prefork: true,
487488
Network: "tcp",
489+
DisableStartupMessage: true,
490+
EnablePrintRoutes: true,
488491
})
489-
_ = app
490-
}`)
492+
}`), 0o600))
493+
494+
file2 := filepath.Join(dir, "main.go")
495+
require.NoError(t, os.WriteFile(file2, []byte(`package main
496+
func main() {
497+
app := newApp()
498+
app.Listen(":3000")
499+
}`), 0o600))
491500

492501
var buf bytes.Buffer
493502
cmd := newCmd(&buf)
494503
require.NoError(t, v3.MigrateConfigListenerFields(cmd, dir, nil, nil))
495504

496-
content := readFile(t, file)
505+
content := readFile(t, file1)
497506
assert.Contains(t, content, "EnablePrefork: true")
498507
assert.Contains(t, content, "ListenerNetwork: \"tcp\"")
508+
assert.NotContains(t, content, "DisableStartupMessage")
509+
assert.NotContains(t, content, "EnablePrintRoutes")
510+
content2 := readFile(t, file2)
511+
assert.Contains(t, content2, "fiber.ListenConfig{")
512+
assert.Contains(t, content2, "DisableStartupMessage: true")
513+
assert.Contains(t, content2, "EnablePrintRoutes: true")
514+
assert.Contains(t, buf.String(), "Migrating listener related config fields")
515+
}
516+
517+
func Test_MigrateConfigListenerFields_ExistingListenConfig(t *testing.T) {
518+
t.Parallel()
519+
520+
dir, err := os.MkdirTemp("", "mconf2")
521+
require.NoError(t, err)
522+
defer func() { require.NoError(t, os.RemoveAll(dir)) }()
523+
524+
file1 := filepath.Join(dir, "app.go")
525+
require.NoError(t, os.WriteFile(file1, []byte(`package main
526+
import "github.com/gofiber/fiber/v2"
527+
func newApp() *fiber.App {
528+
return fiber.New(fiber.Config{
529+
DisableStartupMessage: true,
530+
EnablePrintRoutes: true,
531+
})
532+
}`), 0o600))
533+
534+
file2 := filepath.Join(dir, "main.go")
535+
require.NoError(t, os.WriteFile(file2, []byte(`package main
536+
import "github.com/gofiber/fiber/v2"
537+
func main() {
538+
app := newApp()
539+
app.Listen(":3000", fiber.ListenConfig{EnablePrefork: true})
540+
}`), 0o600))
541+
542+
var buf bytes.Buffer
543+
cmd := newCmd(&buf)
544+
require.NoError(t, v3.MigrateConfigListenerFields(cmd, dir, nil, nil))
545+
546+
content1 := readFile(t, file1)
547+
assert.NotContains(t, content1, "DisableStartupMessage")
548+
assert.NotContains(t, content1, "EnablePrintRoutes")
549+
550+
content2 := readFile(t, file2)
551+
assert.Contains(t, content2, "EnablePrefork: true")
552+
assert.Contains(t, content2, "DisableStartupMessage: true")
553+
assert.Contains(t, content2, "EnablePrintRoutes: true")
499554
assert.Contains(t, buf.String(), "Migrating listener related config fields")
500555
}
501556

0 commit comments

Comments
 (0)