Select Git revision
-
Jano Hendriks authoredJano Hendriks authored
build.go 3.61 KiB
package mage_helpers
import (
"fmt"
"os"
"os/exec"
"path"
"runtime"
"strings"
"github.com/magefile/mage/sh"
)
func Clean(path string) error {
cmd := exec.Command("rm", "-rf", "build")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Dir = path
err := cmd.Run()
if err != nil {
return err
}
cmd = exec.Command("mkdir", "-p", "build")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Dir = path
err = cmd.Run()
if err != nil {
return err
}
return nil
}
func Build(dir string, module string, isDebug bool) error {
currentDir, _ := os.Getwd()
fullPath := currentDir + "/core/" + dir
if err := Clean(fullPath); err != nil {
return err
}
handler := path.Base(fullPath)
fmt.Println(fmt.Sprintf("Building %v", handler))
outputFileName := handler
env := CurrentEnv()
fmt.Println("ENV:", env)
if env == "playground" {
fmt.Println("Using 'bootstrap' for output file name")
outputFileName = "bootstrap"
}
outputDir := fmt.Sprintf(currentDir+`/core/build/handlers/%v`, handler)
outputFile := fmt.Sprintf(`%v/%v`, outputDir, outputFileName)
appPath := fmt.Sprintf(`%v/core/%v`, module, handler)
err := BuildGolangApp(outputFile, appPath, module, isDebug)
if err != nil {
return err
}
// Copy files in handler folder
err = copyFilesToBuildDir(fullPath, outputDir)
if err != nil {
return err
}
// Copy shared files
sharedDir := currentDir + "/core/utils"
_, err = os.Stat(sharedDir)
if err == nil {
err = copyFilesToBuildDir(sharedDir, outputDir)
if err != nil {
return err
}
}
if isDebug {
// copy env file
err = copyFilesToBuildDir(currentDir+"/.env.debug", outputDir)
if err != nil {
return err
}
}
return nil
}
func BuildGolangApp(outputDir string, appPath string, module string, isDebug bool) error {
commandArgs := []string{
`build`,
fmt.Sprintf(`-ldflags=-X %v/globals.BuildVersion=%v -X %v/globals.OSType=%v -X %v/globals.IsDebugBuild=%v`, module, CurrentCommit(), module, runtime.GOOS, module, isDebug),
}
if isDebug {
commandArgs = append(commandArgs, "-gcflags", "all=-N -l")
}
commandArgs = append(commandArgs, `-o`,
outputDir,
appPath)
env := map[string]string{
"GOOS": "linux",
}
if !isDebug {
if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" { // M1 mac
// Change to intel architecture (used when deploying locally)
env["GOARCH"] = "amd64"
}
}
err := sh.RunWith(env, "go", commandArgs...)
if err != nil {
return err
}
return nil
}
func BuildGolangAppWindows(outputDir string, appPath string, module string, isDebug bool) error {
commandArgs := []string{
`build`,
fmt.Sprintf(`-ldflags=-X %v/globals.BuildVersion=%v -X %v/globals.OSType=%v -X %v/globals.IsDebugBuild=%v`, module, CurrentCommit(), module, runtime.GOOS, module, isDebug),
}
if isDebug {
commandArgs = append(commandArgs, "-gcflags", "all=-N -l")
}
commandArgs = append(commandArgs, `-o`,
outputDir,
appPath)
env := map[string]string{
"GOOS": "windows",
"GOARCH": "amd64",
}
err := sh.RunWith(env, "go", commandArgs...)
if err != nil {
return err
}
return nil
}
func BuildMJML(filename string) error {
// Get the full path to the file
currentDir, _ := os.Getwd()
fullFilePath := currentDir + "/" + filename
fmt.Println(fullFilePath)
// Trim the extension from the filename
if strings.HasSuffix(fullFilePath, ".mjml") {
fullFilePath = strings.TrimSuffix(fullFilePath, ".mjml")
}
commandArgs := []string{
"-l strict",
"--config.beautify=true",
fmt.Sprintf("-r %v.mjml", fullFilePath),
fmt.Sprintf("-o%v.html", fullFilePath),
}
err := sh.RunWith(nil, "mjml", commandArgs...)
if err != nil {
return err
}
return nil
}