package main import ( "context" "errors" "git.golem15.com/golem15/summercms/internal/docsite" "git.golem15.com/golem15/summercms/modules/bonfire" ) func docsBuildCommand() bonfire.Command { return bonfire.Command{ Name: "docs:build", Description: "Build the documentation site", Flags: []bonfire.Flag{ {Name: "root", Description: "Repository root; src= paths and modules/ resolve against it", Default: "."}, {Name: "src", Description: "Docs source directory (default /docs)"}, {Name: "out", Description: "Output directory (default /site)"}, {Name: "base-url", Description: "Base URL for site links (overrides site.yaml base_url)"}, {Name: "check", Description: "Validate the docs and write nothing", Bare: true}, }, Run: func(ctx context.Context, in bonfire.Input, out bonfire.Output) error { opts := docsOptions(in) if flagTrue(in, "check") { problems, err := docsite.Check(opts) if err != nil { return err } if len(problems) > 0 { return reportDocsProblems(out, "docs:build", problems) } out.Printf("docs:build: no problems found\n") return nil } result, problems, err := docsite.Build(opts) if err != nil { return err } if len(problems) > 0 { return reportDocsProblems(out, "docs:build", problems) } out.Printf("docs:build: wrote %d pages to %s\n", result.Pages, result.Out) return nil }, } } func docsOptions(in bonfire.Input) docsite.Options { var opts docsite.Options opts.Root, _ = in.Flag("root") opts.Src, _ = in.Flag("src") opts.Out, _ = in.Flag("out") opts.BaseURL, _ = in.Flag("base-url") return opts } // reportDocsProblems prints one line per problem and a summary, and returns // a short error so the binary exits 1. func reportDocsProblems(out bonfire.Output, cmd string, problems []docsite.Problem) error { for _, p := range problems { out.Printf("%s\n", p) } out.Printf("%s: %d problems, nothing written\n", cmd, len(problems)) return errors.New(cmd + " failed") }