Skip to content

Commit a3ee9e0

Browse files
committed
Try to test against Windows
Adds Windows to the test matrix. We'll see what breaks. For creack/pty, we need to use the currently-unmerged change in `creack/pty#155` for Windows support.
1 parent 2670f5e commit a3ee9e0

File tree

10 files changed

+30
-14
lines changed

10 files changed

+30
-14
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
kind: Added
2+
body: Windows support.
3+
time: 2024-09-07T16:16:36.18073-07:00

.gitattributes

+9
Original file line numberDiff line numberDiff line change
@@ -1 +1,10 @@
1+
# Don't magically change line endings by default,
2+
# but always use LF in test scripts.
3+
#
4+
# Ref:
5+
# - https://github.com/golang/go/blob/807e01db4840e25e4d98911b28a8fa54244b8dfa/.gitattributes
6+
# - https://github.com/rogpeppe/go-internal/pull/106
7+
* -text
8+
*.txt text eol=lf
9+
110
*.png filter=lfs diff=lfs merge=lfs -text

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
name: Test (${{ matrix.os}})
4141
strategy:
4242
matrix:
43-
os: ["ubuntu-latest"] # TODO: ["windows-latest"]
43+
os: ["ubuntu-latest", "windows-latest"]
4444
steps:
4545
- uses: actions/checkout@v4
4646
- name: Set up Go

.goreleaser.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ builds:
66
- CGO_ENABLED=0
77
main: .
88
binary: gs
9-
goos: [darwin, linux]
9+
goos: [darwin, linux, windows]
1010
goarch: [amd64, arm64, arm]
1111
goarm: [5, 6, 7]
1212
ldflags: '-s -w -X main._version={{.Version}}'
1313
ignore:
1414
- goos: darwin
1515
goarch: arm
16+
- goos: windows
17+
goarch: arm
1618
flags:
1719
- -trimpath
1820

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/charmbracelet/bubbletea v1.1.0
1010
github.com/charmbracelet/lipgloss v0.13.0
1111
github.com/charmbracelet/log v0.4.0
12-
github.com/creack/pty v1.1.23
12+
github.com/creack/pty/v2 v2.0.0-20231028221118-e9c1f000f465
1313
github.com/dustin/go-humanize v1.0.1
1414
github.com/mattn/go-isatty v0.0.20
1515
github.com/rogpeppe/go-internal v1.12.0

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ github.com/charmbracelet/x/ansi v0.2.3 h1:VfFN0NUpcjBRd4DnKfRaIRo53KRgey/nhOoEqo
2424
github.com/charmbracelet/x/ansi v0.2.3/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
2525
github.com/charmbracelet/x/term v0.2.0 h1:cNB9Ot9q8I711MyZ7myUR5HFWL/lc3OpU8jZ4hwm0x0=
2626
github.com/charmbracelet/x/term v0.2.0/go.mod h1:GVxgxAbjUrmpvIINHIQnJJKpMlHiZ4cktEQCN6GWyF0=
27-
github.com/creack/pty v1.1.23 h1:4M6+isWdcStXEf15G/RbrMPOQj1dZ7HPZCGwE4kOeP0=
28-
github.com/creack/pty v1.1.23/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE=
27+
github.com/creack/pty/v2 v2.0.0-20231028221118-e9c1f000f465 h1:KQ+iWxxc2qYyfK3GGrjNJ73GvDAd9Ecz8pK4FpdtI6Y=
28+
github.com/creack/pty/v2 v2.0.0-20231028221118-e9c1f000f465/go.mod h1:zTYJ0iXAFhiKeguJdMR/LEecltLOG5Wz3lo1lIi0CLU=
2929
github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE=
3030
github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec=
3131
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=

internal/git/gittest/config.go

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ func DefaultConfig() Config {
1111
return Config{
1212
"init.defaultBranch": "main",
1313
"alias.graph": "log --graph --decorate --oneline",
14+
"core.autocrlf": "false",
1415
}
1516
}
1617

internal/termtest/with_term.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
"sync"
1818
"time"
1919

20-
"github.com/creack/pty"
20+
"github.com/creack/pty/v2"
2121
"github.com/vito/midterm"
2222
)
2323

@@ -254,14 +254,14 @@ func WithTerm() (exitCode int) {
254254
type terminalEmulator struct {
255255
mu sync.Mutex
256256
cmd *exec.Cmd
257-
pty *os.File
257+
pty pty.Pty
258258
logf func(string, ...any)
259259

260260
term *midterm.Terminal
261261
}
262262

263263
func newVT100Emulator(
264-
f *os.File,
264+
f pty.Pty,
265265
cmd *exec.Cmd,
266266
rows, cols int,
267267
autoResize bool,
@@ -317,19 +317,19 @@ func (m *terminalEmulator) Close() error {
317317
select {
318318
case waitErr = <-waitErrc:
319319
// ok
320-
case <-time.After(3 * time.Second):
320+
case <-time.After(5 * time.Second):
321321
waitErr = fmt.Errorf("timeout waiting for %v", m.cmd)
322322
_ = m.cmd.Process.Kill()
323323
}
324324

325-
closeErr := m.pty.Close()
326-
327-
return errors.Join(waitErr, closeErr, writeErr)
325+
// On Windows, pty.Close may fail with invalid handle or access denied.
326+
// It's not really a problem, so we ignore the error.
327+
_ = m.pty.Close()
328+
return errors.Join(waitErr, writeErr)
328329
}
329330

330331
func (m *terminalEmulator) FeedKeys(s string) error {
331332
_, err := io.WriteString(m.pty, s)
332-
_ = m.pty.Sync()
333333
return err
334334
}
335335

testdata/script/auth_insecure_storage.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ gs auth login --forge=shamhub
4141
cmp stderr $WORK/golden/login-secure.stderr
4242

4343
-- golden/login.stderr --
44-
WRN Storing secrets in plain text at $WORK/home/.config/git-spice/secrets.json. Be careful!
44+
WRN Storing secrets in plain text at $WORK${/}home${/}.config${/}git-spice${/}secrets.json. Be careful!
4545
INF shamhub: successfully logged in
4646
-- golden/login-secure.stderr --
4747
INF shamhub: successfully logged in

testdata/script/branch_submit_remote_prompt.txt

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ Contents of feature1
3636
await Please select a remote
3737
snapshot dialog
3838
feed \r
39+
await
3940

4041
-- golden/prompt.txt --
4142
### dialog ###

0 commit comments

Comments
 (0)