Skip to content

Commit 3144789

Browse files
committed
Add macOS universal build for keylightd-tray and update systray
1 parent c6575b8 commit 3144789

6 files changed

Lines changed: 71 additions & 28 deletions

File tree

.github/workflows/build-release.yml

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,9 @@ jobs:
145145
- goos: linux
146146
goarch: arm64
147147
os: ubuntu-24.04-arm
148+
- goos: darwin
149+
goarch: universal
150+
os: macos-latest
148151
steps:
149152
- name: Checkout code
150153
uses: actions/checkout@v5
@@ -166,22 +169,39 @@ jobs:
166169
run: go install github.com/wailsapp/wails/v2/cmd/wails@latest
167170

168171
- name: Install Linux dependencies
172+
if: matrix.goos == 'linux'
169173
run: |
170174
sudo apt-get update
171175
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev
172176
173-
- name: Build keylightd-tray
177+
- name: Build keylightd-tray (Linux)
178+
if: matrix.goos == 'linux'
174179
working-directory: contrib/keylightd-tray
175180
run: |
176181
wails build -tags webkit2_41,desktop -ldflags "-s -w -X main.version=${{ needs.prepare.outputs.version }} -X main.commit=${{ github.sha }} -X main.buildDate=$(date -u +%Y-%m-%dT%H:%M:%SZ)"
177182
178-
- name: Create archive
183+
- name: Build keylightd-tray (macOS)
184+
if: matrix.goos == 'darwin'
185+
working-directory: contrib/keylightd-tray
186+
run: |
187+
wails build -platform darwin/universal -ldflags "-s -w -X main.version=${{ needs.prepare.outputs.version }} -X main.commit=${{ github.sha }} -X main.buildDate=$(date -u +%Y-%m-%dT%H:%M:%SZ)"
188+
189+
- name: Create archive (Linux)
190+
if: matrix.goos == 'linux'
179191
run: |
180192
mkdir -p dist
181193
tar -czvf dist/keylightd-tray_v${{ needs.prepare.outputs.version }}_${{ matrix.goos }}_${{ matrix.goarch }}.tar.gz \
182194
-C contrib/keylightd-tray/build/bin keylightd-tray \
183195
-C ${{ github.workspace }} LICENSE README.md
184196
197+
- name: Create archive (macOS)
198+
if: matrix.goos == 'darwin'
199+
run: |
200+
mkdir -p dist
201+
tar -czvf dist/keylightd-tray_v${{ needs.prepare.outputs.version }}_${{ matrix.goos }}_${{ matrix.goarch }}.tar.gz \
202+
-C contrib/keylightd-tray/build/bin keylightd-tray.app \
203+
-C ${{ github.workspace }} LICENSE README.md
204+
185205
- name: Upload artifact
186206
uses: actions/upload-artifact@v5
187207
with:
@@ -479,7 +499,8 @@ jobs:
479499
SHA256_LINUX_AMD64=$(grep "keylightd_${VERSION}_linux_amd64.tar.gz" "$CHECKSUM_FILE" | awk '{print $1}')
480500
SHA256_LINUX_ARM64=$(grep "keylightd_${VERSION}_linux_arm64.tar.gz" "$CHECKSUM_FILE" | awk '{print $1}')
481501
482-
# keylightd-tray checksums (Linux only)
502+
# keylightd-tray checksums
503+
SHA256_TRAY_DARWIN_UNIVERSAL=$(grep "keylightd-tray_v${VERSION}_darwin_universal.tar.gz" "$CHECKSUM_FILE" | awk '{print $1}')
483504
SHA256_TRAY_LINUX_AMD64=$(grep "keylightd-tray_v${VERSION}_linux_amd64.tar.gz" "$CHECKSUM_FILE" | awk '{print $1}')
484505
SHA256_TRAY_LINUX_ARM64=$(grep "keylightd-tray_v${VERSION}_linux_arm64.tar.gz" "$CHECKSUM_FILE" | awk '{print $1}')
485506
@@ -489,20 +510,23 @@ jobs:
489510
SHA256_SBOM_LINUX_AMD64=$(grep "keylightd_${VERSION}_linux_amd64_sbom.spdx.json" "$CHECKSUM_FILE" | awk '{print $1}')
490511
SHA256_SBOM_LINUX_ARM64=$(grep "keylightd_${VERSION}_linux_arm64_sbom.spdx.json" "$CHECKSUM_FILE" | awk '{print $1}')
491512
492-
# SBOM checksums for keylightd-tray (Linux only)
513+
# SBOM checksums for keylightd-tray
514+
SHA256_SBOM_TRAY_DARWIN_UNIVERSAL=$(grep "keylightd-tray_v${VERSION}_darwin_universal_sbom.spdx.json" "$CHECKSUM_FILE" | awk '{print $1}')
493515
SHA256_SBOM_TRAY_LINUX_AMD64=$(grep "keylightd-tray_v${VERSION}_linux_amd64_sbom.spdx.json" "$CHECKSUM_FILE" | awk '{print $1}')
494516
SHA256_SBOM_TRAY_LINUX_ARM64=$(grep "keylightd-tray_v${VERSION}_linux_arm64_sbom.spdx.json" "$CHECKSUM_FILE" | awk '{print $1}')
495517
496518
echo "SHA256_DARWIN_AMD64=${SHA256_DARWIN_AMD64}" >> $GITHUB_OUTPUT
497519
echo "SHA256_DARWIN_ARM64=${SHA256_DARWIN_ARM64}" >> $GITHUB_OUTPUT
498520
echo "SHA256_LINUX_AMD64=${SHA256_LINUX_AMD64}" >> $GITHUB_OUTPUT
499521
echo "SHA256_LINUX_ARM64=${SHA256_LINUX_ARM64}" >> $GITHUB_OUTPUT
522+
echo "SHA256_TRAY_DARWIN_UNIVERSAL=${SHA256_TRAY_DARWIN_UNIVERSAL}" >> $GITHUB_OUTPUT
500523
echo "SHA256_TRAY_LINUX_AMD64=${SHA256_TRAY_LINUX_AMD64}" >> $GITHUB_OUTPUT
501524
echo "SHA256_TRAY_LINUX_ARM64=${SHA256_TRAY_LINUX_ARM64}" >> $GITHUB_OUTPUT
502525
echo "SHA256_SBOM_DARWIN_AMD64=${SHA256_SBOM_DARWIN_AMD64}" >> $GITHUB_OUTPUT
503526
echo "SHA256_SBOM_DARWIN_ARM64=${SHA256_SBOM_DARWIN_ARM64}" >> $GITHUB_OUTPUT
504527
echo "SHA256_SBOM_LINUX_AMD64=${SHA256_SBOM_LINUX_AMD64}" >> $GITHUB_OUTPUT
505528
echo "SHA256_SBOM_LINUX_ARM64=${SHA256_SBOM_LINUX_ARM64}" >> $GITHUB_OUTPUT
529+
echo "SHA256_SBOM_TRAY_DARWIN_UNIVERSAL=${SHA256_SBOM_TRAY_DARWIN_UNIVERSAL}" >> $GITHUB_OUTPUT
506530
echo "SHA256_SBOM_TRAY_LINUX_AMD64=${SHA256_SBOM_TRAY_LINUX_AMD64}" >> $GITHUB_OUTPUT
507531
echo "SHA256_SBOM_TRAY_LINUX_ARM64=${SHA256_SBOM_TRAY_LINUX_ARM64}" >> $GITHUB_OUTPUT
508532
@@ -529,8 +553,10 @@ jobs:
529553
VERSION="${{ needs.create-release.outputs.version }}"
530554
531555
sed -e "s/{{VERSION}}/${VERSION}/g" \
556+
-e "s/{{SHA256_DARWIN_UNIVERSAL}}/${{ steps.checksums.outputs.SHA256_TRAY_DARWIN_UNIVERSAL }}/g" \
532557
-e "s/{{SHA256_LINUX_AMD64}}/${{ steps.checksums.outputs.SHA256_TRAY_LINUX_AMD64 }}/g" \
533558
-e "s/{{SHA256_LINUX_ARM64}}/${{ steps.checksums.outputs.SHA256_TRAY_LINUX_ARM64 }}/g" \
559+
-e "s/{{SHA256_SBOM_DARWIN_UNIVERSAL}}/${{ steps.checksums.outputs.SHA256_SBOM_TRAY_DARWIN_UNIVERSAL }}/g" \
534560
-e "s/{{SHA256_SBOM_LINUX_AMD64}}/${{ steps.checksums.outputs.SHA256_SBOM_TRAY_LINUX_AMD64 }}/g" \
535561
-e "s/{{SHA256_SBOM_LINUX_ARM64}}/${{ steps.checksums.outputs.SHA256_SBOM_TRAY_LINUX_ARM64 }}/g" \
536562
contrib/homebrew/keylightd-tray.rb.template > keylightd-tray.rb

