//go:build mage package main import ( "errors" "fmt" "os" "path/filepath" "github.com/magefile/mage/sh" cp "github.com/otiai10/copy" ) const ( BuildDir = "./build" ) var Global = struct { OS string Arch string }{} // [配置项]设置编译平台为windows func Win() { Global.OS = "win" } // [配置项]设置编译平台为linux func Linux() { Global.OS = "linux" } // [配置项]设置编译架构为amd64 func AMD64() { Global.Arch = "amd64" } func All() error { if err := Bin(); err != nil { return err } if err := Scripts(); err != nil { return err } if err := Confs(); err != nil { return err } return nil } func Bin() error { if err := Agent(); err != nil { return err } if err := Client(); err != nil { return err } if err := Coordinator(); err != nil { return err } if err := Scanner(); err != nil { return err } return nil } func Scripts() error { scriptsDir := "./storage-common/assets/scripts" info, err := os.Stat(scriptsDir) if errors.Is(err, os.ErrNotExist) || !info.IsDir() { return fmt.Errorf("script directory not exists or is not a directory") } fullDirPath, err := filepath.Abs(filepath.Join(BuildDir, "scripts")) if err != nil { return err } fmt.Printf("copying scripts to %s\n", fullDirPath) return cp.Copy(scriptsDir, fullDirPath) } func Confs() error { confDir := "./storage-common/assets/confs" info, err := os.Stat(confDir) if errors.Is(err, os.ErrNotExist) || !info.IsDir() { return fmt.Errorf("conf directory not exists or is not a directory") } fullDirPath, err := filepath.Abs(filepath.Join(BuildDir, "confs")) if err != nil { return err } fmt.Printf("copying confs to %s\n", fullDirPath) return cp.Copy(confDir, fullDirPath) } func Agent() error { os.Chdir("./storage-agent") defer os.Chdir("..") return sh.RunV("mage", makeBuildMageArgeuments()...) } func Client() error { os.Chdir("./storage-client") defer os.Chdir("..") return sh.RunV("mage", makeBuildMageArgeuments()...) } func Coordinator() error { os.Chdir("./storage-coordinator") defer os.Chdir("..") return sh.RunV("mage", makeBuildMageArgeuments()...) } func Scanner() error { os.Chdir("./storage-scanner") defer os.Chdir("..") return sh.RunV("mage", makeBuildMageArgeuments()...) } func makeBuildMageArgeuments() []string { var args []string if Global.OS != "" { args = append(args, Global.OS) } if Global.Arch != "" { args = append(args, Global.Arch) } args = append(args, "buildroot", "../build") args = append(args, "build") return args }