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  }