#15821 This PR is adding two improvements and fixing two Windows bugs in Fleet Desktop: ## Improvement - We are now capturing the stderr of Fleet Desktop. This helped me find bug (1) below (otherwise the panic output below was hidden from us). - To reduce complexity I'm removing the "Theme detection" routine because we made the decision to use the colored icon for both themes..., see here: https://github.com/fleetdm/fleet/blob/415d1f493b91d9f40d87b968ce95cfc01e810e56/orbit/cmd/desktop/desktop_windows.go#L21-L27 ## Bug fixes 1. Fleet Desktop icon not showing in the task bar. This was fixed by updating to use the latest version of `fyne.io/systray`. (See https://github.com/fyne-io/systray/issues/22#issuecomment-1173157898.) 2. Orbit now properly detects if Fleet Desktop isn't running on Windows. Bug (1)'s panic output ``` panic: runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x0 addr=0x0 pc=0x72b14b] goroutine 23 [running]: fyne.io/systray.(*winTray).setTooltip(0x1eb5d40, {0x126923f?, 0x0?}) /Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray_windows.go:260 +0xcb fyne.io/systray.SetTooltip({0x126923f?, 0x125fc16?}) /Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray_windows.go:961 +0x29 main.main.func1() /Users/luk/fleetdm/git/fleet/orbit/cmd/desktop/desktop.go:103 +0xba fyne.io/systray.Register.func2() /Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray.go:98 +0x2f created by fyne.io/systray.Register in goroutine 1 /Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray.go:96 +0xb1 ``` - [X] Changes file added for user-visible changes in `changes/` or `orbit/changes/`. See [Changes files](https://fleetdm.com/docs/contributing/committing-changes#changes-files) for more information. - [X] Manual QA for all new/changed functionality - For Orbit and Fleet Desktop changes: - [X] Manual QA must be performed in the three main OSs, macOS, Windows and Linux. - [x] Auto-update manual QA, from released version of component to new version (see [tools/tuf/test](../tools/tuf/test/README.md)).
This package was copied from https://github.com/virtuald/go-paniclog
go-paniclog
By default, panics in golang are sent to stderr. Unfortunately, there isn't a direct builtin global mechanism to capture/send the output of the panic to a file or really do anything with it other than to write to stderr.
One possible solution is that you can redirect stderr to a file, and that's all that this package does. Of course, once you redirect stderr to file, anything else you write to stderr will also end up in that file. v2.0 now includes a function you can use to undo the redirection if you wanted to do that for some reason.
Reference: https://stackoverflow.com/questions/34772012/capturing-panic-in-golang
Alternatives
- panicwrap may be a better solution for many programs
Author
I can't claim any credit for this idea or the code, it is entirely taken from the rclone program by Nick Craig-Wood.
License
MIT License