diff --git a/Taskfile.yaml b/Taskfile.yaml index 8a5d8dda1b13bcc1fefb9d7cfd1a7c08c53f6a0f..f9c20cd63e64fea25ce2bbd7f8a6982170dbe02e 100644 --- a/Taskfile.yaml +++ b/Taskfile.yaml @@ -123,3 +123,10 @@ tasks: cmds: - git tag -d nightly || true - git fetch --tags + + deps: + desc: Update Fantasy and Catwalk + cmds: + - go get charm.land/fantasy + - go get github.com/charmbracelet/catwalk + - go mod tidy diff --git a/go.mod b/go.mod index e25f3b9057e71f050845215d0ca2a4a4c976975d..c564d9c39535f892c1a96eacacd052efe78f0bf3 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ go 1.25.5 require ( charm.land/bubbles/v2 v2.0.0-rc.1 - charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251210233456-3f036811208b - charm.land/fantasy v0.5.1 + charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251211195757-9ed8357ca936 + charm.land/fantasy v0.5.2 charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971 charm.land/x/vcr v0.1.1 github.com/JohannesKaufmann/html-to-markdown v1.6.0 @@ -16,13 +16,13 @@ require ( github.com/aymanbagabas/go-udiff v0.3.1 github.com/bmatcuk/doublestar/v4 v4.9.1 github.com/charlievieth/fastwalk v1.0.14 - github.com/charmbracelet/catwalk v0.9.7-0.20251208190755-350e2a004c74 - github.com/charmbracelet/colorprofile v0.3.3 + github.com/charmbracelet/catwalk v0.10.1 + github.com/charmbracelet/colorprofile v0.4.1 github.com/charmbracelet/fang v0.4.4 github.com/charmbracelet/glamour/v2 v2.0.0-20251106195642-800eb8175930 github.com/charmbracelet/log/v2 v2.0.0-20251106192421-eb64aaa963a0 - github.com/charmbracelet/ultraviolet v0.0.0-20251210233322-b32b4bd64885 - github.com/charmbracelet/x/ansi v0.11.2 + github.com/charmbracelet/ultraviolet v0.0.0-20251211195649-3a51f4048cae + github.com/charmbracelet/x/ansi v0.11.3 github.com/charmbracelet/x/exp/charmtone v0.0.0-20250708181618-a60a724ba6c3 github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f github.com/charmbracelet/x/exp/ordered v0.1.0 @@ -91,10 +91,11 @@ require ( github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/charmbracelet/anthropic-sdk-go v0.0.0-20251024181547-21d6f3d9a904 // indirect + github.com/charmbracelet/x/etag v0.2.0 // indirect github.com/charmbracelet/x/json v0.2.0 // indirect github.com/charmbracelet/x/termios v0.1.1 // indirect github.com/charmbracelet/x/windows v0.2.2 // indirect - github.com/clipperhouse/displaywidth v0.6.0 // indirect + github.com/clipperhouse/displaywidth v0.6.1 // indirect github.com/clipperhouse/stringish v0.1.1 // indirect github.com/clipperhouse/uax29/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/go.sum b/go.sum index 4c6ea4bdcb648fce69281d1860f09255f8c8b5d9..352c35f6cc90d864120c87ec9141cc4c007c20a9 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,9 @@ charm.land/bubbles/v2 v2.0.0-rc.1 h1:EiIFVAc3Zi/yY86td+79mPhHR7AqZ1OxF+6ztpOCRaM= charm.land/bubbles/v2 v2.0.0-rc.1/go.mod h1:5AbN6cEd/47gkEf8TgiQ2O3RZ5QxMS14l9W+7F9fPC4= -charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251210233456-3f036811208b h1:naRWnYU7AQfM7yaPiNQ9JfI0VcikCcO7CIFultZO4lA= -charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251210233456-3f036811208b/go.mod h1:MxP/RlEJqSMLaCCFtqiV1yqlXDq1chrbjhr7jj653ug= -charm.land/fantasy v0.5.1 h1:Svi/UpI4/DwVjTqNYceDXoJJYn6SVEM5dnLH92UBiEs= -charm.land/fantasy v0.5.1/go.mod h1:SPOsnIlkBKnhw2Wnasv+wZ82EmCMIGesx0je3tgR6+M= +charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251211195757-9ed8357ca936 h1:xXvpr/Eqb4Z15Nc+8Z6WDtkFfuGSSyxl0SHMOStlmKU= +charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251211195757-9ed8357ca936/go.mod h1:DEQeUhIWWTiVSb2gDgjzvuPIW4Pz8eSMlbfyxzEMopI= +charm.land/fantasy v0.5.2 h1:4zlNsIcsyF3Jr+1onEuhHqZRzuH1LlxBle/gInS00QY= +charm.land/fantasy v0.5.2/go.mod h1:SPOsnIlkBKnhw2Wnasv+wZ82EmCMIGesx0je3tgR6+M= charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971 h1:xZFcNsJMiIDbFtWRyDmkKNk1sjojfaom4Zoe0cyH/8c= charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971/go.mod h1:i61Y3FmdbcBNSKa+pKB3DaE4uVQmBLMs/xlvRyHcXAE= charm.land/x/vcr v0.1.1 h1:PXCFMUG0rPtyk35rhfzYCJEduOzWXCIbrXTFq4OF/9Q= @@ -88,20 +88,22 @@ github.com/charlievieth/fastwalk v1.0.14 h1:3Eh5uaFGwHZd8EGwTjJnSpBkfwfsak9h6ICg github.com/charlievieth/fastwalk v1.0.14/go.mod h1:diVcUreiU1aQ4/Wu3NbxxH4/KYdKpLDojrQ1Bb2KgNY= github.com/charmbracelet/anthropic-sdk-go v0.0.0-20251024181547-21d6f3d9a904 h1:rwLdEpG9wE6kL69KkEKDiWprO8pQOZHZXeod6+9K+mw= github.com/charmbracelet/anthropic-sdk-go v0.0.0-20251024181547-21d6f3d9a904/go.mod h1:8TIYxZxsuCqqeJ0lga/b91tBwrbjoHDC66Sq5t8N2R4= -github.com/charmbracelet/catwalk v0.9.7-0.20251208190755-350e2a004c74 h1:pJI8ivIgSWOeCNnZFXeZzL6px1vZVS3LU4Cqk3Gx37I= -github.com/charmbracelet/catwalk v0.9.7-0.20251208190755-350e2a004c74/go.mod h1:ReU4SdrLfe63jkEjWMdX2wlZMV3k9r11oQAmzN0m+KY= -github.com/charmbracelet/colorprofile v0.3.3 h1:DjJzJtLP6/NZ8p7Cgjno0CKGr7wwRJGxWUwh2IyhfAI= -github.com/charmbracelet/colorprofile v0.3.3/go.mod h1:nB1FugsAbzq284eJcjfah2nhdSLppN2NqvfotkfRYP4= +github.com/charmbracelet/catwalk v0.10.1 h1:Yov/bEni8eDU+uP68YuqgHo0UW1sDozVHwHdlWbklJ4= +github.com/charmbracelet/catwalk v0.10.1/go.mod h1:qg+Yl9oaZTkTvRscqbxfttzOFQ4v0pOT5XwC7b5O0NQ= +github.com/charmbracelet/colorprofile v0.4.1 h1:a1lO03qTrSIRaK8c3JRxJDZOvhvIeSco3ej+ngLk1kk= +github.com/charmbracelet/colorprofile v0.4.1/go.mod h1:U1d9Dljmdf9DLegaJ0nGZNJvoXAhayhmidOdcBwAvKk= github.com/charmbracelet/fang v0.4.4 h1:G4qKxF6or/eTPgmAolwPuRNyuci3hTUGGX1rj1YkHJY= github.com/charmbracelet/fang v0.4.4/go.mod h1:P5/DNb9DddQ0Z0dbc0P3ol4/ix5Po7Ofr2KMBfAqoCo= github.com/charmbracelet/glamour/v2 v2.0.0-20251106195642-800eb8175930 h1:+47Z2jVAWPSLGjPRbfZizW3OpcAYsu7EUk2DR+66FyM= github.com/charmbracelet/glamour/v2 v2.0.0-20251106195642-800eb8175930/go.mod h1:izs11tnkYaT3DTEH2E0V/lCb18VGZ7k9HLYEGuvgXGA= github.com/charmbracelet/log/v2 v2.0.0-20251106192421-eb64aaa963a0 h1:lxHzxsHd4P7o7+5D5OcEItYkQ1xY3ovNg8Dc5ftd3rI= github.com/charmbracelet/log/v2 v2.0.0-20251106192421-eb64aaa963a0/go.mod h1:Q7oMtlboDPnnrYiJDXNwdWmJblOmuOnycPKczlVju6I= -github.com/charmbracelet/ultraviolet v0.0.0-20251210233322-b32b4bd64885 h1:L+Gmsk8Op+cnW2MSNm3F+iVa4SK5VOTHX0CV06tCxkE= -github.com/charmbracelet/ultraviolet v0.0.0-20251210233322-b32b4bd64885/go.mod h1:Y6kE2GzHfkyQQVCSL9r2hwokSrIlHGzZG+71+wDYSZI= -github.com/charmbracelet/x/ansi v0.11.2 h1:XAG3FSjiVtFvgEgGrNBkCNNYrsucAt8c6bfxHyROLLs= -github.com/charmbracelet/x/ansi v0.11.2/go.mod h1:9tY2bzX5SiJCU0iWyskjBeI2BRQfvPqI+J760Mjf+Rg= +github.com/charmbracelet/ultraviolet v0.0.0-20251211195649-3a51f4048cae h1:njFQJDtNiWgKXHmYruigCG+9q5Ptq6rWW400UvG/Tpc= +github.com/charmbracelet/ultraviolet v0.0.0-20251211195649-3a51f4048cae/go.mod h1:VWATWLRwYP06VYCEur7FsNR2B1xAo7Y+xl1PTbd1ePc= +github.com/charmbracelet/x/ansi v0.11.3 h1:6DcVaqWI82BBVM/atTyq6yBoRLZFBsnoDoX9GCu2YOI= +github.com/charmbracelet/x/ansi v0.11.3/go.mod h1:yI7Zslym9tCJcedxz5+WBq+eUGMJT0bM06Fqy1/Y4dI= +github.com/charmbracelet/x/etag v0.2.0 h1:Euj1VkheoHfTYA9y+TCwkeXF/hN8Fb9l4LqZl79pt04= +github.com/charmbracelet/x/etag v0.2.0/go.mod h1:C1B7/bsgvzzxpfu0Rabbd+rTHJa5TmC/qgTseCf6DF0= github.com/charmbracelet/x/exp/charmtone v0.0.0-20250708181618-a60a724ba6c3 h1:1xwHZg6eMZ9Wv5TE1UGub6ARubyOd1Lo5kPUI/6VL50= github.com/charmbracelet/x/exp/charmtone v0.0.0-20250708181618-a60a724ba6c3/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0= github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f h1:pk6gmGpCE7F3FcjaOEKYriCvpmIN4+6OS/RD0vm4uIA= @@ -120,8 +122,8 @@ github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8 github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo= github.com/charmbracelet/x/windows v0.2.2 h1:IofanmuvaxnKHuV04sC0eBy/smG6kIKrWG2/jYn2GuM= github.com/charmbracelet/x/windows v0.2.2/go.mod h1:/8XtdKZzedat74NQFn0NGlGL4soHB0YQZrETF96h75k= -github.com/clipperhouse/displaywidth v0.6.0 h1:k32vueaksef9WIKCNcoqRNyKbyvkvkysNYnAWz2fN4s= -github.com/clipperhouse/displaywidth v0.6.0/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o= +github.com/clipperhouse/displaywidth v0.6.1 h1:/zMlAezfDzT2xy6acHBzwIfyu2ic0hgkT83UX5EY2gY= +github.com/clipperhouse/displaywidth v0.6.1/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o= github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= diff --git a/internal/agent/agent_test.go b/internal/agent/agent_test.go index 0a513b914310941537c64d5e3e72eee814597528..ca5bb10dca1bc1096429e99dc217389d30e90248 100644 --- a/internal/agent/agent_test.go +++ b/internal/agent/agent_test.go @@ -453,6 +453,10 @@ func TestCoderAgent(t *testing.T) { require.Contains(t, string(content), "Hello, Crush!", "Expected file to contain 'Hello, Crush!'") }) t.Run("sourcegraph tool", func(t *testing.T) { + if runtime.GOOS == "darwin" { + t.Skip("skipping flacky test on macos for now") + } + agent, env := setupAgent(t, pair) session, err := env.sessions.Create(t.Context(), "New Session") diff --git a/internal/config/load.go b/internal/config/load.go index 8f3ad171d2ae2e196584223e55d24d42b200e073..14dd0f8792bcbabaa865efe47e0db5e721cf3827 100644 --- a/internal/config/load.go +++ b/internal/config/load.go @@ -14,6 +14,7 @@ import ( "slices" "strconv" "strings" + "testing" "github.com/charmbracelet/catwalk/pkg/catwalk" "github.com/charmbracelet/crush/internal/csync" @@ -672,7 +673,7 @@ func hasAWSCredentials(env env.Env) bool { return true } - if _, err := os.Stat(filepath.Join(home.Dir(), ".aws/credentials")); err == nil { + if _, err := os.Stat(filepath.Join(home.Dir(), ".aws/credentials")); err == nil && !testing.Testing() { return true } diff --git a/internal/env/env.go b/internal/env/env.go index 24d44d10fca5a374732283d0aca4ddc8166b879b..fa7546f8ebd28ed0c44528f7d9b8ae4b03db8b89 100644 --- a/internal/env/env.go +++ b/internal/env/env.go @@ -1,6 +1,9 @@ package env -import "os" +import ( + "os" + "testing" +) type Env interface { Get(key string) string @@ -23,6 +26,9 @@ func (o *osEnv) Env() []string { } func New() Env { + if testing.Testing() { + return NewFromMap(nil) + } return &osEnv{} } diff --git a/internal/env/env_test.go b/internal/env/env_test.go index 6bd323e0cb169c2fd06397ed7b015de98145b105..a86b8f4140a57d564797f260b24262472c9ad058 100644 --- a/internal/env/env_test.go +++ b/internal/env/env_test.go @@ -8,7 +8,7 @@ import ( ) func TestOsEnv_Get(t *testing.T) { - env := New() + env := &osEnv{} // Test getting an existing environment variable t.Setenv("TEST_VAR", "test_value") @@ -22,7 +22,7 @@ func TestOsEnv_Get(t *testing.T) { } func TestOsEnv_Env(t *testing.T) { - env := New() + env := &osEnv{} envVars := env.Env() diff --git a/internal/shell/background_test.go b/internal/shell/background_test.go index 8d0ba200519887765ba33e2d79a2b78fe6edd7d9..5149861d94e457e8a78650c48d9c6765a57d369e 100644 --- a/internal/shell/background_test.go +++ b/internal/shell/background_test.go @@ -2,6 +2,7 @@ package shell import ( "context" + "runtime" "strings" "testing" "time" @@ -171,6 +172,10 @@ func TestBackgroundShell_WithBlockFuncs(t *testing.T) { } func TestBackgroundShellManager_List(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("skipping flacky test on windows") + } + t.Parallel() ctx := context.Background()