summaryrefslogtreecommitdiff
path: root/Magefile.go
diff options
context:
space:
mode:
Diffstat (limited to 'Magefile.go')
-rw-r--r--Magefile.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/Magefile.go b/Magefile.go
new file mode 100644
index 0000000..ee80721
--- /dev/null
+++ b/Magefile.go
@@ -0,0 +1,59 @@
+//go:build mage
+
+// Magefile provides build targets for the geheim project.
+// Targets: Build, Test, Install, Uninstall
+package main
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/magefile/mage/mg"
+ "github.com/magefile/mage/sh"
+)
+
+const (
+ binary = "./bin/geheim"
+ mainPkg = "./cmd/geheim"
+)
+
+// Build compiles the binary to ./bin/geheim.
+func Build() error {
+ mg.Deps(createBinDir)
+ fmt.Println("Building", binary)
+ return sh.RunV("go", "build", "-o", binary, mainPkg)
+}
+
+// Test runs all tests in the module.
+func Test() error {
+ fmt.Println("Running tests")
+ return sh.RunV("go", "test", "./...")
+}
+
+// Install builds the binary and copies it to ~/.local/bin/geheim.
+func Install() error {
+ mg.Deps(Build)
+ home, err := os.UserHomeDir()
+ if err != nil {
+ return fmt.Errorf("cannot determine home directory: %w", err)
+ }
+ dest := home + "/.local/bin/geheim"
+ fmt.Println("Installing to", dest)
+ return sh.Copy(dest, binary)
+}
+
+// Uninstall removes the installed binary from ~/.local/bin/geheim.
+func Uninstall() error {
+ home, err := os.UserHomeDir()
+ if err != nil {
+ return fmt.Errorf("cannot determine home directory: %w", err)
+ }
+ dest := home + "/.local/bin/geheim"
+ fmt.Println("Uninstalling", dest)
+ return os.Remove(dest)
+}
+
+// createBinDir ensures ./bin exists before the build step writes the binary.
+func createBinDir() error {
+ return os.MkdirAll("./bin", 0755)
+}