Skip to content

Commit 3b814a3

Browse files
Thomas StrombergThomas Stromberg
authored andcommitted
downgrade to go 1.24, add auto-open debugging
1 parent 6f1dbc4 commit 3b814a3

File tree

5 files changed

+24
-100
lines changed

5 files changed

+24
-100
lines changed

cmd/goose/browser_rate_limiter.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,20 @@ func (b *BrowserRateLimiter) CanOpen(startTime time.Time, prURL string) bool {
3737
b.mu.Lock()
3838
defer b.mu.Unlock()
3939

40+
slog.Info("[BROWSER] CanOpen check",
41+
"url", prURL,
42+
"time_since_start", time.Since(startTime).Round(time.Second),
43+
"startup_delay", b.startupDelay)
44+
4045
// Check if we've already opened this PR
4146
if b.openedPRs[prURL] {
42-
slog.Debug("[BROWSER] Skipping auto-open: PR already opened", "url", prURL)
47+
slog.Info("[BROWSER] Skipping auto-open: PR already opened", "url", prURL)
4348
return false
4449
}
4550

4651
// Check startup delay
4752
if time.Since(startTime) < b.startupDelay {
48-
slog.Debug("[BROWSER] Skipping auto-open: within startup delay period",
53+
slog.Info("[BROWSER] Skipping auto-open: within startup delay period",
4954
"remaining", b.startupDelay-time.Since(startTime))
5055
return false
5156
}
@@ -57,18 +62,19 @@ func (b *BrowserRateLimiter) CanOpen(startTime time.Time, prURL string) bool {
5762

5863
// Check per-minute limit
5964
if len(b.openedLastMinute) >= b.maxPerMinute {
60-
slog.Debug("[BROWSER] Rate limit: per-minute limit reached",
65+
slog.Info("[BROWSER] Rate limit: per-minute limit reached",
6166
"opened", len(b.openedLastMinute), "max", b.maxPerMinute)
6267
return false
6368
}
6469

6570
// Check per-day limit
6671
if len(b.openedToday) >= b.maxPerDay {
67-
slog.Debug("[BROWSER] Rate limit: daily limit reached",
72+
slog.Info("[BROWSER] Rate limit: daily limit reached",
6873
"opened", len(b.openedToday), "max", b.maxPerDay)
6974
return false
7075
}
7176

77+
slog.Info("[BROWSER] CanOpen returning true", "url", prURL)
7278
return true
7379
}
7480

cmd/goose/icons.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package main
22

33
import (
44
"log/slog"
5-
"os"
6-
"path/filepath"
75
)
86

97
// Icon variables are defined in platform-specific files:
@@ -43,17 +41,6 @@ func getIcon(iconType IconType) []byte {
4341
}
4442
}
4543

46-
// loadIconFromFile loads an icon from the filesystem (fallback if embed fails).
47-
func loadIconFromFile(filename string) []byte {
48-
iconPath := filepath.Join("icons", filename)
49-
data, err := os.ReadFile(iconPath)
50-
if err != nil {
51-
slog.Warn("Failed to load icon file", "path", iconPath, "error", err)
52-
return nil
53-
}
54-
return data
55-
}
56-
5744
// setTrayIcon updates the system tray icon based on PR counts.
5845
func (app *App) setTrayIcon(iconType IconType) {
5946
iconBytes := getIcon(iconType)

cmd/goose/main.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,14 @@ func (app *App) updatePRsWithWait(ctx context.Context) {
832832

833833
// tryAutoOpenPR attempts to open a PR in the browser if enabled and rate limits allow.
834834
func (app *App) tryAutoOpenPR(ctx context.Context, pr PR, autoBrowserEnabled bool, startTime time.Time) {
835+
slog.Debug("[BROWSER] tryAutoOpenPR called",
836+
"repo", pr.Repository,
837+
"number", pr.Number,
838+
"enabled", autoBrowserEnabled,
839+
"time_since_start", time.Since(startTime).Round(time.Second))
840+
835841
if !autoBrowserEnabled {
842+
slog.Debug("[BROWSER] Auto-open disabled, skipping")
836843
return
837844
}
838845

cmd/goose/sprinkler.go

Lines changed: 7 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"errors"
77
"fmt"
88
"log/slog"
9-
"sort"
109
"strings"
1110
"sync"
1211
"time"
@@ -56,75 +55,19 @@ func newSprinklerMonitor(app *App, token string) *sprinklerMonitor {
5655
}
5756
}
5857

59-
// updateOrgs updates the list of organizations to monitor.
58+
// updateOrgs sets the list of organizations to monitor.
6059
func (sm *sprinklerMonitor) updateOrgs(orgs []string) {
6160
sm.mu.Lock()
6261
defer sm.mu.Unlock()
6362

64-
// Sort both lists for comparison
65-
sortedNew := make([]string, len(orgs))
66-
copy(sortedNew, orgs)
67-
sort.Strings(sortedNew)
68-
69-
sortedOld := make([]string, len(sm.orgs))
70-
copy(sortedOld, sm.orgs)
71-
sort.Strings(sortedOld)
72-
73-
// Check if orgs changed after sorting
74-
if len(sortedNew) == len(sortedOld) {
75-
same := true
76-
for i := range sortedNew {
77-
if sortedNew[i] != sortedOld[i] {
78-
same = false
79-
break
80-
}
81-
}
82-
if same {
83-
slog.Debug("[SPRINKLER] Org list unchanged (same after sorting)",
84-
"orgs", sortedNew,
85-
"count", len(sortedNew))
86-
return // No change
87-
}
88-
}
89-
90-
// Find what changed
91-
added := []string{}
92-
removed := []string{}
93-
oldMap := make(map[string]bool)
94-
for _, org := range sm.orgs {
95-
oldMap[org] = true
96-
}
97-
newMap := make(map[string]bool)
98-
for _, org := range orgs {
99-
newMap[org] = true
100-
if !oldMap[org] {
101-
added = append(added, org)
102-
}
103-
}
104-
for _, org := range sm.orgs {
105-
if !newMap[org] {
106-
removed = append(removed, org)
107-
}
63+
if len(orgs) == 0 {
64+
slog.Debug("[SPRINKLER] No organizations provided")
65+
return
10866
}
10967

110-
slog.Info("[SPRINKLER] Organization list changed",
111-
"previous", sm.orgs,
112-
"new", orgs,
113-
"added", added,
114-
"removed", removed)
115-
68+
slog.Info("[SPRINKLER] Setting organizations", "orgs", orgs, "count", len(orgs))
11669
sm.orgs = make([]string, len(orgs))
11770
copy(sm.orgs, orgs)
118-
119-
// Restart if running
120-
if sm.isRunning {
121-
slog.Info("[SPRINKLER] Restarting monitor with new org list")
122-
sm.stop()
123-
sm.ctx, sm.cancel = context.WithCancel(context.Background())
124-
if err := sm.start(); err != nil {
125-
slog.Error("[SPRINKLER] Failed to restart", "error", err)
126-
}
127-
}
12871
}
12972

13073
// start begins monitoring for PR events across all user orgs.
@@ -318,8 +261,7 @@ func (sm *sprinklerMonitor) handleEvent(event client.Event) {
318261
func (sm *sprinklerMonitor) processEvents() {
319262
defer func() {
320263
if r := recover(); r != nil {
321-
slog.Error("[SPRINKLER] Event processor panic",
322-
"panic", r)
264+
slog.Error("[SPRINKLER] Event processor panic", "panic", r)
323265
}
324266
}()
325267

@@ -328,17 +270,7 @@ func (sm *sprinklerMonitor) processEvents() {
328270
case <-sm.ctx.Done():
329271
return
330272
case prURL := <-sm.eventChan:
331-
// Process each event with panic recovery
332-
func() {
333-
defer func() {
334-
if r := recover(); r != nil {
335-
slog.Error("[SPRINKLER] Event processing panic",
336-
"panic", r,
337-
"url", prURL)
338-
}
339-
}()
340-
sm.checkAndNotify(prURL)
341-
}()
273+
sm.checkAndNotify(prURL)
342274
}
343275
}
344276
}

go.sum

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,11 @@
11
git.sr.ht/~jackmordaunt/go-toast v1.1.2 h1:/yrfI55LRt1M7H1vkaw+NaH1+L1CDxrqDltwm5euVuE=
22
git.sr.ht/~jackmordaunt/go-toast v1.1.2/go.mod h1:jA4OqHKTQ4AFBdwrSnwnskUIIS3HYzlJSgdzCKqfavo=
3-
github.com/codeGROOVE-dev/prx v0.0.0-20250923100916-d2b60be50274 h1:9eLzQdOaQEn30279ai3YjNdJOM/efbcYanWC9juAJ+M=
4-
github.com/codeGROOVE-dev/prx v0.0.0-20250923100916-d2b60be50274/go.mod h1:7qLbi18baOyS8yO/6/64SBIqtyzSzLFdsDST15NPH3w=
53
github.com/codeGROOVE-dev/prx v0.0.0-20251001143458-17e6b58fb46c h1:/rrjFoqwFqKNzc1f14vQt6QJ9U5tQ4Uh6U8hgixkSqw=
64
github.com/codeGROOVE-dev/prx v0.0.0-20251001143458-17e6b58fb46c/go.mod h1:7qLbi18baOyS8yO/6/64SBIqtyzSzLFdsDST15NPH3w=
75
github.com/codeGROOVE-dev/retry v1.2.0 h1:xYpYPX2PQZmdHwuiQAGGzsBm392xIMl4nfMEFApQnu8=
86
github.com/codeGROOVE-dev/retry v1.2.0/go.mod h1:8OgefgV1XP7lzX2PdKlCXILsYKuz6b4ZpHa/20iLi8E=
9-
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251001125233-5fa6f0ff4582 h1:IPCaNGRWdyMZKyjnjv+wdSmPmOZtKFD6SVaha5DuCqk=
10-
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251001125233-5fa6f0ff4582/go.mod h1:RZ/Te7HkY5upHQlnmf3kV4GHVM0R8AK3U+yPItCZAoQ=
11-
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251001144140-ed20651ca4e9 h1:Nuyy0vMl6YD96N6WwZeqClPa/VlaILJYZoG50ezOAHw=
12-
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251001144140-ed20651ca4e9/go.mod h1:RZ/Te7HkY5upHQlnmf3kV4GHVM0R8AK3U+yPItCZAoQ=
137
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251001154245-068712aa969d h1:tQX67dAzyWVAaNe0EhYpj/AmWZo1Wwhaah6KVj7M3qs=
148
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251001154245-068712aa969d/go.mod h1:RZ/Te7HkY5upHQlnmf3kV4GHVM0R8AK3U+yPItCZAoQ=
15-
github.com/codeGROOVE-dev/turnclient v0.0.0-20250922145707-664c2dcdf5b8 h1:3088TLJGgxzjM/bR1gafKQ609NMkBNlZe1Fd5SnRrrY=
16-
github.com/codeGROOVE-dev/turnclient v0.0.0-20250922145707-664c2dcdf5b8/go.mod h1:7lBF4vS6T+D1rNjmJ+CNVrXALQvdwNfBVEy7vhIQtYk=
179
github.com/codeGROOVE-dev/turnclient v0.0.0-20251001151440-a58eb9b17826 h1:ly6n4spiC6r0IOMl8QfZjv+qUnMHLvo/qErGPVMV3IE=
1810
github.com/codeGROOVE-dev/turnclient v0.0.0-20251001151440-a58eb9b17826/go.mod h1:JXk9gT6Qb496lnTcgpk9h917XaREGa+t6Kvg0YHAQJY=
1911
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

0 commit comments

Comments
 (0)