This is an automated email from the ASF dual-hosted git repository. msciabarra pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/openserverless-cli.git
commit b9d076ab7d52199757d5eca13c5c7c5eee69797b Author: Michele Sciabarra <[email protected]> AuthorDate: Fri Aug 9 15:23:14 2024 +0200 formats --- cli.code-workspace | 2 +- go.mod | 4 ++++ go.sum | 11 +++++++++-- tools/base64.go | 11 +++++------ tools/base64.md | 14 ++++++++++++++ tools/datefmt.go | 30 ++++++++---------------------- tools/datefmt.md | 42 ++++++++++++++++++++++++++++++++++++++++++ tools/render.go | 41 +++++++++++++++++++++++++++++++++++++++++ tools/render_test.go | 14 ++++++++++++++ tools/tools.go | 3 +-- 10 files changed, 139 insertions(+), 33 deletions(-) diff --git a/cli.code-workspace b/cli.code-workspace index cd70ba5..68e91f6 100644 --- a/cli.code-workspace +++ b/cli.code-workspace @@ -12,6 +12,6 @@ "titleBar.activeForeground": "#28075d", "statusBar.background": "#28075d" }, - "go.goroot": "/nix/store/0jjqri305gwmzg8j1zjpkjbgllfv209s-go-1.22.5/share/go" + "go.goroot": "/nix/store/16g3awzjv3341s27hkkkv1vk5dw4206m-go-1.22.5/share/go" } } diff --git a/go.mod b/go.mod index 62b0d83..ed7fcd0 100644 --- a/go.mod +++ b/go.mod @@ -8,9 +8,11 @@ require ( github.com/cenkalti/backoff/v4 v4.3.0 github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 github.com/go-git/go-git/v5 v5.12.0 + github.com/gomarkdown/markdown v0.0.0-20240730141124-034f12af3bf6 github.com/google/uuid v1.6.0 github.com/h2non/filetype v1.1.3 github.com/itchyny/gojq v0.12.16 + github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 github.com/mitchellh/go-homedir v1.1.0 github.com/nicksnyder/go-i18n v1.10.1 github.com/nuvolaris/envsubst/cmd/envsubstmain v0.0.0-20230603163828-10ca029cdb58 @@ -76,6 +78,7 @@ require ( github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/nwidger/jsoncolor v0.0.0-20170215171346-75a6de4340e5 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/pelletier/go-toml v1.8.1 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -89,6 +92,7 @@ require ( github.com/skeema/knownhosts v1.2.2 // indirect github.com/spf13/cobra v1.1.3 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect github.com/tidwall/gjson v1.14.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect diff --git a/go.sum b/go.sum index d55390a..183df70 100644 --- a/go.sum +++ b/go.sum @@ -145,6 +145,8 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/gomarkdown/markdown v0.0.0-20240730141124-034f12af3bf6 h1:ZPy+2XJ8u0bB3sNFi+I72gMEMS7MTg7aZCCXPOjV8iw= +github.com/gomarkdown/markdown v0.0.0-20240730141124-034f12af3bf6/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -207,6 +209,8 @@ github.com/itchyny/gojq v0.12.16 h1:yLfgLxhIr/6sJNVmYfQjTIv0jGctu6/DgDoivmxTr7g= github.com/itchyny/gojq v0.12.16/go.mod h1:6abHbdC2uB9ogMS38XsErnfqJ94UlngIJGlRAIj4jTM= github.com/itchyny/timefmt-go v0.1.6 h1:ia3s54iciXDdzWzwaVKXZPbiXzxxnv1SPGFfM/myJ5Q= github.com/itchyny/timefmt-go v0.1.6/go.mod h1:RRDZYC5s9ErkjQvTvvU7keJjxUYzIISJGxm9/mAERQg= +github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 h1:iCHtR9CQyktQ5+f3dMVZfwD2KWJUgm7M0gdL9NGr8KA= +github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= @@ -246,6 +250,7 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-zglob v0.0.4 h1:LQi2iOm0/fGgu80AioIJ/1j9w9Oh+9DZ39J4VAGzHQM= @@ -289,6 +294,8 @@ github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.15.0 h1:1V1NfVQR87RtWAgp1lv9JZJ5Jap+XFGKPi00andXGi4= @@ -345,8 +352,6 @@ github.com/sciabarracom/openwhisk-wskdeploy v1.2.1 h1:t5hgca9OFEO39t4OqIxcWybYRj github.com/sciabarracom/openwhisk-wskdeploy v1.2.1/go.mod h1:bWjrIOIAzt8AcPqiJ0mWEecUxXbT4bY4ysMlJO6/q78= github.com/sciabarracom/sh/v3 v3.8.3 h1:5afHdZzNkW5vgUMP7gHUpBYHezn3BoQsyNgKXKdTpkM= github.com/sciabarracom/sh/v3 v3.8.3/go.mod h1:CeMVr3PRLhlUrS+VPLTp8dS5/6xNzmmX0h/WVHRR6DA= -github.com/sciabarracom/task/v3 v3.38.10 h1:KSu6B2CuHWail7rlTx5W72qM1klJbED3z2k7RzBvMkE= -github.com/sciabarracom/task/v3 v3.38.10/go.mod h1:EMjHs6YrTofApnomes/CNiGQ1odZUZF6PTqmYW9EBic= github.com/sciabarracom/task/v3 v3.38.11 h1:TZeaepSVc9Lx7TowAqIV3K9IZQh+jYgKNDpBNIg38uU= github.com/sciabarracom/task/v3 v3.38.11/go.mod h1:EMjHs6YrTofApnomes/CNiGQ1odZUZF6PTqmYW9EBic= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= @@ -374,6 +379,8 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo= +github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= diff --git a/tools/base64.go b/tools/base64.go index 47a414a..1e286c1 100644 --- a/tools/base64.go +++ b/tools/base64.go @@ -18,11 +18,15 @@ package tools import ( + _ "embed" "encoding/base64" "flag" "fmt" ) +//go:embed base64.md +var base64usage string + func base64Tool() error { var ( @@ -32,12 +36,7 @@ func base64Tool() error { ) flag.Usage = func() { - fmt.Println(`Usage: ops -base64 [options] <string> - -Options: - -h, --help Display this help message - -e, --encode <string> Encode a string to base64 - -d, --decode <string> Decode a base64 string`) + fmt.Println(MarkdownToText(base64usage)) } flag.BoolVar(&helpFlag, "h", false, "Display this help message") diff --git a/tools/base64.md b/tools/base64.md new file mode 100644 index 0000000..03506ec --- /dev/null +++ b/tools/base64.md @@ -0,0 +1,14 @@ +# Tool `-base64` + +```text +Usage: + ops -base64 [options] <string> +``` + +# Options + +``` + -h, --help Display this help message + -e, --encode <string> Encode a string to base64 + -d, --decode <string> Decode a base64 string +``` \ No newline at end of file diff --git a/tools/datefmt.go b/tools/datefmt.go index 432605e..cc62552 100644 --- a/tools/datefmt.go +++ b/tools/datefmt.go @@ -18,31 +18,17 @@ package tools import ( + _ "embed" "flag" "fmt" + "os" "time" - - "golang.org/x/exp/maps" ) -func printDateFmtUsage() { - fmts := maps.Keys(dateFormats) - - fmt.Printf(`Usage: -ops -datefmt [options] [arguments] - -Print date with different formats. If no time stamp or date strings are given, uses current time. - --h, --help print this help info --t, --timestamp unix timestamp to format (default: current time) --s, --str date string to format ---if input format to use with input date string (via --str) --f, --of output format to use (default: UnixDate) - -Possible formats: %v -`, fmts) -} +//go:embed datefmt.md +var datefmtUsage string +// if you change this add it to the datefmt.md var dateFormats = map[string]string{ "Layout": time.Layout, "ANSIC": time.ANSIC, @@ -77,8 +63,8 @@ var ( oFmtFlag string ) -func DateFmtTool() error { - flag.Usage = printDateFmtUsage +func DateFmtTool(args []string) error { + os.Args = args flag.BoolVar(&helpFlag, "h", false, "print this help info") flag.BoolVar(&helpFlag, "help", false, "print this help info") @@ -93,7 +79,7 @@ func DateFmtTool() error { flag.Parse() if helpFlag { - flag.Usage() + fmt.Println(MarkdownToText(datefmtUsage)) return nil } diff --git a/tools/datefmt.md b/tools/datefmt.md new file mode 100644 index 0000000..79d4158 --- /dev/null +++ b/tools/datefmt.md @@ -0,0 +1,42 @@ +# Tool: datefmt + +Print date with different formats. If no time stamp or date strings are given, uses current time + +```text +Usage: + ops -datefmt [options] [arguments] +``` + +# Options + +``` + -h, --help print this help info + -t, --timestamp unix timestamp to format (default: current time) + -s, --str date string to format + --if input format to use with input date string (via --str) + -f, --of output format to use (default: UnixDate) +``` + +Possible formats (they follows the standard naming of go time formats, with the addition of 'Millisecond' and 'ms'): + +- Layout +- ANSIC +- UnixDate +- RubyDate +- RFC822 +- RFC822Z +- RFC850 +- RFC1123 +- RFC1123Z +- RFC3339 +- RFC3339Nano +- Kitchen +- Stamp +- StampMilli +- StampMicro +- StampNano +- DateTime +- DateOnly +- TimeOnly +- Milliseconds +- ms diff --git a/tools/render.go b/tools/render.go new file mode 100644 index 0000000..479838c --- /dev/null +++ b/tools/render.go @@ -0,0 +1,41 @@ +package tools + +import ( + "regexp" + + "github.com/gomarkdown/markdown" + "github.com/gomarkdown/markdown/html" + "github.com/gomarkdown/markdown/parser" + "github.com/jaytaylor/html2text" +) + +func ExtractUsage(input string) string { + // Regular expression to match the block of text + re := regexp.MustCompile("(?s)```text\n(.*?Usage:.*?[^`]*)```") + + // Find the match + matches := re.FindStringSubmatch(input) + + // Return the match, or an empty string if no match is found + if len(matches) > 0 { + return matches[1] + } + return "Cannot find an Usage: block" +} + +func MarkdownToText(input string) string { + // create markdown parser with extensions + extensions := parser.CommonExtensions | parser.NoEmptyLineBeforeBlock + p := parser.NewWithExtensions(extensions) + doc := p.Parse([]byte(input)) + htmlFlags := html.CommonFlags | html.HrefTargetBlank + opts := html.RendererOptions{Flags: htmlFlags} + renderer := html.NewRenderer(opts) + markdown := markdown.Render(doc, renderer) + + text, err := html2text.FromString(string(markdown), html2text.Options{PrettyTables: true}) + if err != nil { + return err.Error() + } + return text +} diff --git a/tools/render_test.go b/tools/render_test.go new file mode 100644 index 0000000..994fbb9 --- /dev/null +++ b/tools/render_test.go @@ -0,0 +1,14 @@ +package tools + +import "fmt" + +func Example_markdown2text() { + fmt.Println(len(MarkdownToText(base64usage))) + // Output: 251 +} + +func Example_extractUsage() { + fmt.Println(len(ExtractUsage(base64usage))) + // Output: 40 + +} diff --git a/tools/tools.go b/tools/tools.go index 397cea8..4c8257a 100644 --- a/tools/tools.go +++ b/tools/tools.go @@ -101,8 +101,7 @@ func RunTool(name string, args []string) (int, error) { } case "datefmt": - os.Args = append([]string{"datefmt"}, args...) - if err := DateFmtTool(); err != nil { + if err := DateFmtTool(append([]string{"datefmt"}, args...)); err != nil { return 1, err }
