Skip to content

Commit 4c17397

Browse files
committed
Implemented cobra/fang
1 parent 8ef7a16 commit 4c17397

File tree

4 files changed

+69
-31
lines changed

4 files changed

+69
-31
lines changed

cmd/root.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package cmd
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"os"
7+
8+
"go.dalton.dog/campfire/internal/models"
9+
10+
tea "github.com/charmbracelet/bubbletea/v2"
11+
"github.com/charmbracelet/fang"
12+
"github.com/charmbracelet/log"
13+
"github.com/spf13/cobra"
14+
)
15+
16+
const Version = "0.9.0"
17+
18+
var rootCmd = &cobra.Command{
19+
Use: "campfire <./path/to/file>",
20+
Short: "A quick and stylish log viewer",
21+
Long: "Get cozy with your logs with campfire, a fast and beautiful log viewer!",
22+
Args: cobra.ExactArgs(1),
23+
Run: func(cmd *cobra.Command, args []string) {
24+
model := models.NewModel(args[0])
25+
26+
p := tea.NewProgram(
27+
model,
28+
tea.WithAltScreen(), // Use the full size of the terminal
29+
tea.WithMouseCellMotion(), // Enable tracking the mouse wheel
30+
)
31+
32+
if _, err := p.Run(); err != nil {
33+
log.Fatalf("Error running program:\n%v", err)
34+
}
35+
},
36+
}
37+
38+
func Execute() {
39+
if err := fang.Execute(context.Background(), rootCmd, fang.WithoutManpage(), fang.WithoutCompletions(), fang.WithVersion(Version)); err != nil {
40+
fmt.Fprintln(os.Stderr, err)
41+
os.Exit(1)
42+
}
43+
}

