diff --git a/internal/extgen/docs.go b/internal/extgen/docs.go index 428507ef13..434f3e78c7 100644 --- a/internal/extgen/docs.go +++ b/internal/extgen/docs.go @@ -3,6 +3,7 @@ package extgen import ( "bytes" _ "embed" + "os" "path/filepath" "text/template" ) @@ -22,6 +23,11 @@ type DocTemplateData struct { func (dg *DocumentationGenerator) generate() error { filename := filepath.Join(dg.generator.BuildDir, "README.md") + + if _, err := os.Stat(filename); err == nil { + return nil + } + content, err := dg.generateMarkdown() if err != nil { return err diff --git a/internal/extgen/docs_test.go b/internal/extgen/docs_test.go index 27b2b6af78..7d8272526a 100644 --- a/internal/extgen/docs_test.go +++ b/internal/extgen/docs_test.go @@ -383,3 +383,39 @@ func BenchmarkDocumentationGenerator_GenerateMarkdown(b *testing.B) { assert.NoError(b, err) } } + +func TestDocumentationGenerator_SkipExistingReadme(t *testing.T) { + tempDir := t.TempDir() + readmePath := filepath.Join(tempDir, "README.md") + + err := os.WriteFile(readmePath, []byte("hello"), 0644) + require.NoError(t, err) + + generator := &Generator{ + BaseName: "testextension", + BuildDir: tempDir, + Functions: []phpFunction{ + { + Name: "greet", + ReturnType: phpString, + Params: []phpParameter{ + {Name: "name", PhpType: phpString}, + }, + Signature: "greet(string $name): string", + }, + }, + Classes: []phpClass{}, + } + + docGen := &DocumentationGenerator{ + generator: generator, + } + + err = docGen.generate() + assert.NoError(t, err, "generate() unexpected error") + + content, err := os.ReadFile(readmePath) + require.NoError(t, err, "Failed to read generated README.md") + + assert.Equal(t, string(content), "hello") +}