diff options
| author | Paul Buetow <paul@buetow.org> | 2026-06-25 11:34:59 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-06-25 11:34:59 +0300 |
| commit | 9c96b88d6f1f9c92b4bca20fac59a9be56f511a2 (patch) | |
| tree | 422f7270e334d69f16c5d07e587137c8a173e20c | |
| parent | 8c463a644d8023d4b6f51f712932777e98600c76 (diff) | |
Refactor Magefile conventions for task 1r0
| -rw-r--r-- | Magefile.go | 90 |
1 files changed, 70 insertions, 20 deletions
diff --git a/Magefile.go b/Magefile.go index 1f4f1cc..9a1430b 100644 --- a/Magefile.go +++ b/Magefile.go @@ -1,38 +1,53 @@ //go:build mage // +build mage +// Mage targets for TaskSamurai. package main import ( "fmt" "os" + "path/filepath" "strings" + "github.com/magefile/mage/mg" "github.com/magefile/mage/sh" ) -// Default target builds the tasksamurai binary -func Default() error { - return Build() +const binaryName = "tasksamurai" + +// Default builds the tasksamurai binary. +func Default() { + mg.Deps(Build) } -// Build compiles the tasksamurai binary +// Build compiles the tasksamurai binary. func Build() error { fmt.Println("Building tasksamurai...") - return sh.Run("go", "build", "-o", "tasksamurai", "./cmd/tasksamurai") + if err := sh.RunV("go", "build", "-o", binaryName, "./cmd/tasksamurai"); err != nil { + return fmt.Errorf("build %s: %w", binaryName, err) + } + return nil } -// Run starts tasksamurai with any provided arguments +// Run builds and starts tasksamurai with any provided arguments. func Run() error { + mg.Deps(Build) + fmt.Println("Running tasksamurai...") - args := append([]string{"run", "./cmd/tasksamurai"}, os.Args[1:]...) - return sh.Run("go", args...) + if err := sh.RunV("./"+binaryName, targetArgs("run")...); err != nil { + return fmt.Errorf("run %s: %w", binaryName, err) + } + return nil } -// Test runs all tests +// Test runs all tests. func Test() error { fmt.Println("Running tests...") - return sh.Run("go", "test", "./...") + if err := sh.RunV("go", "test", "./..."); err != nil { + return fmt.Errorf("test: %w", err) + } + return nil } // Verify runs formatting and static checks before tests. @@ -40,34 +55,69 @@ func Verify() error { fmt.Println("Checking gofmt...") out, err := sh.Output("gofmt", "-l", ".") if err != nil { - return err + return fmt.Errorf("check gofmt: %w", err) } if strings.TrimSpace(out) != "" { return fmt.Errorf("gofmt needed for:\n%s", out) } fmt.Println("Running errcheck...") - if err := sh.Run("errcheck", "./..."); err != nil { - return err + if err := sh.RunV("errcheck", "./..."); err != nil { + return fmt.Errorf("errcheck: %w", err) } - return Test() + mg.Deps(Test) + return nil } -// Install installs tasksamurai to $GOPATH/bin +// Install builds and installs tasksamurai to $GOPATH/bin. func Install() error { + mg.Deps(Build) + fmt.Println("Installing tasksamurai...") - return sh.Run("go", "install", "./cmd/tasksamurai") + goPath := os.Getenv("GOPATH") + if goPath == "" { + home, err := os.UserHomeDir() + if err != nil { + return fmt.Errorf("resolve home directory: %w", err) + } + goPath = filepath.Join(home, "go") + } + + binDir := filepath.Join(goPath, "bin") + if err := os.MkdirAll(binDir, 0o755); err != nil { + return fmt.Errorf("create install directory %s: %w", binDir, err) + } + + installPath := filepath.Join(binDir, binaryName) + if err := sh.RunV("cp", "-v", binaryName, installPath); err != nil { + return fmt.Errorf("install %s to %s: %w", binaryName, installPath, err) + } + return nil } -// Clean removes the built binary +// Clean removes the built binary. func Clean() error { fmt.Println("Cleaning...") - if err := sh.Rm("tasksamurai"); err != nil { - // Ignore error if file doesn't exist + if err := sh.Rm(binaryName); err != nil { if !os.IsNotExist(err) { - return err + return fmt.Errorf("remove %s: %w", binaryName, err) + } + } + return nil +} + +func targetArgs(target string) []string { + for i, arg := range os.Args[1:] { + if !strings.EqualFold(arg, target) { + continue + } + + args := os.Args[i+2:] + if len(args) > 0 && args[0] == "--" { + return args[1:] } + return args } return nil } |