contrib/homebrew/keylightd-tray.rb.template

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,15 @@ class KeylightdTray < Formula
77
version "{{VERSION}}"
88
license "MIT"
99

10-
# macOS builds are not currently available due to a symbol conflict
11-
# between Wails and fyne.io/systray (duplicate AppDelegate).
12-
# See: https://github.com/wailsapp/wails/issues/3003
13-
# When this is resolved, uncomment the macOS sections below.
14-
#
15-
# on_macos do
16-
# on_intel do
17-
# url "https://github.com/jmylchreest/keylightd/releases/download/v{{VERSION}}/keylightd-tray_v{{VERSION}}_darwin_amd64.tar.gz"
18-
# sha256 "{{SHA256_DARWIN_AMD64}}"
19-
# end
20-
# on_arm do
21-
# url "https://github.com/jmylchreest/keylightd/releases/download/v{{VERSION}}/keylightd-tray_v{{VERSION}}_darwin_arm64.tar.gz"
22-
# sha256 "{{SHA256_DARWIN_ARM64}}"
23-
# end
24-
# end
10+
on_macos do
11+
url "https://github.com/jmylchreest/keylightd/releases/download/v{{VERSION}}/keylightd-tray_v{{VERSION}}_darwin_universal.tar.gz"
12+
sha256 "{{SHA256_DARWIN_UNIVERSAL}}"
13+
14+
resource "sbom" do
15+
url "https://github.com/jmylchreest/keylightd/releases/download/v{{VERSION}}/keylightd-tray_v{{VERSION}}_darwin_universal_sbom.spdx.json"
16+
sha256 "{{SHA256_SBOM_DARWIN_UNIVERSAL}}"
17+
end
18+
end
2519

