Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/lint.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func lintCommandAction(cmd *cobra.Command, args []string) error {
if err != nil {
for _, f := range readmeFiles {
if !f.UpToDate {
cmd.Printf("%s is outdated. Rebuild the package with 'elastic-package build'\n", f.FileName)
cmd.Printf("%s is outdated. Rebuild the package with 'elastic-package build'\n%s", f.FileName, f.Diff)
}
if f.Error != nil {
cmd.Printf("check if %s is up-to-date failed: %s\n", f.FileName, f.Error)
Expand Down
34 changes: 24 additions & 10 deletions internal/docs/readme.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"text/template"

"github.com/pkg/errors"
"github.com/pmezard/go-difflib/difflib"

"github.com/elastic/elastic-package/internal/builder"
"github.com/elastic/elastic-package/internal/logger"
Expand All @@ -22,6 +23,7 @@ import (
type ReadmeFile struct {
FileName string
UpToDate bool
Diff string
Error error
}

Expand All @@ -40,42 +42,54 @@ func AreReadmesUpToDate() ([]ReadmeFile, error) {
var readmeFiles []ReadmeFile
for _, filePath := range files {
fileName := filepath.Base(filePath)
ok, err := isReadmeUpToDate(fileName, packageRoot)
ok, diff, err := isReadmeUpToDate(fileName, packageRoot)
if !ok || err != nil {
readmeFile := ReadmeFile{
FileName: fileName,
UpToDate: ok,
Diff: diff,
Error: err,
}
readmeFiles = append(readmeFiles, readmeFile)
}
}

if readmeFiles != nil {
return readmeFiles, fmt.Errorf("checking readme files are up-to-date failed")
return readmeFiles, fmt.Errorf("files do not match")
}
return readmeFiles, nil
}

func isReadmeUpToDate(fileName, packageRoot string) (bool, error) {
func isReadmeUpToDate(fileName, packageRoot string) (bool, string, error) {
logger.Debugf("Check if %s is up-to-date", fileName)

rendered, shouldBeRendered, err := generateReadme(fileName, packageRoot)
if err != nil {
return false, errors.Wrap(err, "generating readme file failed")
return false, "", errors.Wrap(err, "generating readme file failed")
}
if !shouldBeRendered {
return true, nil // README file is static and doesn't use template.
return true, "", nil // README file is static and doesn't use template.
}

existing, found, err := readReadme(fileName, packageRoot)
if err != nil {
return false, errors.Wrap(err, "reading README file failed")
return false, "", errors.Wrap(err, "reading README file failed")
}
if !found {
return false, nil
return false, "", nil
}
return bytes.Equal(existing, rendered), nil
if bytes.Equal(existing, rendered) {
return true, "", nil
}
var buf bytes.Buffer
err = difflib.WriteUnifiedDiff(&buf, difflib.UnifiedDiff{
A: difflib.SplitLines(string(existing)),
B: difflib.SplitLines(string(rendered)),
FromFile: "want",
ToFile: "got",
Context: 1,
})
return false, buf.String(), err
}

// UpdateReadmes function updates all .md readme files using a defined template
Expand Down Expand Up @@ -219,15 +233,15 @@ func writeReadme(fileName, packageRoot string, content []byte) (string, error) {

docsPath := docsPath(packageRoot)
logger.Debugf("Create directories: %s", docsPath)
err := os.MkdirAll(docsPath, 0755)
err := os.MkdirAll(docsPath, 0o755)
if err != nil {
return "", errors.Wrapf(err, "mkdir failed (path: %s)", docsPath)
}

aReadmePath := readmePath(fileName, packageRoot)
logger.Debugf("Write %s file to: %s", fileName, aReadmePath)

err = os.WriteFile(aReadmePath, content, 0644)
err = os.WriteFile(aReadmePath, content, 0o644)
if err != nil {
return "", errors.Wrapf(err, "writing file failed (path: %s)", aReadmePath)
}
Expand Down