Skip to content

Commit a38c165

Browse files
authored
Merge pull request #15 from codeGROOVE-dev/fake-user
Upgrade to latest sprinkler library
2 parents a7f5bb4 + e866b4c commit a38c165

File tree

4 files changed

+61
-47
lines changed

4 files changed

+61
-47
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,7 @@ Colors disabled with `NO_COLOR=1`.
4242
Due to GitHub webhook limitations, real-time updates are only available for GitHub orgs that install the [Ready to Review](https://github.com/apps/ready-to-review-beta) GitHub app.
4343

4444
Without the app, PRs are updated every minute, which should be enough for anyone TBH.
45+
46+
## GUI
47+
48+
Prefer a menu-bar UI? Check out https://github.com/codeGROOVE-dev/goose

go.mod

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
module github.com/codeGROOVE-dev/prs
22

3-
go 1.23.4
4-
5-
require github.com/avast/retry-go/v4 v4.6.1
3+
go 1.25.1
64

75
require (
6+
github.com/avast/retry-go/v4 v4.6.1
87
github.com/charmbracelet/lipgloss v1.1.0
9-
github.com/codeGROOVE-dev/sprinkler v0.0.0-20250827124139-8fa72516d748
10-
github.com/codeGROOVE-dev/turnclient v0.0.0-20250922140157-bac36d1bd9f2
11-
golang.org/x/term v0.32.0
8+
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251001125233-5fa6f0ff4582
9+
github.com/codeGROOVE-dev/turnclient v0.0.0-20250929203714-61cf2f094fb1
10+
golang.org/x/term v0.35.0
1211
)
1312

1413
require (
1514
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
16-
github.com/charmbracelet/colorprofile v0.3.1 // indirect
17-
github.com/charmbracelet/x/ansi v0.9.3 // indirect
15+
github.com/charmbracelet/colorprofile v0.3.2 // indirect
16+
github.com/charmbracelet/x/ansi v0.10.2 // indirect
1817
github.com/charmbracelet/x/cellbuf v0.0.13 // indirect
1918
github.com/charmbracelet/x/term v0.2.1 // indirect
20-
github.com/codeGROOVE-dev/prx v0.0.0-20250908203157-0711b3ec5471 // indirect
19+
github.com/clipperhouse/uax29/v2 v2.2.0 // indirect
20+
github.com/codeGROOVE-dev/prx v0.0.0-20250923100916-d2b60be50274 // indirect
2121
github.com/codeGROOVE-dev/retry v1.2.0 // indirect
22-
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
22+
github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
2323
github.com/mattn/go-isatty v0.0.20 // indirect
24-
github.com/mattn/go-runewidth v0.0.16 // indirect
24+
github.com/mattn/go-runewidth v0.0.19 // indirect
2525
github.com/muesli/termenv v0.16.0 // indirect
2626
github.com/rivo/uniseg v0.4.7 // indirect
27+
github.com/stretchr/testify v1.11.1 // indirect
2728
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
28-
golang.org/x/net v0.41.0 // indirect
29-
golang.org/x/sys v0.34.0 // indirect
29+
golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect
30+
golang.org/x/net v0.44.0 // indirect
31+
golang.org/x/sys v0.36.0 // indirect
3032
)

go.sum

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,52 @@ github.com/avast/retry-go/v4 v4.6.1 h1:VkOLRubHdisGrHnTu89g08aQEWEgRU7LVEop3GbIc
22
github.com/avast/retry-go/v4 v4.6.1/go.mod h1:V6oF8njAwxJ5gRo1Q7Cxab24xs5NCWZBeaHHBklR8mA=
33
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
44
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
5-
github.com/charmbracelet/colorprofile v0.3.1 h1:k8dTHMd7fgw4bnFd7jXTLZrSU/CQrKnL3m+AxCzDz40=
6-
github.com/charmbracelet/colorprofile v0.3.1/go.mod h1:/GkGusxNs8VB/RSOh3fu0TJmQ4ICMMPApIIVn0KszZ0=
5+
github.com/charmbracelet/colorprofile v0.3.2 h1:9J27WdztfJQVAQKX2WOlSSRB+5gaKqqITmrvb1uTIiI=
6+
github.com/charmbracelet/colorprofile v0.3.2/go.mod h1:mTD5XzNeWHj8oqHb+S1bssQb7vIHbepiebQ2kPKVKbI=
77
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
88
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
9-
github.com/charmbracelet/x/ansi v0.9.3 h1:BXt5DHS/MKF+LjuK4huWrC6NCvHtexww7dMayh6GXd0=
10-
github.com/charmbracelet/x/ansi v0.9.3/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE=
9+
github.com/charmbracelet/x/ansi v0.10.2 h1:ith2ArZS0CJG30cIUfID1LXN7ZFXRCww6RUvAPA+Pzw=
10+
github.com/charmbracelet/x/ansi v0.10.2/go.mod h1:HbLdJjQH4UH4AqA2HpRWuWNluRE6zxJH/yteYEYCFa8=
1111
github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k=
1212
github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
1313
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
1414
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
15-
github.com/codeGROOVE-dev/prx v0.0.0-20250908203157-0711b3ec5471 h1:CbUa70O+iNC9rPk5aoZGs/RZbpmPyfNydv5ncKLdOvk=
16-
github.com/codeGROOVE-dev/prx v0.0.0-20250908203157-0711b3ec5471/go.mod h1:7qLbi18baOyS8yO/6/64SBIqtyzSzLFdsDST15NPH3w=
15+
github.com/clipperhouse/uax29/v2 v2.2.0 h1:ChwIKnQN3kcZteTXMgb1wztSgaU+ZemkgWdohwgs8tY=
16+
github.com/clipperhouse/uax29/v2 v2.2.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
17+
github.com/codeGROOVE-dev/prx v0.0.0-20250923100916-d2b60be50274 h1:9eLzQdOaQEn30279ai3YjNdJOM/efbcYanWC9juAJ+M=
18+
github.com/codeGROOVE-dev/prx v0.0.0-20250923100916-d2b60be50274/go.mod h1:7qLbi18baOyS8yO/6/64SBIqtyzSzLFdsDST15NPH3w=
1719
github.com/codeGROOVE-dev/retry v1.2.0 h1:xYpYPX2PQZmdHwuiQAGGzsBm392xIMl4nfMEFApQnu8=
1820
github.com/codeGROOVE-dev/retry v1.2.0/go.mod h1:8OgefgV1XP7lzX2PdKlCXILsYKuz6b4ZpHa/20iLi8E=
19-
github.com/codeGROOVE-dev/sprinkler v0.0.0-20250827124139-8fa72516d748 h1:5RGwu9DI70NnLWvfNiM9oR/Jj0clYc7Pnfd3Sa1rcw4=
20-
github.com/codeGROOVE-dev/sprinkler v0.0.0-20250827124139-8fa72516d748/go.mod h1:F8FIfuDdk3rkslIaCASnEt61A2lU8F+9lTPiFzFlIQ8=
21-
github.com/codeGROOVE-dev/turnclient v0.0.0-20250922140157-bac36d1bd9f2 h1:iMC3tTx0oRrkJjqs4IWw7EEN1sC1ZViG9n9ewk2P3ps=
22-
github.com/codeGROOVE-dev/turnclient v0.0.0-20250922140157-bac36d1bd9f2/go.mod h1:7lBF4vS6T+D1rNjmJ+CNVrXALQvdwNfBVEy7vhIQtYk=
21+
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251001125233-5fa6f0ff4582 h1:IPCaNGRWdyMZKyjnjv+wdSmPmOZtKFD6SVaha5DuCqk=
22+
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251001125233-5fa6f0ff4582/go.mod h1:RZ/Te7HkY5upHQlnmf3kV4GHVM0R8AK3U+yPItCZAoQ=
23+
github.com/codeGROOVE-dev/turnclient v0.0.0-20250929203714-61cf2f094fb1 h1:lQZoQN9Vo+AzGHGRMAoFewJ07vS24cNIEx2GrL5FX/g=
24+
github.com/codeGROOVE-dev/turnclient v0.0.0-20250929203714-61cf2f094fb1/go.mod h1:7lBF4vS6T+D1rNjmJ+CNVrXALQvdwNfBVEy7vhIQtYk=
2325
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2426
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
25-
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
26-
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
27+
github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag=
28+
github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
2729
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
2830
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
29-
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
30-
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
31+
github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
32+
github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
3133
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
3234
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
3335
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
3436
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
35-
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
3637
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
3738
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
38-
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
39-
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
39+
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
40+
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
4041
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
4142
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
42-
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E=
43-
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
44-
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
45-
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
43+
golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU=
44+
golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk=
45+
golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I=
46+
golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
4647
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
47-
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
48-
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
49-
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
50-
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
48+
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
49+
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
50+
golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ=
51+
golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA=
5152
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
5253
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

main.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"fmt"
1212
"io"
1313
"log"
14+
"log/slog"
1415
"net/http"
1516
"net/url"
1617
"os"
@@ -117,7 +118,6 @@ const (
117118
apiUserEndpoint = "https://api.github.com/user"
118119
apiSearchEndpoint = "https://api.github.com/search/issues"
119120
apiPullsEndpoint = "https://api.github.com/repos/%s/%s/pulls/%d"
120-
defaultSprinklerURL = "wss://hook.g.robot-army.dev/ws"
121121
maxConcurrent = 20 // Increased for better throughput
122122
cacheTTL = 10 * 24 * time.Hour // 10 days
123123
prRefreshCooldownSecs = 1 // Avoid refreshing same PR within 1 second
@@ -231,11 +231,14 @@ func main() {
231231
}
232232
logger.Print("INFO: Successfully retrieved GitHub token")
233233

234-
// Determine the username to use - either specified via --user or the authenticated user
234+
// Determine the username to use - priority: --user flag, GITHUB_USER env, authenticated user
235235
var username string
236236
if *user != "" {
237237
username = *user
238-
logger.Printf("INFO: Using specified user: %s", username)
238+
logger.Printf("INFO: Using specified user from --user flag: %s", username)
239+
} else if envUser := os.Getenv("GITHUB_USER"); envUser != "" {
240+
username = envUser
241+
logger.Printf("INFO: Using user from GITHUB_USER environment variable: %s", username)
239242
} else {
240243
username, err = currentUser(ctx, token, logger, httpClient)
241244
if err != nil {
@@ -922,21 +925,25 @@ func runWatchMode(ctx context.Context, cfg *watchConfig) {
922925

923926
// Start WebSocket monitoring
924927
go func() {
925-
// Redirect standard log output to discard when not verbose
926-
// This suppresses sprinkler library logs
927-
if !cfg.debug {
928-
log.SetOutput(io.Discard)
929-
defer log.SetOutput(os.Stderr) // Restore on exit
928+
// Create a custom logger for sprinkler client
929+
var sprinklerLogger *slog.Logger
930+
if cfg.debug {
931+
// Use stderr with text handler for verbose mode
932+
sprinklerLogger = slog.New(slog.NewTextHandler(os.Stderr, nil))
933+
} else {
934+
// Discard all logs in non-verbose mode
935+
sprinklerLogger = slog.New(slog.NewTextHandler(io.Discard, nil))
930936
}
931937

932938
config := client.Config{
933-
ServerURL: defaultSprinklerURL,
939+
ServerURL: "wss://" + client.DefaultServerAddress + "/ws",
934940
Token: cfg.token,
935941
Organization: "*",
936942
EventTypes: []string{"*"},
937943
UserEventsOnly: false,
938944
Verbose: cfg.debug,
939945
NoReconnect: false,
946+
Logger: sprinklerLogger,
940947
OnConnect: func() {
941948
cfg.logger.Println("✓ WebSocket connected")
942949
},

0 commit comments

Comments
 (0)