From 2ca693dc773f48f612dcbf1189f46ad32e4252f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Va=C5=A1ek?= Date: Thu, 3 Apr 2025 12:30:19 +0200 Subject: [PATCH 1/2] Fix: Go scaffolding uses correct module name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Using incorrect name works for a functions with flat structure -- no sub-packages. When sub-packages are used we need to refer the user module by its true name. Signed-off-by: Matej Vašek --- pkg/scaffolding/scaffold.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/pkg/scaffolding/scaffold.go b/pkg/scaffolding/scaffold.go index 3671252ea5..85c292ac2c 100644 --- a/pkg/scaffolding/scaffold.go +++ b/pkg/scaffolding/scaffold.go @@ -1,9 +1,11 @@ package scaffolding import ( + "bytes" "fmt" "os" "path/filepath" + "regexp" "knative.dev/func/pkg/filesystem" ) @@ -55,6 +57,33 @@ func Write(out, src, runtime, invoke string, fs filesystem.Filesystem) (err erro return ScaffoldingError{"filesystem copy failed", err} } + // Not my proudest moment + if runtime == "go" { + var data []byte + data, err = os.ReadFile(filepath.Join(src, "go.mod")) + if err != nil { + return fmt.Errorf("cannot read go.mod: %w", err) + } + r := regexp.MustCompile(`module\s+(\w+)`) + matches := r.FindSubmatch(data) + if len(matches) != 2 { + return fmt.Errorf("cannot parse go.mod") + } + moduleName := string(matches[1]) + for _, n := range []string{"go.mod", "main.go"} { + p := filepath.Join(out, n) + data, err = os.ReadFile(p) + if err != nil { + return fmt.Errorf("cannot read scaffolding file: %w", err) + } + data = bytes.ReplaceAll(data, []byte("function"), []byte(moduleName)) + err = os.WriteFile(p, data, 0644) + if err != nil { + return fmt.Errorf("cannot patch scaffolding code: %w", err) + } + } + } + // Copy the certs from the filesystem to the build directory if _, err := fs.Stat("certs"); err != nil { return ScaffoldingError{"certs directory not found in filesystem", err} From 9cc0493772b3484c3641733f78300e8c2663f5ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Va=C5=A1ek?= Date: Thu, 3 Apr 2025 12:56:43 +0200 Subject: [PATCH 2/2] fixup tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Vašek --- pkg/scaffolding/scaffold_test.go | 5 +++++ .../testdata/testwrite/go/scaffolding/instanced-http/go.mod | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 pkg/scaffolding/testdata/testwrite/go/scaffolding/instanced-http/go.mod diff --git a/pkg/scaffolding/scaffold_test.go b/pkg/scaffolding/scaffold_test.go index b3d49440f8..380c7597b3 100644 --- a/pkg/scaffolding/scaffold_test.go +++ b/pkg/scaffolding/scaffold_test.go @@ -82,6 +82,11 @@ func New() *F { return nil } t.Fatal(err) } + err = os.WriteFile(filepath.Join(root, "go.mod"), []byte("module foo"), 0644) + if err != nil { + t.Fatal(err) + } + // The output destination for the scaffolding out := filepath.Join(root, "out") diff --git a/pkg/scaffolding/testdata/testwrite/go/scaffolding/instanced-http/go.mod b/pkg/scaffolding/testdata/testwrite/go/scaffolding/instanced-http/go.mod new file mode 100644 index 0000000000..7100524e2f --- /dev/null +++ b/pkg/scaffolding/testdata/testwrite/go/scaffolding/instanced-http/go.mod @@ -0,0 +1,3 @@ +module s + +go 1.22