2620
on_linux do
2721
on_intel do
@@ -44,11 +38,18 @@ class KeylightdTray < Formula
4438
end
4539
end
4640

47-
depends_on "gtk+3"
48-
depends_on "webkit2gtk"
41+
on_linux do
42+
depends_on "gtk+3"
43+
depends_on "webkit2gtk"
44+
end
4945

5046
def install
51-
bin.install "keylightd-tray"
47+
if OS.mac?
48+
prefix.install "keylightd-tray.app"
49+
bin.write_exec_script "#{prefix}/keylightd-tray.app/Contents/MacOS/keylightd-tray"
50+
else
51+
bin.install "keylightd-tray"
52+
end
5253

5354
resource("sbom").stage do
5455
(share/"doc/keylightd-tray").install Dir["*.spdx.json"].first => "sbom.spdx.json"
@@ -68,9 +69,6 @@ class KeylightdTray < Formula
6869

6970
To start:
7071
keylightd-tray
71-
72-
Note: macOS support is not currently available due to a build conflict.
73-
See: https://github.com/wailsapp/wails/issues/3003
7472
EOS
7573
end
7674
end

contrib/keylightd-tray/Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.PHONY: dev build clean
1+
.PHONY: dev build build-darwin clean
22

33
VERSION ?= dev
44
COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
@@ -12,6 +12,9 @@ dev:
1212
build: frontend
1313
wails build -tags webkit2_41 -ldflags "$(LDFLAGS)"
1414