go.mod

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ go 1.24.5
55
require (
66
github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1
77
github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.4
8-
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1
8+
github.com/charmbracelet/fang v0.3.0
9+
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.2
910
github.com/charmbracelet/log v0.4.2
1011
github.com/dustin/go-humanize v1.0.1
1112
github.com/spf13/cobra v1.9.1
@@ -18,6 +19,7 @@ require (
1819
github.com/charmbracelet/lipgloss v1.1.0 // indirect
1920
github.com/charmbracelet/x/ansi v0.9.3 // indirect
2021
github.com/charmbracelet/x/cellbuf v0.0.14-0.20250505150409-97991a1f17d1 // indirect
22+
github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 // indirect
2123
github.com/charmbracelet/x/input v0.3.7 // indirect
2224
github.com/charmbracelet/x/term v0.2.1 // indirect
2325
github.com/charmbracelet/x/windows v0.2.1 // indirect
@@ -27,11 +29,16 @@ require (
2729
github.com/mattn/go-isatty v0.0.20 // indirect
2830
github.com/mattn/go-runewidth v0.0.16 // indirect
2931
github.com/muesli/cancelreader v0.2.2 // indirect
32+
github.com/muesli/mango v0.1.0 // indirect
33+
github.com/muesli/mango-cobra v1.2.0 // indirect
34+
github.com/muesli/mango-pflag v0.1.0 // indirect
35+
github.com/muesli/roff v0.1.0 // indirect
3036
github.com/muesli/termenv v0.16.0 // indirect
3137
github.com/rivo/uniseg v0.4.7 // indirect
3238
github.com/spf13/pflag v1.0.7 // indirect
3339
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
3440
golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
3541
golang.org/x/sync v0.15.0 // indirect
3642
golang.org/x/sys v0.33.0 // indirect
43+
golang.org/x/text v0.24.0 // indirect
3744
)

go.sum

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,20 @@ github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.4 h1:UgUuKKvBwgqm2ZEL+sKv/OLea
1010
github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.4/go.mod h1:0wWFRpsgF7vHsCukVZ5LAhZkiR4j875H6KEM2/tFQmA=
1111
github.com/charmbracelet/colorprofile v0.3.1 h1:k8dTHMd7fgw4bnFd7jXTLZrSU/CQrKnL3m+AxCzDz40=
1212
github.com/charmbracelet/colorprofile v0.3.1/go.mod h1:/GkGusxNs8VB/RSOh3fu0TJmQ4ICMMPApIIVn0KszZ0=
13+
github.com/charmbracelet/fang v0.3.0 h1:Be6TB+ExS8VWizTQRJgjqbJBudKrmVUet65xmFPGhaA=
14+
github.com/charmbracelet/fang v0.3.0/go.mod h1:b0ZfEXZeBds0I27/wnTfnv2UVigFDXHhrFNwQztfA0M=
1315
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
1416
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
15-
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1 h1:D9AJJuYTN5pvz6mpIGO1ijLKpfTYSHOtKGgwoTQ4Gog=
16-
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1/go.mod h1:tRlx/Hu0lo/j9viunCN2H+Ze6JrmdjQlXUQvvArgaOc=
17+
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.2 h1:vq2enzx1Hr3UenVefpPEf+E2xMmqtZoSHhx8IE+V8ug=
18+
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.2/go.mod h1:EJWvaCrhOhNGVZMvcjc0yVryl4qqpMs8tz0r9WyEkdQ=
1719
github.com/charmbracelet/log v0.4.2 h1:hYt8Qj6a8yLnvR+h7MwsJv/XvmBJXiueUcI3cIxsyig=
1820
github.com/charmbracelet/log v0.4.2/go.mod h1:qifHGX/tc7eluv2R6pWIpyHDDrrb/AG71Pf2ysQu5nw=
1921
github.com/charmbracelet/x/ansi v0.9.3 h1:BXt5DHS/MKF+LjuK4huWrC6NCvHtexww7dMayh6GXd0=
2022
github.com/charmbracelet/x/ansi v0.9.3/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE=
2123
github.com/charmbracelet/x/cellbuf v0.0.14-0.20250505150409-97991a1f17d1 h1:MTSs/nsZNfZPbYk/r9hluK2BtwoqvEYruAujNVwgDv0=
2224
github.com/charmbracelet/x/cellbuf v0.0.14-0.20250505150409-97991a1f17d1/go.mod h1:xBlh2Yi3DL3zy/2n15kITpg0YZardf/aa/hgUaIM6Rk=
25+
github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 h1:IJDiTgVE56gkAGfq0lBEloWgkXMk4hl/bmuPoicI4R0=
26+
github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0=
2327
github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a h1:FsHEJ52OC4VuTzU8t+n5frMjLvpYWEznSr/u8tnkCYw=
2428
github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
2529
github.com/charmbracelet/x/input v0.3.7 h1:UzVbkt1vgM9dBQ+K+uRolBlN6IF2oLchmPKKo/aucXo=
@@ -45,6 +49,14 @@ github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6T
4549
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
4650
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
4751
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
52+
github.com/muesli/mango v0.1.0 h1:DZQK45d2gGbql1arsYA4vfg4d7I9Hfx5rX/GCmzsAvI=
53+
github.com/muesli/mango v0.1.0/go.mod h1:5XFpbC8jY5UUv89YQciiXNlbi+iJgt29VDC5xbzrLL4=
54+
github.com/muesli/mango-cobra v1.2.0 h1:DQvjzAM0PMZr85Iv9LIMaYISpTOliMEg+uMFtNbYvWg=
55+
github.com/muesli/mango-cobra v1.2.0/go.mod h1:vMJL54QytZAJhCT13LPVDfkvCUJ5/4jNUKF/8NC2UjA=
56+
github.com/muesli/mango-pflag v0.1.0 h1:UADqbYgpUyRoBja3g6LUL+3LErjpsOwaC9ywvBWe7Sg=
57+
github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0=
58+
github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8=
59+
github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
4860
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
4961
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
5062
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -69,6 +81,8 @@ golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
6981
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
7082
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
7183
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
84+
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
85+
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
7286
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
7387
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
7488
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

main.go

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,8 @@
11
package main
22

3-
import (
4-
"os"
5-
6-
"go.dalton.dog/campfire/models"
7-
8-
tea "github.com/charmbracelet/bubbletea/v2"
9-
"github.com/charmbracelet/log"
10-
)
11-
12-
// TODO: Consider implementing cobra, but not sure this is complex enough to warrant that
3+
import "go.dalton.dog/campfire/cmd"
134

145
// Entry point of the program, starts up the BubbleTea program
156
func main() {
16-
if len(os.Args) < 2 {
17-
log.Info("Usage: campfire <path/to/logfile>")
18-
return
19-
}
20-
21-
logfilePath := os.Args[1]
22-
23-
model := models.NewModel(logfilePath)
24-
25-
p := tea.NewProgram(
26-
model,
27-
tea.WithAltScreen(), // Use the full size of the terminal
28-
tea.WithMouseCellMotion(), // Enable tracking the mouse wheel
29-
)
30-
31-
if _, err := p.Run(); err != nil {
32-
log.Fatalf("Error running program:\n%v", err)
33-
}
7+
cmd.Execute()
348
}

0 commit comments

Comments
 (0)