This is an automated email from the ASF dual-hosted git repository. sjanc pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git
commit 6e2ab62974690b170e17c603699948ab29fd2ed4 Author: Szymon Janc <[email protected]> AuthorDate: Mon Oct 19 17:55:44 2026 +0200 newt/docs: Report doxygen and sphinx-build failures "newt docs build" ignored errors from doxygen and sphinx-build and always exited with status 0. Return the errors and report them. Assisted-by: Claude:claude-opus-5-5 --- newt/cli/docs_cmds.go | 9 +++++++-- newt/docs/docsbuilder.go | 23 ++++++++++++++--------- newt/error_reporting_test.go | 31 +++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/newt/cli/docs_cmds.go b/newt/cli/docs_cmds.go index 9950a53a..24a626b2 100644 --- a/newt/cli/docs_cmds.go +++ b/newt/cli/docs_cmds.go @@ -28,8 +28,13 @@ import ( func docsBuildRunCmd(cmd *cobra.Command, args []string) { wd, _ := os.Getwd() - db, _ := docs.NewDocsBuilder() - db.Build(wd + "/_build") + db, err := docs.NewDocsBuilder() + if err != nil { + NewtUsage(nil, err) + } + if err := db.Build(wd + "/_build"); err != nil { + NewtUsage(nil, err) + } } func AddDocsCommands(cmd *cobra.Command) { diff --git a/newt/docs/docsbuilder.go b/newt/docs/docsbuilder.go index b869e63e..12e923d0 100644 --- a/newt/docs/docsbuilder.go +++ b/newt/docs/docsbuilder.go @@ -72,17 +72,19 @@ func (db *DocsBuilder) generateDoxygen(doc *DocDescriptor, tmpdir string) error util.StatusMessage(util.VERBOSITY_DEFAULT, "Preparing docs, running doxygen in %s\n", doc.path) - util.CallInDir(doc.path, func() error { + err := util.CallInDir(doc.path, func() error { // Run doxygen doxygenGenerate := []string{ "doxygen", "doxygen.xml", } - util.ShellCommand(doxygenGenerate, nil) - - return nil + _, err := util.ShellCommand(doxygenGenerate, nil) + return err }) + if err != nil { + return err + } util.MoveDir(doc.path+"/_gen/_xml", tmpdir+"/"+doc.name+"-xml") os.RemoveAll(doc.path + "/_gen") @@ -105,7 +107,10 @@ func (db *DocsBuilder) Build(outdir string) error { } if util.NodeExist(doc.path + "/doxygen.xml") { - db.generateDoxygen(doc, tmpdir) + if err := db.generateDoxygen(doc, tmpdir); err != nil { + os.RemoveAll(tmpdir) + return err + } } tmpPath := tmpdir + "/" @@ -124,7 +129,7 @@ func (db *DocsBuilder) Build(outdir string) error { util.StatusMessage(util.VERBOSITY_DEFAULT, "Generating documentation in %s placing results in %s\n", tmpdir, outdir) - util.CallInDir(tmpdir, func() error { + err := util.CallInDir(tmpdir, func() error { // Time to run the build! sphinxBuild := []string{ "sphinx-build", @@ -133,13 +138,13 @@ func (db *DocsBuilder) Build(outdir string) error { outdir, } - util.ShellCommand(sphinxBuild, nil) - return nil + _, err := util.ShellCommand(sphinxBuild, nil) + return err }) util.StatusMessage(util.VERBOSITY_DEFAULT, "Cleaning up result of generated documentation\n") os.RemoveAll(tmpdir) - return nil + return err } diff --git a/newt/error_reporting_test.go b/newt/error_reporting_test.go index e479931d..8dfddd87 100644 --- a/newt/error_reporting_test.go +++ b/newt/error_reporting_test.go @@ -22,6 +22,7 @@ package main import ( "os" "path/filepath" + "runtime" "strings" "testing" ) @@ -239,3 +240,33 @@ func TestErrorReportingNestedRepository(t *testing.T) { t.Errorf("missing warning\n%s", out) } } + +// Failure of sphinx-build must make "newt docs build" fail. +func TestErrorReportingDocsBuild(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("fake sphinx-build is a shell script") + } + + dir := copyToTemp(t, errorReportingProjDir) + binDir := t.TempDir() + errorReportingWriteFiles(t, dir, map[string]string{ + "docs/index.rst": "Test\n", + }) + errorReportingWriteFiles(t, binDir, map[string]string{ + "sphinx-build": "#!/bin/sh\necho sphinx failed >&2\nexit 1\n", + }) + if err := os.Chmod(filepath.Join(binDir, "sphinx-build"), + 0755); err != nil { + + t.Fatal(err) + } + + cmd := newtExecCmd(dir, []string{"PATH=" + binDir}, "docs", "build") + out, err := cmd.CombinedOutput() + if err == nil { + t.Errorf("newt docs build succeeded\n%s", out) + } + if !strings.Contains(string(out), "sphinx failed") { + t.Errorf("missing sphinx-build error\n%s", out) + } +}
