diff options
| author | Paul Buetow <paul@buetow.org> | 2025-08-28 11:18:21 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-08-28 11:18:21 +0300 |
| commit | 101500cc9a9b4e636451aba67ae5f8e924432afa (patch) | |
| tree | 4de216b50c4b75598ff87b14f1c1bc197edcc803 /Magefile.go | |
| parent | faf87a23a782bc7d717e363a3a399a64d6a34146 (diff) | |
build: replace Taskfile with Magefile; add Mage targets and README build notes
Diffstat (limited to 'Magefile.go')
| -rw-r--r-- | Magefile.go | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/Magefile.go b/Magefile.go new file mode 100644 index 0000000..d1ad2ed --- /dev/null +++ b/Magefile.go @@ -0,0 +1,102 @@ +//go:build mage + +// Hexai mage targets: build, dev, test, lint, install, etc. +package main + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/magefile/mage/mg" + "github.com/magefile/mage/sh" +) + +// Default target: build both binaries. +var Default = Build + +// Build builds the Hexai LSP and CLI binaries. +func Build() error { + mg.Deps(BuildHexaiLSP, BuildHexaiCLI) + return nil +} + +// BuildHexaiLSP builds the LSP server binary. +func BuildHexaiLSP() error { + return sh.RunV("go", "build", "-o", "hexai-lsp", "cmd/hexai-lsp/main.go") +} + +// BuildHexaiCLI builds the CLI binary. +func BuildHexaiCLI() error { + return sh.RunV("go", "build", "-o", "hexai", "cmd/hexai/main.go") +} + +// Dev runs tests, vet, lint, then builds with race for both binaries. +func Dev() error { + mg.Deps(Test, Vet, Lint) + if err := sh.RunV("go", "build", "-race", "-o", "hexai-lsp", "cmd/hexai-lsp/main.go"); err != nil { + return err + } + return sh.RunV("go", "build", "-race", "-o", "hexai", "cmd/hexai/main.go") +} + +// Run launches the LSP server via go run (useful during development). +func Run() error { + mg.Deps(Dev) + return sh.RunV("go", "run", "cmd/hexai-lsp/main.go") +} + +// RunCLI runs the CLI with a small test input. +func RunCLI() error { + mg.Deps(Dev) + cmd := "echo 'test' | go run cmd/hexai/main.go" + return sh.RunV("bash", "-lc", cmd) +} + +// Install copies built binaries to GOPATH/bin (defaults to ~/go/bin when GOPATH is unset). +func Install() error { + mg.Deps(Build) + gopath := os.Getenv("GOPATH") + if gopath == "" { + home, err := os.UserHomeDir() + if err != nil { + return fmt.Errorf("resolve home: %w", err) + } + gopath = filepath.Join(home, "go") + } + bin := filepath.Join(gopath, "bin") + if err := os.MkdirAll(bin, 0o755); err != nil { + return err + } + if err := sh.RunV("cp", "-v", "./hexai-lsp", bin+"/"); err != nil { + return err + } + return sh.RunV("cp", "-v", "./hexai", bin+"/") +} + +// Test runs the test suite. +func Test() error { + if err := sh.RunV("go", "clean", "-testcache"); err != nil { + return err + } + return sh.RunV("go", "test", "-v", "./...") +} + +// Vet runs go vet. +func Vet() error { + return sh.RunV("go", "vet", "./...") +} + +// Lint runs golangci-lint. +func Lint() error { + return sh.RunV("golangci-lint", "run") +} + +// DevInstall installs helpful developer tools. +func DevInstall() error { + if err := sh.RunV("go", "install", "golang.org/x/tools/gopls@latest"); err != nil { + return err + } + return sh.RunV("go", "install", "github.com/golangci/golangci-lint/cmd/golangci-lint@latest") +} + |
