From 0584fd2f763016e74bea96c480c2ef947956d5af Mon Sep 17 00:00:00 2001 From: Mohd Quamar Tyagi <347892697+Tyagiquamar@users.noreply.github.com> Date: Sun, 18 Oct 2026 22:52:48 +0530 Subject: [PATCH 1/3] fix(compute/serve): persist default override_host for Viceroy (#1435) --- pkg/commands/compute/serve.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/pkg/commands/compute/serve.go b/pkg/commands/compute/serve.go index 26b4dc49a..ae9468092 100644 --- a/pkg/commands/compute/serve.go +++ b/pkg/commands/compute/serve.go @@ -174,8 +174,6 @@ func (c *ServeCommand) Exec(in io.Reader, out io.Writer) (err error) { text.Break(out) } - c.setBackendsWithDefaultOverrideHostIfMissing(out) - spinner, err := text.NewSpinner(out) if err != nil { return err @@ -204,6 +202,10 @@ func (c *ServeCommand) Exec(in io.Reader, out io.Writer) (err error) { } } + if err := c.setBackendsWithDefaultOverrideHostIfMissing(out, manifestPath); err != nil { + return err + } + bin, err := c.GetViceroy(spinner, out, manifestPath) if err != nil { return err @@ -338,7 +340,11 @@ func (c *ServeCommand) Build(in io.Reader, out io.Writer) error { // local_server.backends that is missing that property. The value will only be // set if the URL defined uses a hostname (e.g. http://127.0.0.1/ won't) so we // can set the override_host to match the hostname. -func (c *ServeCommand) setBackendsWithDefaultOverrideHostIfMissing(out io.Writer) { +// +// Viceroy reads backend configuration from the manifest file on disk, so any +// defaults applied here are written back to manifestPath before Viceroy starts. +func (c *ServeCommand) setBackendsWithDefaultOverrideHostIfMissing(out io.Writer, manifestPath string) error { + updated := false for k, backend := range c.Globals.Manifest.File.LocalServer.Backends { if backend.OverrideHost == "" { if u, err := url.Parse(backend.URL); err == nil { @@ -349,10 +355,15 @@ func (c *ServeCommand) setBackendsWithDefaultOverrideHostIfMissing(out io.Writer } backend.OverrideHost = u.Host c.Globals.Manifest.File.LocalServer.Backends[k] = backend + updated = true } } } } + if !updated { + return nil + } + return c.Globals.Manifest.File.Write(manifestPath) } // GetViceroy returns the path to the installed binary. From b2a17bbfadf77074796eabbae3b4815a41d84761 Mon Sep 17 00:00:00 2001 From: Mohd Quamar Tyagi Date: Mon, 19 Oct 2026 08:16:33 +0530 Subject: [PATCH 2/3] test(compute/serve): lock override_host manifest persistence for #1435 --- pkg/commands/compute/serve.go | 4 +- pkg/commands/compute/serve_internal_test.go | 52 +++++++++++++++++++++ 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/pkg/commands/compute/serve.go b/pkg/commands/compute/serve.go index ae9468092..c95a311a2 100644 --- a/pkg/commands/compute/serve.go +++ b/pkg/commands/compute/serve.go @@ -350,9 +350,7 @@ func (c *ServeCommand) setBackendsWithDefaultOverrideHostIfMissing(out io.Writer if u, err := url.Parse(backend.URL); err == nil { segs := strings.Split(u.Host, ":") // avoid parsing IP with port if ip := net.ParseIP(segs[0]); ip == nil { - if c.Globals.Verbose() { - text.Info(out, "[local_server.backends.%s] (%s) is configured without an `override_host`. We will use %s as a default to help avoid any unexpected errors. See https://www.fastly.com/documentation/reference/compute/fastly-toml#local-server for more details.", k, backend.URL, u.Host) - } + text.Info(out, "[local_server.backends.%s] (%s) is configured without an `override_host`. We will use %s as a default to help avoid any unexpected errors. See https://www.fastly.com/documentation/reference/compute/fastly-toml#local-server for more details.", k, backend.URL, u.Host) backend.OverrideHost = u.Host c.Globals.Manifest.File.LocalServer.Backends[k] = backend updated = true diff --git a/pkg/commands/compute/serve_internal_test.go b/pkg/commands/compute/serve_internal_test.go index e2007d64f..b18bade8d 100644 --- a/pkg/commands/compute/serve_internal_test.go +++ b/pkg/commands/compute/serve_internal_test.go @@ -1,9 +1,17 @@ package compute import ( + "bytes" + "os" + "path/filepath" + "strings" "testing" "github.com/fsnotify/fsnotify" + + "github.com/fastly/cli/pkg/argparser" + "github.com/fastly/cli/pkg/global" + "github.com/fastly/cli/pkg/manifest" ) // TestIsContentChange checks that content/existence events trigger a rebuild and @@ -30,3 +38,47 @@ func TestIsContentChange(t *testing.T) { }) } } + +func TestSetBackendsWithDefaultOverrideHostIfMissingWritesManifest(t *testing.T) { + dir := t.TempDir() + manifestPath := filepath.Join(dir, "fastly.toml") + const initial = `manifest_version = "3.0.0" +name = "test" + +[local_server.backends.http-me] +url = "https://http-me.glitch.me" +` + if err := os.WriteFile(manifestPath, []byte(initial), 0o600); err != nil { + t.Fatal(err) + } + + var file manifest.File + if err := file.Read(manifestPath); err != nil { + t.Fatal(err) + } + + c := &ServeCommand{ + Base: argparser.Base{ + Globals: &global.Data{ + Manifest: &manifest.Data{File: file}, + }, + }, + } + + var out bytes.Buffer + if err := c.setBackendsWithDefaultOverrideHostIfMissing(&out, manifestPath); err != nil { + t.Fatal(err) + } + + written, err := os.ReadFile(manifestPath) + if err != nil { + t.Fatal(err) + } + body := string(written) + if !strings.Contains(body, "override_host") || !strings.Contains(body, "http-me.glitch.me") { + t.Fatalf("expected override_host persisted in manifest, got:\n%s", body) + } + if !strings.Contains(out.String(), "http-me.glitch.me") { + t.Fatalf("expected override_host info message, got: %q", out.String()) + } +} From 3d6b1cf6379a6600dddb5fce1564891477a3ef52 Mon Sep 17 00:00:00 2001 From: Mohd Quamar Tyagi Date: Mon, 19 Oct 2026 08:28:32 +0530 Subject: [PATCH 3/3] chore: add CHANGELOG entry for #1940 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb1a6370f..40c29b3ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ### Bug Fixes: +- fix(compute/serve): persist default `override_host` to `fastly.toml` for Viceroy and log when applied ([#1940](https://github.com/fastly/cli/pull/1940)) + ### Enhancements: ### Dependencies: