MVP
This commit is contained in:
commit
d5762330da
23 changed files with 718 additions and 0 deletions
58
cmd/root.go
Normal file
58
cmd/root.go
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"specCon18/wand-templater/render"
|
||||
)
|
||||
|
||||
// CLI flag variables
|
||||
var (
|
||||
modName string
|
||||
packageName string
|
||||
programVersion string
|
||||
programDesc string
|
||||
outputDir string // NEW: output directory flag
|
||||
)
|
||||
|
||||
// rootCmd renders templates using CLI flags
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "wand-templater",
|
||||
Short: "A tool to generate a go project template for building a terminal application with bubbletea + cobra + viper + log + mango",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
// Fill ProgramData from CLI input
|
||||
data := render.ProgramData{
|
||||
ModName: modName,
|
||||
PackageName: packageName,
|
||||
ProgramVersion: programVersion,
|
||||
ProgramDesc: programDesc,
|
||||
}
|
||||
|
||||
// Render templates to the specified output directory
|
||||
if err := render.RenderTemplates(data, outputDir); err != nil {
|
||||
log.Fatalf("rendering failed: %v", err)
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
// Execute starts the CLI application
|
||||
func Execute() {
|
||||
cobra.CheckErr(rootCmd.Execute())
|
||||
}
|
||||
|
||||
func init() {
|
||||
// Register flags
|
||||
rootCmd.Flags().StringVar(&modName, "mod-name", "", "Module name (e.g. github.com/user/app)")
|
||||
rootCmd.Flags().StringVar(&packageName, "package-name", "", "Package name")
|
||||
rootCmd.Flags().StringVar(&programVersion, "program-version", "", "Program version")
|
||||
rootCmd.Flags().StringVar(&programDesc, "program-desc", "", "Program description")
|
||||
rootCmd.Flags().StringVarP(&outputDir, "output", "o", "output", "Output directory for rendered files")
|
||||
|
||||
// Mark required
|
||||
rootCmd.MarkFlagRequired("mod-name")
|
||||
rootCmd.MarkFlagRequired("package-name")
|
||||
rootCmd.MarkFlagRequired("program-version")
|
||||
rootCmd.MarkFlagRequired("program-desc")
|
||||
}
|
||||
|
||||
48
cmd/tui.go
Normal file
48
cmd/tui.go
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/charmbracelet/huh"
|
||||
"github.com/spf13/cobra"
|
||||
"specCon18/wand-templater/render"
|
||||
)
|
||||
|
||||
// tuiCmd renders templates interactively via a form
|
||||
var tuiCmd = &cobra.Command{
|
||||
Use: "tui",
|
||||
Short: "an interactive TUI for generating a go module template for terminal applications using bubbletea + cobra + viper + log + mango",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
var data render.ProgramData
|
||||
|
||||
// Build the input form
|
||||
form := huh.NewForm(
|
||||
huh.NewGroup(
|
||||
huh.NewInput().Title("Module Name").Placeholder("e.g. github.com/you/project").Value(&data.ModName),
|
||||
huh.NewInput().Title("Package Name").Placeholder("e.g. myapp").Value(&data.PackageName),
|
||||
huh.NewInput().Title("Program Version").Placeholder("e.g. 1.0.0").Value(&data.ProgramVersion),
|
||||
huh.NewInput().Title("Program Description").Placeholder("Describe your program").Value(&data.ProgramDesc),
|
||||
),
|
||||
)
|
||||
|
||||
// Run the form and exit on cancel
|
||||
if err := form.Run(); err != nil {
|
||||
log.Fatalf("form cancelled or failed: %v", err)
|
||||
}
|
||||
|
||||
// Retrieve --output flag value
|
||||
out, _ := cmd.Flags().GetString("output")
|
||||
|
||||
// Render templates with user input
|
||||
if err := render.RenderTemplates(data, out); err != nil {
|
||||
log.Fatalf("rendering failed: %v", err)
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
// Allow output dir override
|
||||
tuiCmd.Flags().StringP("output", "o", "output", "Output directory for rendered files")
|
||||
rootCmd.AddCommand(tuiCmd)
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue