diff --git a/docs/cli/cli.md b/docs/cli/cli.md new file mode 100644 index 000000000..6574cc96d --- /dev/null +++ b/docs/cli/cli.md @@ -0,0 +1,74 @@ +# CLI Applications + +GoFr provides a simple way to build command-line applications using `app.NewCMD()`. This creates standalone CLI tools without starting an HTTP server. + +## Getting Started + +Create a basic CLI application with subcommands: + +```go +package main + +import ( + "fmt" + "gofr.dev/pkg/gofr" +) + +func main() { + app := gofr.NewCMD() + + // Simple hello command + app.SubCommand("hello", func(c *gofr.Context) (any, error) { + return "Hello World!", nil + }, gofr.AddDescription("Print hello message")) + + // Command with parameters + app.SubCommand("greet", func(c *gofr.Context) (any, error) { + name := c.Param("name") + if name == "" { + name = "World" + } + return fmt.Sprintf("Hello, %s!", name), nil + }) + + app.Run() +} +``` + +## Key GoFr CLI Methods + +- **`app.NewCMD()`**: Initialize a CLI application +- **`app.SubCommand(name, handler, options...)`**: Add a subcommand +- **`gofr.AddDescription(desc)`**: Add help description +- **`gofr.AddHelp(help)`**: Add detailed help text +- **`ctx.Param(name)`**: Get command parameters +- **`ctx.Out.Println()`**: Print to stdout +- **`ctx.Logger`**: Access logging + +## Running CLI Applications + +Build and run your CLI: + +```bash +go build -o mycli +./mycli hello +./mycli greet --name John +./mycli --help +``` + +## Example Commands + +```bash +# Basic command +./mycli hello +# Output: Hello World! + +# Command with parameter +./mycli greet --name Alice +# Output: Hello, Alice! + +# Help +./mycli --help +``` + +For more details, see the [sample-cmd example](../../examples/sample-cmd). diff --git a/docs/navigation.js b/docs/navigation.js index b0fcd196e..520e39bc0 100644 --- a/docs/navigation.js +++ b/docs/navigation.js @@ -7,6 +7,13 @@ export const navigation = [ title: 'Hello Server', href: '/docs/quick-start/introduction' , desc: "Getting started with how to write a server using GoFR with basic examples and explanations. Boost your productivity with efficient coding practices and learn to build scalable applications quickly."}, + + { + title: 'CLI Applications', + href: '/docs/cli/cli', + desc: "Learn to build powerful command-line interface (CLI) applications using GoFr's app.NewCMD(), offering a robust framework for command-line tools." + }, + { title: 'Configuration', href: '/docs/quick-start/configuration', diff --git a/go.work.sum b/go.work.sum index da01c42da..a1ada2122 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1157,7 +1157,6 @@ github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8W github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/testcontainers/testcontainers-go v0.28.0 h1:1HLm9qm+J5VikzFDYhOd+Zw12NtOl+8drH2E8nTY1r8= github.com/testcontainers/testcontainers-go v0.28.0/go.mod h1:COlDpUXbwW3owtpMkEB1zo9gwb1CoKVKlyrVPejF4AU= github.com/testcontainers/testcontainers-go v0.33.0 h1:zJS9PfXYT5O0ZFXM2xxXfk4J5UMw/kRiISng037Gxdw= @@ -1398,7 +1397,6 @@ golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457 h1:zf5N6UOrA487eEFacMe golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= golang.org/x/telemetry v0.0.0-20250710130107-8d8967aff50b h1:DU+gwOBXU+6bO0sEyO7o/NeMlxZxCZEvI7v+J4a1zRQ= golang.org/x/telemetry v0.0.0-20250710130107-8d8967aff50b/go.mod h1:4ZwOYna0/zsOKwuR5X/m0QFOJpSZvAxFfkQT+Erd9D4= -golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488 h1:3doPGa+Gg4snce233aCWnbZVFsyFMo/dR40KK/6skyE= golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw= golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/pkg/gofr/version/version.go b/pkg/gofr/version/version.go index 4060342d1..6df39812c 100644 --- a/pkg/gofr/version/version.go +++ b/pkg/gofr/version/version.go @@ -1,3 +1,3 @@ package version -const Framework = "dev" +const Framework = "v1.44.1"