15+
build-darwin: frontend
16+
wails build -platform darwin/universal -ldflags "$(LDFLAGS)"
17+
1518
frontend:
1619
cd frontend && npm install && npm run build
1720

contrib/keylightd-tray/tray.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,18 @@ func (t *TrayManager) OnReady() {
4848
systray.SetTitle("Keylight Control")
4949
systray.SetTooltip("Keylight Control")
5050

51+
// Set left-click to toggle window
52+
systray.SetOnTapped(func() {
53+
t.ToggleWindow()
54+
})
55+
56+
// Right-click shows menu automatically (default behavior)
57+
// SetOnSecondaryTapped is optional - menu shows by default on right-click
58+
// but we can set it explicitly if we want to customize behavior later
59+
systray.SetOnSecondaryTapped(func() {
60+
// Menu will be shown automatically
61+
})
62+
5163
// Build initial basic menu
5264
t.buildBasicMenu()
5365
}

go.mod

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ require (
1717
github.com/wailsapp/wails/v2 v2.11.0
1818
)
1919

20+
// Use master branch for SetOnTapped/SetOnSecondaryTapped support (added June 3, 2025)
21+
// Pinned to commit 4856ac3adc3c from August 12, 2025
22+
replace fyne.io/systray => github.com/fyne-io/systray v1.11.1-0.20250812065214-4856ac3adc3c
23+
2024
require (
2125
atomicgo.dev/cursor v0.2.0 // indirect
2226
atomicgo.dev/keyboard v0.2.9 // indirect

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ atomicgo.dev/keyboard v0.2.9 h1:tOsIid3nlPLZ3lwgG8KZMp/SFmr7P0ssEN5JUsm78K8=
66
atomicgo.dev/keyboard v0.2.9/go.mod h1:BC4w9g00XkxH/f1HXhW2sXmJFOCWbKn9xrOunSFtExQ=
77
atomicgo.dev/schedule v0.1.0 h1:nTthAbhZS5YZmgYbb2+DH8uQIZcTlIrd4eYr3UQxEjs=
88
atomicgo.dev/schedule v0.1.0/go.mod h1:xeUa3oAkiuHYh8bKiQBRojqAMq3PXXbJujjb0hw8pEU=
9-
fyne.io/systray v1.11.0 h1:D9HISlxSkx+jHSniMBR6fCFOUjk1x/OOOJLa9lJYAKg=
10-
fyne.io/systray v1.11.0/go.mod h1:RVwqP9nYMo7h5zViCBHri2FgjXF7H2cub7MAq4NSoLs=
119
github.com/MarvinJWendt/testza v0.1.0/go.mod h1:7AxNvlfeHP7Z/hDQ5JtE3OKYT3XFUeLCDE2DQninSqs=
1210
github.com/MarvinJWendt/testza v0.2.1/go.mod h1:God7bhG8n6uQxwdScay+gjm9/LnO4D3kkcZX4hv9Rp8=
1311
github.com/MarvinJWendt/testza v0.2.8/go.mod h1:nwIcjmr0Zz+Rcwfh3/4UhBp7ePKVhuBExvZqnKYWlII=
@@ -38,6 +36,8 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk
3836
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
3937
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
4038
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
39+
github.com/fyne-io/systray v1.11.1-0.20250812065214-4856ac3adc3c h1:V0MQAC1h5ehXOKrXMbBkMGN27nEsrT93jw7FUOA4KpQ=
40+
github.com/fyne-io/systray v1.11.1-0.20250812065214-4856ac3adc3c/go.mod h1:RVwqP9nYMo7h5zViCBHri2FgjXF7H2cub7MAq4NSoLs=
4141
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
4242
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
4343
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=

0 commit comments

Comments
 (0)