package cmd import ( "envy/cmd/utils" "os" "path" "github.com/charmbracelet/huh" "github.com/spf13/cobra" ) // exportCmd represents the export command var exportCmd = &cobra.Command{ Use: "export [environment]", Short: "Export an environment as a .env file", Run: func(cmd *cobra.Command, args []string) { all, err := cmd.Flags().GetBool("all") utils.StopIfErr(err) env := "" if len(args) > 0 { env = args[0] } envy, err := utils.GetEnvy() utils.StopIfErr(err) project, err := utils.GetKey(envy, "envy.project") utils.StopIfErr(err) dbProject, err := utils.GetProject(project) utils.StopIfErr(err) cwd, err := os.Getwd() utils.StopIfErr(err) if all { dbEnvs, err := utils.GetEnvironments(dbProject.ID) utils.StopIfErr(err) for _, en := range dbEnvs { err = os.WriteFile(path.Join(cwd, ".env."+en.Name), []byte(en.Data), 0755) utils.StopIfErr(err) } return } if env != "" { dbEnv, err := utils.GetEnvironment(dbProject.ID, env) utils.StopIfErr(err) err = os.WriteFile(path.Join(cwd, ".env."+env), []byte(dbEnv.Data), 0755) utils.StopIfErr(err) } else { dbEnvs, err := utils.GetEnvironments(dbProject.ID) utils.StopIfErr(err) var selected *utils.Environment form := huh.NewForm( huh.NewGroup( huh.NewSelect[*utils.Environment](). Title("Select an environment"). OptionsFunc(func() []huh.Option[*utils.Environment] { var options []huh.Option[*utils.Environment] for _, en := range dbEnvs { options = append(options, huh.NewOption(en.Name, &en)) } return options }, &dbEnvs). Value(&selected), ), ) err = form.Run() utils.StopIfErr(err) err = os.WriteFile(path.Join(cwd, ".env."+selected.Name), []byte(selected.Data), 0755) utils.StopIfErr(err) } }, } func init() { rootCmd.AddCommand(exportCmd) exportCmd.Flags().BoolP("all", "a", false, "Export all environments") }