//go:build mage // Package main provides build targets for rampage. // Targets follow the same style as other projects: Default builds, Test runs tests, // Bench runs benchmarks, Install copies binary to GOPATH/bin. package main import ( "fmt" "os" "path/filepath" "github.com/magefile/mage/mg" "github.com/magefile/mage/sh" ) const binaryName = "rampage" // Default builds the project. func Default() { mg.Deps(Build) } // Build compiles the binary. func Build() error { return sh.RunV("go", "build", "-o", binaryName, "./cmd/rampage") } // Test runs all unit tests. func Test() error { return sh.RunV("go", "test", "./...") } // Bench runs all benchmarks in the cpu package. func Bench() error { return sh.RunV("go", "test", "-bench=.", "-benchmem", "./internal/cpu/...") } // Install builds and copies the binary to GOPATH/bin. func Install() error { mg.Deps(Build) gopath := os.Getenv("GOPATH") if gopath == "" { home, err := os.UserHomeDir() if err != nil { return fmt.Errorf("get home dir: %w", err) } gopath = filepath.Join(home, "go") } binDir := filepath.Join(gopath, "bin") if err := os.MkdirAll(binDir, 0755); err != nil { return fmt.Errorf("create bin dir: %w", err) } return sh.RunV("cp", "-v", binaryName, binDir) } // Uninstall removes the binary from GOPATH/bin. func Uninstall() error { gopath := os.Getenv("GOPATH") if gopath == "" { home, err := os.UserHomeDir() if err != nil { return fmt.Errorf("get home dir: %w", err) } gopath = filepath.Join(home, "go") } binPath := filepath.Join(gopath, "bin", binaryName) return os.Remove(binPath) }