package main import ( "flag" "fmt" "os" ) var envtype int // set by user with cli flag const ( ENVIRONMENT_DEV = iota ENVIRONMENT_STAGING = iota ENVIRONMENT_PRODUCTION = iota ) const METAGEN_AUTO_COMMENT = "// @Metagen -- THIS FILE WAS AUTOGENERATED OR PREPROCESSED BY METAGEN - DO NOT EDIT BY HAND" // metagen - code generator application // // Generates code for other applications, such as the server application func main() { env := flag.String("env", "dev", "The environment to run in: dev, staging, or production") // Parse command-line flags flag.Parse() switch *env { case "dev": envtype = ENVIRONMENT_DEV case "staging": envtype = ENVIRONMENT_STAGING case "production": envtype = ENVIRONMENT_PRODUCTION default: fmt.Printf("Invalid environment specified: %s\n", *env) fmt.Println("Allowed values are: dev, staging, or production") os.Exit(1) } args := flag.Args() for _, arg := range args { switch arg { case "build": preBuild() goto End case "migrate": migrations(args) goto End default: helpmsg() goto End } } End: if len(args) == 0 { helpmsg() } } func helpmsg() { fmt.Println("Usage: metagen [options...]") fmt.Println("build :: Build dependencies, generate code, then build final executables.") fmt.Println("migrate [up, down, goto {V}, create {migration name}] :: Deploy and create SQL migrations.") os.Exit(1) } func preBuild() { if envtype == ENVIRONMENT_DEV { fmt.Println("[DEBUG ENVIRONMENT]") } else if envtype == ENVIRONMENT_STAGING || envtype == ENVIRONMENT_PRODUCTION { fmt.Println("[RELEASE ENVIRONMENT]") } // db creation maybeCreateSqliteDb() // code generation generateInlineStyles() generateDebugConfig() }