Skip to content

Commit

Permalink
commands: Add "hugo build" as an alias for "hugo"
Browse files Browse the repository at this point in the history
Closes #11391
  • Loading branch information
bep committed Sep 30, 2024
1 parent 1158e63 commit 0450d69
Show file tree
Hide file tree
Showing 6 changed files with 142 additions and 4 deletions.
16 changes: 13 additions & 3 deletions commands/commandeer.go
Original file line number Diff line number Diff line change
Expand Up @@ -499,16 +499,26 @@ func (r *rootCommand) IsTestRun() bool {
}

func (r *rootCommand) Init(cd *simplecobra.Commandeer) error {
return r.initRootCommand("", cd)
}

func (r *rootCommand) initRootCommand(subCommandName string, cd *simplecobra.Commandeer) error {
cmd := cd.CobraCommand
cmd.Use = "hugo [flags]"
cmd.Short = "hugo builds your site"
cmd.Long = `hugo is the main command, used to build your Hugo site.
commandName := "hugo"
if subCommandName != "" {
commandName = subCommandName
}
cmd.Use = fmt.Sprintf("%s [flags]", commandName)
cmd.Short = fmt.Sprintf("%s builds your site", commandName)
cmd.Long = `COMMAND_NAME is the main command, used to build your Hugo site.
Hugo is a Fast and Flexible Static Site Generator
built with love by spf13 and friends in Go.
Complete documentation is available at https://gohugo.io/.`

cmd.Long = strings.ReplaceAll(cmd.Long, "COMMAND_NAME", commandName)

// Configure persistent flags
cmd.PersistentFlags().StringVarP(&r.source, "source", "s", "", "filesystem path to read files relative from")
_ = cmd.MarkFlagDirname("source")
Expand Down
33 changes: 33 additions & 0 deletions commands/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@
package commands

import (
"context"

"github.com/bep/simplecobra"
)

// newExec wires up all of Hugo's CLI.
func newExec() (*simplecobra.Exec, error) {
rootCmd := &rootCommand{
commands: []simplecobra.Commander{
newHugoBuildCmd(),
newVersionCmd(),
newEnvCommand(),
newServerCommand(),
Expand All @@ -38,3 +41,33 @@ func newExec() (*simplecobra.Exec, error) {

return simplecobra.New(rootCmd)
}

func newHugoBuildCmd() simplecobra.Commander {
return &hugoBuildCommand{}
}

// hugoBuildCommand just delegates to the rootCommand.
type hugoBuildCommand struct {
rootCmd *rootCommand
}

func (c *hugoBuildCommand) Commands() []simplecobra.Commander {
return nil
}

func (c *hugoBuildCommand) Name() string {
return "build"
}

func (c *hugoBuildCommand) Init(cd *simplecobra.Commandeer) error {
c.rootCmd = cd.Root.Command.(*rootCommand)
return c.rootCmd.initRootCommand("build", cd)
}

func (c *hugoBuildCommand) PreRun(cd, runner *simplecobra.Commandeer) error {
return c.rootCmd.PreRun(cd, runner)
}

func (c *hugoBuildCommand) Run(ctx context.Context, cd *simplecobra.Commandeer, args []string) error {
return c.rootCmd.Run(ctx, cd, args)
}
1 change: 1 addition & 0 deletions docs/content/en/commands/hugo.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ hugo [flags]

### SEE ALSO

* [hugo build](/commands/hugo_build/) - build builds your site
* [hugo completion](/commands/hugo_completion/) - Generate the autocompletion script for the specified shell
* [hugo config](/commands/hugo_config/) - Print the site configuration
* [hugo convert](/commands/hugo_convert/) - Convert your content to different formats
Expand Down
74 changes: 74 additions & 0 deletions docs/content/en/commands/hugo_build.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
---
title: "hugo build"
slug: hugo_build
url: /commands/hugo_build/
---
## hugo build

build builds your site

### Synopsis

build is the main command, used to build your Hugo site.

Hugo is a Fast and Flexible Static Site Generator
built with love by spf13 and friends in Go.

Complete documentation is available at https://gohugo.io/.

```
hugo build [flags]
```

### Options

```
-b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/
-D, --buildDrafts include content marked as draft
-E, --buildExpired include expired content
-F, --buildFuture include content with publishdate in the future
--cacheDir string filesystem path to cache directory
--cleanDestinationDir remove files from destination not found in static directories
--clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00
--config string config file (default is hugo.yaml|json|toml)
--configDir string config dir (default "config")
-c, --contentDir string filesystem path to content directory
--debug debug output
-d, --destination string filesystem path to write files to
--disableKinds strings disable different kind of pages (home, RSS etc.)
--enableGitInfo add Git revision, date, author, and CODEOWNERS info to the pages
-e, --environment string build environment
--forceSyncStatic copy all files when static is changed.
--gc enable to run some cleanup tasks (remove unused cache files) after the build
-h, --help help for build
--ignoreCache ignores the cache directory
--ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern
-l, --layoutDir string filesystem path to layout directory
--logLevel string log level (debug|info|warn|error)
--minify minify any supported output format (HTML, XML etc.)
--noBuildLock don't create .hugo_build.lock file
--noChmod don't sync permission mode of files
--noTimes don't sync modification time of files
--panicOnWarning panic on first WARNING log
--poll string set this to a poll interval, e.g --poll 700ms, to use a poll based approach to watch for file system changes
--printI18nWarnings print missing translations
--printMemoryUsage print memory usage to screen at intervals
--printPathWarnings print warnings on duplicate target paths etc.
--printUnusedTemplates print warnings on unused templates.
--quiet build in quiet mode
--renderSegments strings named segments to render (configured in the segments config)
-M, --renderToMemory render to memory (mostly useful when running the server)
-s, --source string filesystem path to read files relative from
--templateMetrics display metrics about template executions
--templateMetricsHints calculate some improvement hints when combined with --templateMetrics
-t, --theme strings themes to use (located in /themes/THEMENAME/)
--themesDir string filesystem path to themes directory
--trace file write trace to file (not useful in general)
-v, --verbose verbose output
-w, --watch watch filesystem for changes and recreate as needed
```

### SEE ALSO

* [hugo](/commands/hugo/) - hugo builds your site

2 changes: 1 addition & 1 deletion testscripts/commands/gen.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Test the gen commands.
# Note that adding new commands will require updating the NUM_COMMANDS value.
env NUM_COMMANDS=43
env NUM_COMMANDS=44

hugo gen -h
stdout 'A collection of several useful generators\.'
Expand Down
20 changes: 20 additions & 0 deletions testscripts/commands/hugo_build.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Test the hugo build command (alias for hugo)

hugo build
stdout 'Pages.*|1'
stdout 'Total in'
checkfile public/index.html
checkfile public/p1/index.html
grep 'IsServer: false;IsProduction: true' public/index.html

-- hugo.toml --
baseURL = "http://example.org/"
disableKinds = ["RSS", "sitemap", "robotsTXT", "404", "taxonomy", "term"]
-- layouts/index.html --
Home|IsServer: {{ hugo.IsServer }};IsProduction: {{ hugo.IsProduction }}|
-- layouts/_default/single.html --
Title: {{ .Title }}
-- content/p1.md --
---
title: "P1"
---

0 comments on commit 0450d69

Please sign in to comment.