summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore7
-rw-r--r--CLAUDE.md15
-rw-r--r--Magefile.go64
-rw-r--r--go.mod13
-rw-r--r--go.sum12
-rw-r--r--internal/apicircuit/.gitkeep1
-rw-r--r--internal/comic/.gitkeep1
-rw-r--r--internal/config/.gitkeep1
-rw-r--r--internal/httpctx/.gitkeep1
-rw-r--r--internal/image/.gitkeep1
-rw-r--r--internal/version.go4
-rw-r--r--internal/vocab/.gitkeep1
-rw-r--r--prompts/.gitkeep1
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
+}
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..59de80c
--- /dev/null
+++ b/go.mod
@@ -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
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..e6f25e1
--- /dev/null
+++ b/go.sum
@@ -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 @@
+