← back to Cli Printing Press
fix(cli): use slash paths for embedded templates (#794)
0020b78a30b6bf5daa478377c6c26e5f2442987f · 2026-05-09 09:59:04 -0700 · Trevin Chow
Files touched
M internal/generator/generator.goM internal/generator/plan_generate.goA internal/generator/template_path_test.go
Diff
commit 0020b78a30b6bf5daa478377c6c26e5f2442987f
Author: Trevin Chow <trevin@trevinchow.com>
Date: Sat May 9 09:59:04 2026 -0700
fix(cli): use slash paths for embedded templates (#794)
---
internal/generator/generator.go | 3 ++-
internal/generator/plan_generate.go | 3 ++-
internal/generator/template_path_test.go | 43 ++++++++++++++++++++++++++++++++
3 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/internal/generator/generator.go b/internal/generator/generator.go
index a6ae6f0b..3148fb25 100644
--- a/internal/generator/generator.go
+++ b/internal/generator/generator.go
@@ -7,6 +7,7 @@ import (
"fmt"
"net/url"
"os"
+ "path"
"path/filepath"
"slices"
"sort"
@@ -2703,7 +2704,7 @@ func (g *Generator) template(tmplName string) (*template.Template, error) {
return tmpl, nil
}
- content, err := templateFS.ReadFile(filepath.Join("templates", tmplName))
+ content, err := templateFS.ReadFile(path.Join("templates", tmplName))
if err != nil {
return nil, fmt.Errorf("reading template %s: %w", tmplName, err)
}
diff --git a/internal/generator/plan_generate.go b/internal/generator/plan_generate.go
index bb1dbb90..28e91ea6 100644
--- a/internal/generator/plan_generate.go
+++ b/internal/generator/plan_generate.go
@@ -5,6 +5,7 @@ import (
"fmt"
"os"
"os/exec"
+ "path"
"path/filepath"
"regexp"
"sort"
@@ -90,7 +91,7 @@ func GenerateFromPlan(planSpec *PlanSpec, outputDir string) error {
}
render := func(tmplName, outPath string, data any) error {
- content, err := templateFS.ReadFile(filepath.Join("templates", tmplName))
+ content, err := templateFS.ReadFile(path.Join("templates", tmplName))
if err != nil {
return fmt.Errorf("reading template %s: %w", tmplName, err)
}
diff --git a/internal/generator/template_path_test.go b/internal/generator/template_path_test.go
new file mode 100644
index 00000000..68c4817a
--- /dev/null
+++ b/internal/generator/template_path_test.go
@@ -0,0 +1,43 @@
+package generator
+
+import (
+ "go/ast"
+ "go/parser"
+ "go/token"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestEmbeddedTemplateReadsUseSlashPaths(t *testing.T) {
+ t.Parallel()
+
+ for _, filename := range []string{"generator.go", "plan_generate.go"} {
+ t.Run(filename, func(t *testing.T) {
+ t.Parallel()
+
+ fset := token.NewFileSet()
+ file, err := parser.ParseFile(fset, filename, nil, 0)
+ require.NoError(t, err)
+
+ ast.Inspect(file, func(node ast.Node) bool {
+ call, ok := node.(*ast.CallExpr)
+ if !ok {
+ return true
+ }
+
+ selector, ok := call.Fun.(*ast.SelectorExpr)
+ if !ok || selector.Sel.Name != "Join" {
+ return true
+ }
+ ident, ok := selector.X.(*ast.Ident)
+ if !ok || ident.Name != "filepath" || len(call.Args) == 0 {
+ return true
+ }
+ firstArg, ok := call.Args[0].(*ast.BasicLit)
+ require.Falsef(t, ok && firstArg.Value == `"templates"`, "%s uses filepath.Join for an embed.FS template path at %s", filename, fset.Position(call.Pos()))
+ return true
+ })
+ })
+ }
+}
← 5e04776b fix(skills): gate polish ship verdict on publish validate (#
·
back to Cli Printing Press
·
docs(cli): clarify catalog entry inclusion rules (#807) 079cf52b →