github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/servicex/service.go (about) 1 package servicex 2 3 import ( 4 "fmt" 5 "os" 6 "reflect" 7 8 "github.com/spf13/cobra" 9 10 "github.com/artisanhe/tools/conf" 11 "github.com/artisanhe/tools/service/dockerizier" 12 ) 13 14 var ( 15 EnvVarKeyProjectName = "PROJECT_NAME" 16 EnvVarKeyProjectFeature = "PROJECT_FEATURE" 17 ) 18 19 func init() { 20 if projectFeature, exists := os.LookupEnv(EnvVarKeyProjectFeature); exists && projectFeature != "" { 21 SetServiceName(ServiceName + "--" + projectFeature) 22 } 23 24 command.AddCommand(run) 25 26 command.PersistentFlags(). 27 StringVarP(&envConfigPrefix, "env-config-prefix", "e", "S", "prefix for env var config") 28 command.PersistentFlags(). 29 BoolVarP(&outputDockerConfig, "output-docker-config", "c", true, "output configuration of docker") 30 command.PersistentFlags(). 31 BoolVarP(&AutoMigrate, "auto-migrate", "m", os.Getenv("GOENV") == "DEV" || os.Getenv("GOENV") == "TEST", "auto migrate database if need") 32 } 33 34 var command = &cobra.Command{ 35 Use: ServiceName, 36 Run: func(cmd *cobra.Command, args []string) { 37 }, 38 } 39 40 var run = &cobra.Command{ 41 Use: "run", 42 Run: func(cmd *cobra.Command, args []string) { 43 Args = args 44 }, 45 } 46 47 var Args []string 48 var ServiceName string 49 var AutoMigrate bool 50 51 var envConfigPrefix string 52 var outputDockerConfig bool 53 var envVars conf.EnvVars 54 55 func SetServiceName(serviceName string) { 56 command.Use = serviceName 57 ServiceName = serviceName 58 } 59 60 func ConfP(c interface{}) { 61 tpe := reflect.TypeOf(c) 62 if tpe.Kind() != reflect.Ptr { 63 panic(fmt.Errorf("ConfP pass ptr for setting value")) 64 } 65 66 os.Setenv(EnvVarKeyProjectName, ServiceName) 67 68 envVars = conf.UnmarshalConf(c, envConfigPrefix) 69 envVars.Print() 70 } 71 72 func Execute() { 73 if err := command.Execute(); err != nil { 74 fmt.Println(err) 75 os.Exit(1) 76 } 77 78 if outputDockerConfig { 79 dockerizier.Dockerize(envVars, ServiceName) 80 } 81 }