Files
maxwarden/cmd/metagen/main.go

84 lines
1.7 KiB
Go

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()
}