detached be59327

Merge pull request #2 from bnema/ci-fix

ci: run checks in an Arch container, once per change
commit
be59327437f2725b1b8ed6b1ec5053e6c7fd8715
author
bnema · · 2026-09-26 17:10 UTC
committer
GitHub · · 2026-09-26 17:10 UTC
merge of
7ff5dde + cdc6474 · diff against the first parent
signature
GPG UnverifiedB5690EEEBB952194 The key is unknown
3 files · +44 -9
M .github/workflows/ci.yml +29 -7
@@ -1,17 +1,39 @@
11 name: CI
2-on: [push, pull_request]
2+on:
3+ push:
4+ branches: [main]
5+ pull_request:
6+concurrency:
7+ group: ci-${{ github.ref }}
8+ cancel-in-progress: true
39 jobs:
10+ # Arch matches the development system: libwayland, glslc and Go versions
11+ # change protocol behavior and SPIR-V bytes.
412 check:
513 runs-on: ubuntu-latest
14+ container:
15+ image: archlinux:latest
16+ # An init process reaps killed children, as on a real session.
17+ options: --init
18+ env:
19+ XDG_RUNTIME_DIR: /tmp/xdg-runtime
620 steps:
21+ # Libraries loaded at runtime through purego; vulkan-swrast (lavapipe)
22+ # gives tests a Vulkan device; gcc is for the race detector.
23+ - run: >-
24+ pacman -Syu --noconfirm --needed
25+ git go make gcc shaderc wayland libxkbcommon libinput seatd
26+ vulkan-icd-loader vulkan-swrast
727 - uses: actions/checkout@v4
8- - uses: actions/setup-go@v5
9- with:
10- go-version: '1.27'
11- - run: go install github.com/bnema/hexcheck@latest
12- - run: go install github.com/vektra/mockery/v3@v3.8.0
28+ - run: |
29+ git config --global --add safe.directory "$GITHUB_WORKSPACE"
30+ install -d -m 700 "$XDG_RUNTIME_DIR"
31+ - run: |
32+ go install github.com/bnema/hexcheck/cmd/hexcheck@v0.2.0
33+ go install github.com/vektra/mockery/v3@v3.8.0
34+ go install honnef.co/go/tools/cmd/staticcheck@latest
1335 - run: make check
1436 - run: make race
1537 - run: make mocks-check
16- - run: sudo apt-get install -y glslc
1738 - run: make spv-check
39+ - run: ~/go/bin/staticcheck ./...
@@ -1,17 +1,39 @@
1 name: CI1 name: CI
2-on: [push, pull_request]2+on:
3+ push:
4+ branches: [main]
5+ pull_request:
6+concurrency:
7+ group: ci-${{ github.ref }}
8+ cancel-in-progress: true
3 jobs:9 jobs:
10+ # Arch matches the development system: libwayland, glslc and Go versions
11+ # change protocol behavior and SPIR-V bytes.
4 check:12 check:
5 runs-on: ubuntu-latest13 runs-on: ubuntu-latest
14+ container:
15+ image: archlinux:latest
16+ # An init process reaps killed children, as on a real session.
17+ options: --init
18+ env:
19+ XDG_RUNTIME_DIR: /tmp/xdg-runtime
6 steps:20 steps:
21+ # Libraries loaded at runtime through purego; vulkan-swrast (lavapipe)
22+ # gives tests a Vulkan device; gcc is for the race detector.
23+ - run: >-
24+ pacman -Syu --noconfirm --needed
25+ git go make gcc shaderc wayland libxkbcommon libinput seatd
26+ vulkan-icd-loader vulkan-swrast
7 - uses: actions/checkout@v427 - uses: actions/checkout@v4
8- - uses: actions/setup-go@v528+ - run: |
9- with:29+ git config --global --add safe.directory "$GITHUB_WORKSPACE"
10- go-version: '1.27'30+ install -d -m 700 "$XDG_RUNTIME_DIR"
11- - run: go install github.com/bnema/hexcheck@latest31+ - run: |
12- - run: go install github.com/vektra/mockery/v3@v3.8.032+ go install github.com/bnema/hexcheck/cmd/hexcheck@v0.2.0
33+ go install github.com/vektra/mockery/v3@v3.8.0
34+ go install honnef.co/go/tools/cmd/staticcheck@latest
13 - run: make check35 - run: make check
14 - run: make race36 - run: make race
15 - run: make mocks-check37 - run: make mocks-check
16- - run: sudo apt-get install -y glslc
17 - run: make spv-check38 - run: make spv-check
39+ - run: ~/go/bin/staticcheck ./...
M internal/adapters/wayland/clipboard_test.go +9 -1
@@ -1,6 +1,7 @@
11 package wayland
22
33 import (
4+ "errors"
45 "testing"
56 "time"
67
@@ -180,7 +181,14 @@ func TestClipboardFollowsFocus(t *testing.T) {
180181 }
181182 }
182183 buf := make([]byte, 16)
183- n, _ := unix.Read(fds[0], buf)
184+ // Go runtime signals (preemption) can interrupt the raw read: retry.
185+ n, err := unix.Read(fds[0], buf)
186+ for errors.Is(err, unix.EINTR) {
187+ n, err = unix.Read(fds[0], buf)
188+ }
189+ if err != nil {
190+ t.Fatal(err)
191+ }
184192 if string(buf[:n]) != "pasted" {
185193 t.Fatalf("pasted %q", buf[:n])
186194 }
@@ -1,6 +1,7 @@
1 package wayland1 package wayland
2 2
3 import (3 import (
4+ "errors"
4 "testing"5 "testing"
5 "time"6 "time"
6 7
@@ -180,7 +181,14 @@ func TestClipboardFollowsFocus(t *testing.T) {
180 }181 }
181 }182 }
182 buf := make([]byte, 16)183 buf := make([]byte, 16)
183- n, _ := unix.Read(fds[0], buf)184+ // Go runtime signals (preemption) can interrupt the raw read: retry.
185+ n, err := unix.Read(fds[0], buf)
186+ for errors.Is(err, unix.EINTR) {
187+ n, err = unix.Read(fds[0], buf)
188+ }
189+ if err != nil {
190+ t.Fatal(err)
191+ }
184 if string(buf[:n]) != "pasted" {192 if string(buf[:n]) != "pasted" {
185 t.Fatalf("pasted %q", buf[:n])193 t.Fatalf("pasted %q", buf[:n])
186 }194 }
M internal/adapters/xwayland/xwayland_test.go +6 -1
@@ -80,7 +80,12 @@ func TestRunDropsClientsOfFailedSatellite(t *testing.T) {
8080 if err := unix.SetsockoptTimeval(fd, unix.SOL_SOCKET, unix.SO_RCVTIMEO, &unix.Timeval{Sec: 3}); err != nil {
8181 t.Fatal(err)
8282 }
83- if n, err := unix.Read(fd, make([]byte, 1)); n != 0 || err != nil {
83+ // Go runtime signals (preemption) can interrupt the raw read: retry.
84+ n, err := unix.Read(fd, make([]byte, 1))
85+ for errors.Is(err, unix.EINTR) {
86+ n, err = unix.Read(fd, make([]byte, 1))
87+ }
88+ if n != 0 || err != nil {
8489 t.Fatalf("read %d %v, want EOF", n, err)
8590 }
8691 cancel()
@@ -80,7 +80,12 @@ func TestRunDropsClientsOfFailedSatellite(t *testing.T) {
80 if err := unix.SetsockoptTimeval(fd, unix.SOL_SOCKET, unix.SO_RCVTIMEO, &unix.Timeval{Sec: 3}); err != nil {80 if err := unix.SetsockoptTimeval(fd, unix.SOL_SOCKET, unix.SO_RCVTIMEO, &unix.Timeval{Sec: 3}); err != nil {
81 t.Fatal(err)81 t.Fatal(err)
82 }82 }
83- if n, err := unix.Read(fd, make([]byte, 1)); n != 0 || err != nil {83+ // Go runtime signals (preemption) can interrupt the raw read: retry.
84+ n, err := unix.Read(fd, make([]byte, 1))
85+ for errors.Is(err, unix.EINTR) {
86+ n, err = unix.Read(fd, make([]byte, 1))
87+ }
88+ if n != 0 || err != nil {
84 t.Fatalf("read %d %v, want EOF", n, err)89 t.Fatalf("read %d %v, want EOF", n, err)
85 }90 }
86 cancel()91 cancel()

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 23

Tags 10

↑↓ moveenter openesc close