diff options
author | Robert van Gent <rvangent@google.com> | 2018-12-20 11:22:03 -0800 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-05-03 17:58:40 +0200 |
commit | c7165589b3be5923f1275f0024818e6ae889d881 (patch) | |
tree | 333590256ddbeaecbe310c980f133782831eb13e /commands | |
parent | ad5703a91712cd245231ba8fdbc49632c794a165 (diff) |
Add a "deploy" command
Diffstat (limited to 'commands')
-rw-r--r-- | commands/commands.go | 1 | ||||
-rw-r--r-- | commands/deploy.go | 74 | ||||
-rw-r--r-- | commands/hugo.go | 10 |
3 files changed, 84 insertions, 1 deletions
diff --git a/commands/commands.go b/commands/commands.go index fa02b2e81..51bfb4763 100644 --- a/commands/commands.go +++ b/commands/commands.go @@ -47,6 +47,7 @@ func (b *commandsBuilder) addAll() *commandsBuilder { newEnvCmd(), newConfigCmd(), newCheckCmd(), + newDeployCmd(), newConvertCmd(), b.newNewCmd(), newListCmd(), diff --git a/commands/deploy.go b/commands/deploy.go new file mode 100644 index 000000000..14e7e1627 --- /dev/null +++ b/commands/deploy.go @@ -0,0 +1,74 @@ +// Copyright 2019 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package commands + +import ( + "context" + + "github.com/gohugoio/hugo/deploy" + "github.com/spf13/cobra" +) + +var _ cmder = (*deployCmd)(nil) + +// deployCmd supports deploying sites to Cloud providers. +type deployCmd struct { + hugoBuilderCommon + *baseCmd +} + +// TODO: In addition to the "deploy" command, consider adding a "--deploy" +// flag for the default command; this would build the site and then deploy it. +// It's not obvious how to do this; would all of the deploy-specific flags +// have to exist at the top level as well? + +// TODO: The output files change every time "hugo" is executed, it looks +// like because of map order randomization. This means that you can +// run "hugo && hugo deploy" again and again and upload new stuff every time. Is +// this intended? + +func newDeployCmd() *deployCmd { + cc := &deployCmd{} + + cc.baseCmd = newBaseCmd(&cobra.Command{ + Use: "deploy", + Short: "Deploy your site to a Cloud provider.", + // TODO: improve Long docstring. + // TODO: update real documentation. Is it in ../docs/ or in hugoDocs? + Long: `Deploy your site to a Cloud provider.`, + + RunE: func(cmd *cobra.Command, args []string) error { + cfgInit := func(c *commandeer) error { + return nil + } + comm, err := initializeConfig(true, false, &cc.hugoBuilderCommon, cc, cfgInit) + if err != nil { + return err + } + deployer, err := deploy.New(comm.Cfg, comm.hugo.PathSpec.PublishFs) + if err != nil { + return err + } + return deployer.Deploy(context.Background()) + }, + }) + + cc.cmd.Flags().String("target", "default", "target deployment from deployments section in config file") + cc.cmd.Flags().Bool("confirm", false, "ask for confirmation before making changes to the target") + cc.cmd.Flags().Bool("dryRun", false, "dry run") + cc.cmd.Flags().Bool("force", false, "force upload of all files") + cc.cmd.Flags().Int("maxDeletes", 256, "maximum # of files to delete, or -1 to disable") + + return cc +} diff --git a/commands/hugo.go b/commands/hugo.go index 0a6b9750c..c6819b054 100644 --- a/commands/hugo.go +++ b/commands/hugo.go @@ -204,17 +204,22 @@ func initializeFlags(cmd *cobra.Command, cfg config.Provider) { "buildWatch", "cacheDir", "cfgFile", + "confirm", "contentDir", "debug", "destination", "disableKinds", + "dryRun", + "force", "gc", + "i18n-warnings", "layoutDir", "logFile", - "i18n-warnings", + "maxDeletes", "quiet", "renderToMemory", "source", + "target", "theme", "themesDir", "verbose", @@ -263,6 +268,9 @@ func setValueFromFlag(flags *flag.FlagSet, key string, cfg config.Provider, targ case "stringSlice": bv, _ := flags.GetStringSlice(key) cfg.Set(configKey, bv) + case "int": + iv, _ := flags.GetInt(key) + cfg.Set(configKey, iv) default: panic(fmt.Sprintf("update switch with %s", f.Value.Type())) } |