Actioneer 1.1.0: a rebuilt pane, live durations and the translations the snap never had
Version 1.1.0 of Actioneer is out — my native GNOME client for GitHub Actions, written in Rust and GTK4. The headline changes are a redesigned workflow pane, live durations and 14 languages. Along the way I want to tell you about two bugs I found: one had been living in the snap build since its very first release, the other only shows up if you switch your system to Arabic.
One card instead of a nested list
The workflow → runs → jobs → steps accordion was already there — what is new is how it looks. Instead of a nested list it is now a single rounded card with one-pixel separators, a round status dot sized per level (26 pixels for a workflow, 13 for a step), a meta line under the run number carrying branch, actor, duration and time, and the run's buttons (re-run, re-run failed jobs, cancel, open on GitHub) moved into its header. An expanded workflow gained a progress bar with a live done-of-total counter.
The duration of anything currently running is now live: the counter ticks once a second instead of updating once per API poll. A small thing, but without it the interface looks frozen at exactly the moment you are watching it.
The log window changed separately. There was one before and there is one now, but the Logs button used to open a single job's log — the job the app picked for you. It now opens the whole run: the same window, with a sidebar where jobs are one click apart, a ticking counter on the running ones, and a Refresh that re-fetches the job list as well as the log. Logs you have already read stay in memory for as long as the window is open, so going back to a previous job costs nothing.
14 languages, none of which snap was showing
This release adds Italian and Japanese, bringing the count to 14. While I was there I went through every existing catalogue and closed the remaining untranslated strings, restoring dropped diacritics along the way: German umlauts, French and Spanish accents.
Then I installed the snap build to look at the Japanese. It was in English. In every language.
The app looks for its catalogues in $SNAP/usr/share/actioneer/po, and snapcraft.yaml had never copied them there: the Flatpak manifest has that line, the snap simply did not. Translations in the snap build had not worked for a single day, ever since the first release.
The fix is two lines — but noticing it took installing the snap and changing the language. No test catches this: a built package is only ever verified by the person who installed it.
Logs should not flip
Arabic and Urdu turn the interface right-to-left, as they should. The problem is that two places showing machine output turned with it: the job log and the crash report.
A log is not prose. Every line mixes Latin, digits and punctuation, and the bidi algorithm dutifully reorders the segments by rules written for text. The timestamp drifts to the end, the path breaks into pieces. It is unreadable. Both views are now pinned to LTR regardless of the interface language.
The log window title needed fixing in exactly the opposite direction. "{name} — Logs" started with the run name, and a run name is Latin, so bidi resolved the whole line as LTR and an Arabic reader met it from the wrong end. No code was needed at all: reordering the words inside the translation itself is enough to make the first strong character Arabic.
Where to get it
Actioneer is open source under the MIT license. Sources are on GitHub; you can install it from Flathub or the Snap Store.