112 lines
2.2 KiB
Go
112 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
)
|
|
|
|
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-all":
|
|
preBuild()
|
|
build()
|
|
goto End
|
|
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()
|
|
generateJetModels()
|
|
}
|
|
|
|
func build() {
|
|
compileServer()
|
|
}
|
|
|
|
func compileServer() {
|
|
var out []byte
|
|
var err error
|
|
|
|
fmt.Printf("Compiling Server Binary")
|
|
|
|
if envtype == ENVIRONMENT_DEV {
|
|
// include extra flags for the GC
|
|
out, err = exec.Command("go", "build", "-gcflags=all=-N -l", "./cmd/server").CombinedOutput()
|
|
} else {
|
|
out, err = exec.Command("go", "build", "./cmd/server").CombinedOutput()
|
|
}
|
|
|
|
handleCmdOutput(out, err)
|
|
printStatus(true)
|
|
}
|