diff options
| -rw-r--r-- | .gitignore | 7 | ||||
| -rw-r--r-- | CLAUDE.md | 15 | ||||
| -rw-r--r-- | Magefile.go | 64 | ||||
| -rw-r--r-- | go.mod | 13 | ||||
| -rw-r--r-- | go.sum | 12 | ||||
| -rw-r--r-- | internal/apicircuit/.gitkeep | 1 | ||||
| -rw-r--r-- | internal/comic/.gitkeep | 1 | ||||
| -rw-r--r-- | internal/config/.gitkeep | 1 | ||||
| -rw-r--r-- | internal/httpctx/.gitkeep | 1 | ||||
| -rw-r--r-- | internal/image/.gitkeep | 1 | ||||
| -rw-r--r-- | internal/version.go | 4 | ||||
| -rw-r--r-- | internal/vocab/.gitkeep | 1 | ||||
| -rw-r--r-- | prompts/.gitkeep | 1 |
13 files changed, 122 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4e40665 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +comicforge +comics/ +*.pdf +*.mp3 +.idea/ +.vscode/ + diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..459fd4a --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,15 @@ +# ComicForge + +## Repository Notes + +- Go module: `codeberg.org/snonux/comicforge` +- Binary entrypoint: `cmd/comicforge/main.go` +- Build, test, install, and clean tasks live in `Magefile.go` +- Version is defined in `internal/version.go` + +## Conventions + +- Keep `cmd/comicforge/main.go` small: flag parsing and command wiring only. +- Put application logic under `internal/`. +- Use `mage` for project tasks. + diff --git a/Magefile.go b/Magefile.go new file mode 100644 index 0000000..df71e47 --- /dev/null +++ b/Magefile.go @@ -0,0 +1,64 @@ +//go:build mage + +package main + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/magefile/mage/mg" + "github.com/magefile/mage/sh" +) + +const binaryName = "comicforge" + +// Default builds the project. +func Default() { + mg.Deps(Build) +} + +// Build compiles the comicforge binary. +func Build() error { + return sh.RunV("go", "build", "-o", binaryName, "./cmd/comicforge") +} + +// Test runs the Go test suite. +func Test() error { + return sh.RunV("go", "test", "./...") +} + +// Install copies the built binary into GOPATH/bin. +func Install() error { + mg.Deps(Build) + + gopath, err := resolveGOPATH() + if err != nil { + return err + } + + binDir := filepath.Join(gopath, "bin") + if err := os.MkdirAll(binDir, 0o755); err != nil { + return fmt.Errorf("create bin dir: %w", err) + } + + return sh.RunV("cp", "-v", binaryName, filepath.Join(binDir, binaryName)) +} + +// Clean removes build outputs from the repository root. +func Clean() error { + return sh.RunV("rm", "-f", binaryName) +} + +func resolveGOPATH() (string, error) { + if gopath := os.Getenv("GOPATH"); gopath != "" { + return gopath, nil + } + + homeDir, err := os.UserHomeDir() + if err != nil { + return "", fmt.Errorf("resolve home directory: %w", err) + } + + return filepath.Join(homeDir, "go"), nil +} @@ -0,0 +1,13 @@ +module codeberg.org/snonux/comicforge + +go 1.25.0 + +require ( + github.com/magefile/mage v1.15.0 + github.com/spf13/cobra v1.9.1 +) + +require ( + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/spf13/pflag v1.0.6 // indirect +) @@ -0,0 +1,12 @@ +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg= +github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/apicircuit/.gitkeep b/internal/apicircuit/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/internal/apicircuit/.gitkeep @@ -0,0 +1 @@ + diff --git a/internal/comic/.gitkeep b/internal/comic/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/internal/comic/.gitkeep @@ -0,0 +1 @@ + diff --git a/internal/config/.gitkeep b/internal/config/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/internal/config/.gitkeep @@ -0,0 +1 @@ + diff --git a/internal/httpctx/.gitkeep b/internal/httpctx/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/internal/httpctx/.gitkeep @@ -0,0 +1 @@ + diff --git a/internal/image/.gitkeep b/internal/image/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/internal/image/.gitkeep @@ -0,0 +1 @@ + diff --git a/internal/version.go b/internal/version.go new file mode 100644 index 0000000..8e6e4b3 --- /dev/null +++ b/internal/version.go @@ -0,0 +1,4 @@ +package version + +// Version is the released application version. +const Version = "0.1.0" diff --git a/internal/vocab/.gitkeep b/internal/vocab/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/internal/vocab/.gitkeep @@ -0,0 +1 @@ + diff --git a/prompts/.gitkeep b/prompts/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/prompts/.gitkeep @@ -0,0 +1 @@ + |
