mirror of
https://github.com/kovetskiy/mark.git
synced 2026-05-03 13:52:33 +00:00
Migrate to urfave/cli/v3
This commit is contained in:
65
util/cli.go
65
util/cli.go
@@ -2,6 +2,7 @@ package util
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/sha1"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
@@ -25,15 +26,15 @@ import (
|
||||
"github.com/kovetskiy/mark/vfs"
|
||||
"github.com/reconquest/karma-go"
|
||||
"github.com/reconquest/pkg/log"
|
||||
"github.com/urfave/cli/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
)
|
||||
|
||||
func RunMark(cCtx *cli.Context) error {
|
||||
if err := SetLogLevel(cCtx); err != nil {
|
||||
func RunMark(ctx context.Context, cmd *cli.Command) error {
|
||||
if err := SetLogLevel(cmd); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if cCtx.String("color") == "never" {
|
||||
if cmd.String("color") == "never" {
|
||||
log.GetLogger().SetFormat(
|
||||
lorg.NewFormat(
|
||||
`${time:2006-01-02 15:04:05.000} ${level:%s:left:true} ${prefix}%s`,
|
||||
@@ -42,20 +43,20 @@ func RunMark(cCtx *cli.Context) error {
|
||||
log.GetLogger().SetOutput(os.Stderr)
|
||||
}
|
||||
|
||||
creds, err := GetCredentials(cCtx.String("username"), cCtx.String("password"), cCtx.String("target-url"), cCtx.String("base-url"), cCtx.Bool("compile-only"))
|
||||
creds, err := GetCredentials(cmd.String("username"), cmd.String("password"), cmd.String("target-url"), cmd.String("base-url"), cmd.Bool("compile-only"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
api := confluence.NewAPI(creds.BaseURL, creds.Username, creds.Password)
|
||||
|
||||
files, err := doublestar.FilepathGlob(cCtx.String("files"))
|
||||
files, err := doublestar.FilepathGlob(cmd.String("files"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(files) == 0 {
|
||||
msg := "No files matched"
|
||||
if cCtx.Bool("ci") {
|
||||
if cmd.Bool("ci") {
|
||||
log.Warning(msg)
|
||||
} else {
|
||||
log.Fatal(msg)
|
||||
@@ -63,16 +64,16 @@ func RunMark(cCtx *cli.Context) error {
|
||||
}
|
||||
|
||||
log.Debug("config:")
|
||||
for _, f := range cCtx.Command.Flags {
|
||||
for _, f := range cmd.Flags {
|
||||
flag := f.Names()
|
||||
if flag[0] == "password" {
|
||||
log.Debugf(nil, "%20s: %v", flag[0], "******")
|
||||
} else {
|
||||
log.Debugf(nil, "%20s: %v", flag[0], cCtx.Value(flag[0]))
|
||||
log.Debugf(nil, "%20s: %v", flag[0], cmd.Value(flag[0]))
|
||||
}
|
||||
}
|
||||
|
||||
fatalErrorHandler := NewErrorHandler(cCtx.Bool("continue-on-error"))
|
||||
fatalErrorHandler := NewErrorHandler(cmd.Bool("continue-on-error"))
|
||||
|
||||
// Loop through files matched by glob pattern
|
||||
for _, file := range files {
|
||||
@@ -82,7 +83,7 @@ func RunMark(cCtx *cli.Context) error {
|
||||
file,
|
||||
)
|
||||
|
||||
target := processFile(file, api, cCtx, creds.PageID, creds.Username, fatalErrorHandler)
|
||||
target := processFile(file, api, cmd, creds.PageID, creds.Username, fatalErrorHandler)
|
||||
|
||||
if target != nil { // on dry-run or compile-only, the target is nil
|
||||
log.Infof(
|
||||
@@ -99,7 +100,7 @@ func RunMark(cCtx *cli.Context) error {
|
||||
func processFile(
|
||||
file string,
|
||||
api *confluence.API,
|
||||
cCtx *cli.Context,
|
||||
cmd *cli.Command,
|
||||
pageID string,
|
||||
username string,
|
||||
fatalErrorHandler *FatalErrorHandler,
|
||||
@@ -112,9 +113,9 @@ func processFile(
|
||||
|
||||
markdown = bytes.ReplaceAll(markdown, []byte("\r\n"), []byte("\n"))
|
||||
|
||||
parents := strings.Split(cCtx.String("parents"), cCtx.String("parents-delimiter"))
|
||||
parents := strings.Split(cmd.String("parents"), cmd.String("parents-delimiter"))
|
||||
|
||||
meta, markdown, err := metadata.ExtractMeta(markdown, cCtx.String("space"), cCtx.Bool("title-from-h1"), parents, cCtx.Bool("title-append-generated-hash"))
|
||||
meta, markdown, err := metadata.ExtractMeta(markdown, cmd.String("space"), cmd.Bool("title-from-h1"), parents, cmd.Bool("title-append-generated-hash"))
|
||||
if err != nil {
|
||||
fatalErrorHandler.Handle(err, "unable to extract metadata from file %q", file)
|
||||
return nil
|
||||
@@ -159,7 +160,7 @@ func processFile(
|
||||
for {
|
||||
templates, markdown, recurse, err = includes.ProcessIncludes(
|
||||
filepath.Dir(file),
|
||||
cCtx.String("include-path"),
|
||||
cmd.String("include-path"),
|
||||
markdown,
|
||||
templates,
|
||||
)
|
||||
@@ -175,7 +176,7 @@ func processFile(
|
||||
|
||||
macros, markdown, err := macro.ExtractMacros(
|
||||
filepath.Dir(file),
|
||||
cCtx.String("include-path"),
|
||||
cmd.String("include-path"),
|
||||
markdown,
|
||||
templates,
|
||||
)
|
||||
@@ -194,7 +195,7 @@ func processFile(
|
||||
}
|
||||
}
|
||||
|
||||
links, err := page.ResolveRelativeLinks(api, meta, markdown, filepath.Dir(file), cCtx.String("space"), cCtx.Bool("title-from-h1"), parents, cCtx.Bool("title-append-generated-hash"))
|
||||
links, err := page.ResolveRelativeLinks(api, meta, markdown, filepath.Dir(file), cmd.String("space"), cmd.Bool("title-from-h1"), parents, cmd.Bool("title-append-generated-hash"))
|
||||
if err != nil {
|
||||
fatalErrorHandler.Handle(err, "unable to resolve relative links")
|
||||
return nil
|
||||
@@ -202,21 +203,21 @@ func processFile(
|
||||
|
||||
markdown = page.SubstituteLinks(markdown, links)
|
||||
|
||||
if cCtx.Bool("dry-run") {
|
||||
_, _, err := page.ResolvePage(cCtx.Bool("dry-run"), api, meta)
|
||||
if cmd.Bool("dry-run") {
|
||||
_, _, err := page.ResolvePage(cmd.Bool("dry-run"), api, meta)
|
||||
if err != nil {
|
||||
fatalErrorHandler.Handle(err, "unable to resolve page location")
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
if cCtx.Bool("compile-only") || cCtx.Bool("dry-run") {
|
||||
if cCtx.Bool("drop-h1") {
|
||||
if cmd.Bool("compile-only") || cmd.Bool("dry-run") {
|
||||
if cmd.Bool("drop-h1") {
|
||||
log.Info(
|
||||
"the leading H1 heading will be excluded from the Confluence output",
|
||||
)
|
||||
}
|
||||
html, _ := mark.CompileMarkdown(markdown, stdlib, file, cCtx.String("mermaid-provider"), cCtx.Float64("mermaid-scale"), cCtx.Bool("drop-h1"), cCtx.Bool("strip-linebreaks"))
|
||||
html, _ := mark.CompileMarkdown(markdown, stdlib, file, cmd.String("mermaid-provider"), cmd.Float("mermaid-scale"), cmd.Bool("drop-h1"), cmd.Bool("strip-linebreaks"))
|
||||
fmt.Println(html)
|
||||
return nil
|
||||
}
|
||||
@@ -224,7 +225,7 @@ func processFile(
|
||||
var target *confluence.PageInfo
|
||||
|
||||
if meta != nil {
|
||||
parent, page, err := page.ResolvePage(cCtx.Bool("dry-run"), api, meta)
|
||||
parent, page, err := page.ResolvePage(cmd.Bool("dry-run"), api, meta)
|
||||
if err != nil {
|
||||
fatalErrorHandler.Handle(karma.Describe("title", meta.Title).Reason(err), "unable to resolve %s", meta.Type)
|
||||
return nil
|
||||
@@ -283,13 +284,13 @@ func processFile(
|
||||
|
||||
markdown = attachment.CompileAttachmentLinks(markdown, attaches)
|
||||
|
||||
if cCtx.Bool("drop-h1") {
|
||||
if cmd.Bool("drop-h1") {
|
||||
log.Info(
|
||||
"the leading H1 heading will be excluded from the Confluence output",
|
||||
)
|
||||
}
|
||||
|
||||
html, inlineAttachments := mark.CompileMarkdown(markdown, stdlib, file, cCtx.String("mermaid-provider"), cCtx.Float64("mermaid-scale"), cCtx.Bool("drop-h1"), cCtx.Bool("strip-linebreaks"))
|
||||
html, inlineAttachments := mark.CompileMarkdown(markdown, stdlib, file, cmd.String("mermaid-provider"), cmd.Float("mermaid-scale"), cmd.Bool("drop-h1"), cmd.Bool("strip-linebreaks"))
|
||||
|
||||
// Resolve attachements detected from markdown
|
||||
_, err = attachment.ResolveAttachments(
|
||||
@@ -329,7 +330,7 @@ func processFile(
|
||||
var finalVersionMessage string
|
||||
var shouldUpdatePage = true
|
||||
|
||||
if cCtx.Bool("changes-only") {
|
||||
if cmd.Bool("changes-only") {
|
||||
contentHash := getSHA1Hash(html)
|
||||
|
||||
log.Debugf(
|
||||
@@ -360,13 +361,13 @@ func processFile(
|
||||
}
|
||||
}
|
||||
|
||||
finalVersionMessage = fmt.Sprintf("%s [v%s]", cCtx.String("version-message"), contentHash)
|
||||
finalVersionMessage = fmt.Sprintf("%s [v%s]", cmd.String("version-message"), contentHash)
|
||||
} else {
|
||||
finalVersionMessage = cCtx.String("version-message")
|
||||
finalVersionMessage = cmd.String("version-message")
|
||||
}
|
||||
|
||||
if shouldUpdatePage {
|
||||
err = api.UpdatePage(target, html, cCtx.Bool("minor-edit"), finalVersionMessage, meta.Labels, meta.ContentAppearance, meta.Emoji)
|
||||
err = api.UpdatePage(target, html, cmd.Bool("minor-edit"), finalVersionMessage, meta.Labels, meta.ContentAppearance, meta.Emoji)
|
||||
if err != nil {
|
||||
fatalErrorHandler.Handle(err, "unable to update page")
|
||||
return nil
|
||||
@@ -377,7 +378,7 @@ func processFile(
|
||||
return nil
|
||||
}
|
||||
|
||||
if cCtx.Bool("edit-lock") {
|
||||
if cmd.Bool("edit-lock") {
|
||||
log.Infof(
|
||||
nil,
|
||||
`edit locked on page %q by user %q to prevent manual edits`,
|
||||
@@ -467,8 +468,8 @@ func ConfigFilePath() string {
|
||||
return filepath.Join(fp, "mark")
|
||||
}
|
||||
|
||||
func SetLogLevel(cCtx *cli.Context) error {
|
||||
logLevel := cCtx.String("log-level")
|
||||
func SetLogLevel(cmd *cli.Command) error {
|
||||
logLevel := cmd.String("log-level")
|
||||
switch strings.ToUpper(logLevel) {
|
||||
case lorg.LevelTrace.String():
|
||||
log.SetLevel(lorg.LevelTrace)
|
||||
|
||||
171
util/flags.go
171
util/flags.go
@@ -1,178 +1,187 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"github.com/urfave/cli/v2"
|
||||
"github.com/urfave/cli/v2/altsrc"
|
||||
altsrc "github.com/urfave/cli-altsrc/v3"
|
||||
altsrctoml "github.com/urfave/cli-altsrc/v3/toml"
|
||||
"github.com/urfave/cli/v3"
|
||||
)
|
||||
|
||||
var filename = ConfigFilePath()
|
||||
|
||||
var configFile = altsrc.NewStringPtrSourcer(&filename)
|
||||
|
||||
var Flags = []cli.Flag{
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
&cli.StringFlag{
|
||||
Name: "files",
|
||||
Aliases: []string{"f"},
|
||||
Value: "",
|
||||
Usage: "use specified markdown file(s) for converting to html. Supports file globbing patterns (needs to be quoted).",
|
||||
TakesFile: true,
|
||||
EnvVars: []string{"MARK_FILES"},
|
||||
}),
|
||||
altsrc.NewBoolFlag(&cli.BoolFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_FILES"), altsrctoml.TOML("files", configFile)),
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "continue-on-error",
|
||||
Value: false,
|
||||
Usage: "don't exit if an error occurs while processing a file, continue processing remaining files.",
|
||||
EnvVars: []string{"MARK_CONTINUE_ON_ERROR"},
|
||||
}),
|
||||
altsrc.NewBoolFlag(&cli.BoolFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_CONTINUE_ON_ERROR"), altsrctoml.TOML("continue_on_error", configFile)),
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "compile-only",
|
||||
Value: false,
|
||||
Usage: "show resulting HTML and don't update Confluence page content.",
|
||||
EnvVars: []string{"MARK_COMPILE_ONLY"},
|
||||
}),
|
||||
altsrc.NewBoolFlag(&cli.BoolFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_COMPILE_ONLY"), altsrctoml.TOML("compile_only", configFile)),
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "dry-run",
|
||||
Value: false,
|
||||
Usage: "resolve page and ancestry, show resulting HTML and exit.",
|
||||
EnvVars: []string{"MARK_DRY_RUN"},
|
||||
}),
|
||||
altsrc.NewBoolFlag(&cli.BoolFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_DRY_RUN"), altsrctoml.TOML("dry_run", configFile)),
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "edit-lock",
|
||||
Value: false,
|
||||
Aliases: []string{"k"},
|
||||
Usage: "lock page editing to current user only to prevent accidental manual edits over Confluence Web UI.",
|
||||
EnvVars: []string{"MARK_EDIT_LOCK"},
|
||||
}),
|
||||
altsrc.NewBoolFlag(&cli.BoolFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_EDIT_LOCK"), altsrctoml.TOML("edit_lock", configFile)),
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "drop-h1",
|
||||
Value: false,
|
||||
Aliases: []string{"h1_drop"},
|
||||
Usage: "don't include the first H1 heading in Confluence output.",
|
||||
EnvVars: []string{"MARK_H1_DROP"},
|
||||
}),
|
||||
altsrc.NewBoolFlag(&cli.BoolFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_H1_DROP"), altsrctoml.TOML("drop_h1", configFile)),
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "strip-linebreaks",
|
||||
Value: false,
|
||||
Aliases: []string{"L"},
|
||||
Usage: "remove linebreaks inside of tags, to accomodate non-standard Confluence behavior",
|
||||
EnvVars: []string{"MARK_STRIP_LINEBREAKS"},
|
||||
}),
|
||||
altsrc.NewBoolFlag(&cli.BoolFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_STRIP_LINEBREAKS"), altsrctoml.TOML("strip_linebreaks", configFile)),
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "title-from-h1",
|
||||
Value: false,
|
||||
Aliases: []string{"h1_title"},
|
||||
Usage: "extract page title from a leading H1 heading. If no H1 heading on a page exists, then title must be set in the page metadata.",
|
||||
EnvVars: []string{"MARK_H1_TITLE"},
|
||||
}),
|
||||
altsrc.NewBoolFlag(&cli.BoolFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_H1_TITLE"), altsrctoml.TOML("title_from_h1", configFile)),
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "title-append-generated-hash",
|
||||
Value: false,
|
||||
Usage: "appends a short hash generated from the path of the page (space, parents, and title) to the title",
|
||||
EnvVars: []string{"MARK_TITLE_APPEND_GENERATED_HASH"},
|
||||
}),
|
||||
altsrc.NewBoolFlag(&cli.BoolFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_TITLE_APPEND_GENERATED_HASH"), altsrctoml.TOML("title_append_generated_hash", configFile)),
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "minor-edit",
|
||||
Value: false,
|
||||
Usage: "don't send notifications while updating Confluence page.",
|
||||
EnvVars: []string{"MARK_MINOR_EDIT"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_MINOR_EDIT"), altsrctoml.TOML("minor_edit", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "version-message",
|
||||
Value: "",
|
||||
Usage: "add a message to the page version, to explain the edit (default: \"\")",
|
||||
EnvVars: []string{"MARK_VERSION_MESSAGE"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Name: "color",
|
||||
Value: "auto",
|
||||
Usage: "display logs in color. Possible values: auto, never.",
|
||||
EnvVars: []string{"MARK_COLOR"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_VERSION_MESSAGE"), altsrctoml.TOML("version_message", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "color",
|
||||
Value: "auto",
|
||||
Usage: "display logs in color. Possible values: auto, never.",
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_COLOR"),
|
||||
altsrctoml.TOML("color", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "log-level",
|
||||
Value: "info",
|
||||
Usage: "set the log level. Possible values: TRACE, DEBUG, INFO, WARNING, ERROR, FATAL.",
|
||||
EnvVars: []string{"MARK_LOG_LEVEL"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_LOG_LEVEL"), altsrctoml.TOML("log_level", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "username",
|
||||
Aliases: []string{"u"},
|
||||
Value: "",
|
||||
Usage: "use specified username for updating Confluence page.",
|
||||
EnvVars: []string{"MARK_USERNAME"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_USERNAME"),
|
||||
altsrctoml.TOML("username", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "password",
|
||||
Aliases: []string{"p"},
|
||||
Value: "",
|
||||
Usage: "use specified token for updating Confluence page. Specify - as password to read password from stdin, or your Personal access token. Username is not mandatory if personal access token is provided. For more info please see: https://developer.atlassian.com/server/confluence/confluence-server-rest-api/#authentication.",
|
||||
EnvVars: []string{"MARK_PASSWORD"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_PASSWORD"), altsrctoml.TOML("password", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "target-url",
|
||||
Aliases: []string{"l"},
|
||||
Value: "",
|
||||
Usage: "edit specified Confluence page. If -l is not specified, file should contain metadata (see above).",
|
||||
EnvVars: []string{"MARK_TARGET_URL"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_TARGET_URL"), altsrctoml.TOML("target_url", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "base-url",
|
||||
Aliases: []string{"b", "base_url"},
|
||||
Value: "",
|
||||
Usage: "base URL for Confluence. Alternative option for base_url config field.",
|
||||
EnvVars: []string{"MARK_BASE_URL"},
|
||||
}),
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_BASE_URL"),
|
||||
altsrctoml.TOML("base_url", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "config",
|
||||
Aliases: []string{"c"},
|
||||
Value: ConfigFilePath(),
|
||||
Usage: "use the specified configuration file.",
|
||||
TakesFile: true,
|
||||
EnvVars: []string{"MARK_CONFIG"},
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_CONFIG")),
|
||||
Destination: &filename,
|
||||
},
|
||||
altsrc.NewBoolFlag(&cli.BoolFlag{
|
||||
&cli.BoolFlag{
|
||||
Name: "ci",
|
||||
Value: false,
|
||||
Usage: "run on CI mode. It won't fail if files are not found.",
|
||||
EnvVars: []string{"MARK_CI"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_CI"), altsrctoml.TOML("ci", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "space",
|
||||
Value: "",
|
||||
Usage: "use specified space key. If the space key is not specified, it must be set in the page metadata.",
|
||||
EnvVars: []string{"MARK_SPACE"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_SPACE"), altsrctoml.TOML("space", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "parents",
|
||||
Value: "",
|
||||
Usage: "A list containing the parents of the document separated by parents-delimiter (default: '/'). These will be prepended to the ones defined in the document itself.",
|
||||
EnvVars: []string{"MARK_PARENTS"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_PARENTS"), altsrctoml.TOML("parents", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "parents-delimiter",
|
||||
Value: "/",
|
||||
Usage: "The delimiter used for the parents list",
|
||||
EnvVars: []string{"MARK_PARENTS_DELIMITER"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_PARENTS_DELIMITER"), altsrctoml.TOML("parents_delimiter", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "mermaid-provider",
|
||||
Value: "cloudscript",
|
||||
Usage: "defines the mermaid provider to use. Supported options are: cloudscript, mermaid-go.",
|
||||
EnvVars: []string{"MARK_MERMAID_PROVIDER"},
|
||||
}),
|
||||
altsrc.NewFloat64Flag(&cli.Float64Flag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_MERMAID_PROVIDER"), altsrctoml.TOML("mermaid_provider", configFile)),
|
||||
},
|
||||
&cli.FloatFlag{
|
||||
Name: "mermaid-scale",
|
||||
Value: 1.0,
|
||||
Usage: "defines the scaling factor for mermaid renderings.",
|
||||
EnvVars: []string{"MARK_MERMAID_SCALE"},
|
||||
}),
|
||||
altsrc.NewStringFlag(&cli.StringFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_MERMAID_SCALE"), altsrctoml.TOML("mermaid_scale", configFile)),
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "include-path",
|
||||
Value: "",
|
||||
Usage: "Path for shared includes, used as a fallback if the include doesn't exist in the current directory.",
|
||||
TakesFile: true,
|
||||
EnvVars: []string{"MARK_INCLUDE_PATH"},
|
||||
}),
|
||||
altsrc.NewBoolFlag(&cli.BoolFlag{
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_INCLUDE_PATH"), altsrctoml.TOML("include_path", configFile)),
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "changes-only",
|
||||
Value: false,
|
||||
Usage: "Avoids re-uploading pages that haven't changed since the last run.",
|
||||
EnvVars: []string{"MARK_CHANGES_ONLY"},
|
||||
}),
|
||||
Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_CHANGES_ONLY"), altsrctoml.TOML("changes_only", configFile)),
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user