package main
import (
"fmt"
"log"
"strings"
"github.com/raystack/salt/cli/prompter"
)
type Config struct {
Environment string
Services []string
ProjectName string
AutoDeploy bool
}
func main() {
p := prompter.New()
config := Config{}
// Select environment
fmt.Println("Configure your deployment")
fmt.Println()
environments := []string{"Development", "Staging", "Production"}
envIndex, err := p.Select(
"Select environment:",
"Development",
environments,
)
if err != nil {
log.Fatal(err)
}
config.Environment = environments[envIndex]
// Multi-select services
services := []string{"API", "Worker", "Frontend", "Database"}
serviceIndices, err := p.MultiSelect(
"Select services to deploy:",
"API",
services,
)
if err != nil {
log.Fatal(err)
}
for _, idx := range serviceIndices {
config.Services = append(config.Services, services[idx])
}
// Text input
projectName, err := p.Input(
"Enter project name:",
"my-app",
)
if err != nil {
log.Fatal(err)
}
config.ProjectName = projectName
// Confirmation
autoDeploy, err := p.Confirm(
"Enable automatic deployments?",
true,
)
if err != nil {
log.Fatal(err)
}
config.AutoDeploy = autoDeploy
// Display configuration
fmt.Println("\nConfiguration Summary:")
fmt.Printf(" Environment: %s\n", config.Environment)
fmt.Printf(" Project: %s\n", config.ProjectName)
fmt.Printf(" Services: %s\n", strings.Join(config.Services, ", "))
fmt.Printf(" Auto-deploy: %v\n", config.AutoDeploy)
// Final confirmation
proceed, err := p.Confirm("\nProceed with this configuration?", true)
if err != nil {
log.Fatal(err)
}
if proceed {
fmt.Println("\nDeploying...")
// Perform deployment
} else {
fmt.Println("\nCancelled")
}
}