@@ -60,21 +60,22 @@ jobs:
6060 fi
6161
6262 sudo apt-get install -y \
63- ${{ matrix.appindicator }} \
64- ${APPINDICATOR_RUNTIME} \
6563 build-essential \
6664 cmake \
65+ ${{ matrix.appindicator }} \
66+ ${APPINDICATOR_RUNTIME} \
6767 dbus-x11 \
6868 dconf-cli \
6969 dconf-service \
70+ xfce4 \
71+ xfce4-panel \
72+ xfce4-indicator-plugin \
73+ xfconf \
74+ xkb-data \
7075 imagemagick \
7176 libglib2.0-dev \
7277 libnotify-dev \
7378 ninja-build \
74- xfce4 \
75- xfce4-indicator-plugin \
76- xfce4-panel \
77- xfconf \
7879 xvfb
7980
8081 - name : Setup Dependencies macOS
@@ -195,80 +196,7 @@ jobs:
195196 # GNOME Shell extensions are unstable in headless CI and can crash with
196197 # "Oh no! Something has gone wrong". XFCE is lightweight and provides a
197198 # stable panel area for showing AppIndicator icons.
198- dbus-run-session -- bash -lc '
199- set -euo pipefail
200-
201- export NO_AT_BRIDGE=1
202- export GTK_THEME=Adwaita
203-
204- # dconf/gsettings need a writable XDG_RUNTIME_DIR in minimal CI environments.
205- export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/tmp/xdg-runtime-${UID}}"
206- mkdir -p "${XDG_RUNTIME_DIR}"
207- chmod 700 "${XDG_RUNTIME_DIR}"
208-
209- cleanup() {
210- kill ${WATCHER_PID:-} ${PANEL_PID:-} ${WM_PID:-} >/dev/null 2>&1 || true
211- }
212- trap cleanup EXIT
213-
214- # Start a minimal XFCE session.
215- xfwm4 >/dev/null 2>&1 &
216- WM_PID=$!
217-
218- # Create a deterministic panel containing the indicator plugin.
219- # The indicator plugin is the piece that actually renders AppIndicator icons.
220- rm -rf "${HOME}/.config/xfce4/panel" || true
221- mkdir -p "${HOME}/.config/xfce4/xfconf/xfce-perchannel-xml"
222-
223- # Wipe existing panel configuration (best-effort).
224- xfconf-query -c xfce4-panel -r -R -p /panels >/dev/null 2>&1 || true
225- xfconf-query -c xfce4-panel -r -R -p /plugins >/dev/null 2>&1 || true
226-
227- # Define one panel (panel-1) with a single plugin (plugin-1).
228- xfconf-query -c xfce4-panel -p /panels/panel-1/position -s "p=6;x=0;y=0" -t string -n
229- xfconf-query -c xfce4-panel -p /panels/panel-1/size -s 32 -t int -n
230- xfconf-query -c xfce4-panel -p /panels/panel-1/length -s 100 -t int -n
231- xfconf-query -c xfce4-panel -p /panels/panel-1/length-adjust -s true -t bool -n
232- xfconf-query -c xfce4-panel -p /panels/panel-1/plugin-ids -s 1 -t int -n
233-
234- # Plugin-1 is the indicator plugin.
235- xfconf-query -c xfce4-panel -p /plugins/plugin-1 -s indicator -t string -n
236-
237- xfce4-panel >/dev/null 2>&1 &
238- PANEL_PID=$!
239-
240- # Start an SNI/AppIndicator watcher so AppIndicators can appear.
241- # Prefer Ayatana watcher if available.
242- if command -v ayatana-indicator-application-service >/dev/null 2>&1; then
243- ayatana-indicator-application-service >/dev/null 2>&1 &
244- WATCHER_PID=$!
245- elif command -v indicator-application-service >/dev/null 2>&1; then
246- indicator-application-service >/dev/null 2>&1 &
247- WATCHER_PID=$!
248- else
249- WATCHER_PID=
250- fi
251-
252- # Small settle time for panel + watcher.
253- sleep 3
254-
255- echo "::group::Linux tray diagnostics"
256- echo "DISPLAY=${DISPLAY}"
257- echo "XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR}"
258- echo "Enabled XFCE panel plugins:"
259- xfconf-query -c xfce4-panel -p /panels/panel-1/plugin-ids || true
260- xfconf-query -c xfce4-panel -p /plugins/plugin-1 || true
261- echo "Watcher process: ${WATCHER_PID:-none}"
262- dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply \
263- /org/freedesktop/DBus org.freedesktop.DBus.ListNames \
264- | sed -n "s/.*string \"\(.*\)\".*/\1/p" \
265- | sort \
266- | grep -Ei "(indicator|statusnotifier|ayatana|dbusmenu)" \
267- || true
268- echo "::endgroup::"
269-
270- ./test_tray --gtest_color=yes --gtest_output=xml:test_results.xml
271- '
199+ dbus-run-session -- bash "${GITHUB_WORKSPACE}/.github/workflows/ci_linux_desktop.sh"
272200 status=$?
273201 kill ${XVFB_PID} >/dev/null 2>&1 || true
274202 exit ${status}
0 commit comments