envoid/cmd/import.go
Sagi Dayan 693350fa49
All checks were successful
Codespell / Check for spelling errors (push) Successful in 23s
Initial commit
Signed-off-by: Sagi Dayan <sagidayan@gmail.com>
2024-12-14 23:26:06 +02:00

77 lines
1.6 KiB
Go

package cmd
import (
"fmt"
"os"
"git.dayanhub.com/sagi/envoid/internal/datastore"
"git.dayanhub.com/sagi/envoid/internal/errors"
"git.dayanhub.com/sagi/envoid/internal/types"
"github.com/joho/godotenv"
"github.com/spf13/cobra"
)
type importCmdFlags struct {
envName *string
}
var importFlags = importCmdFlags{}
var importCmd = &cobra.Command{
Use: "import <file>",
Short: "import a .env file into environment(s)",
Long: "This will not encrypt any value. You can then use `set encrypt KEY_NAME` to encrypt",
RunE: func(cmd *cobra.Command, args []string) error {
err := initProject()
if err != nil {
return err
}
if project.IsEmpty() {
return errors.NewProjectEmptyError(project.Name)
}
envs := project.Environments
if len(*importFlags.envName) != 0 {
e, err := project.GetEnv(*importFlags.envName)
if err != nil {
return err
}
envs = []*types.Environment{e}
}
if len(args) != 1 {
return fmt.Errorf("Needs a file to parse")
}
file, err := os.Open(args[0])
if err != nil {
return err
}
m, err := godotenv.Parse(file)
if err != nil {
return err
}
ds, err := datastore.NewDataStore()
if err != nil {
fmt.Printf("Error: %e", err)
}
defer ds.Close()
for k, v := range m {
err = ds.SetValue(k, v, nil, envs)
if err != nil {
return err
}
}
return nil
},
}
func init() {
importFlags.envName = importCmd.Flags().StringP("environment", "e", "", "environments name")
err := importCmd.RegisterFlagCompletionFunc("environment", validEnvironmentNamesComplete)
if err != nil {
panic(err)
}
}