Skip to content

v2.0.5

Choose a tag to compare

@bobbycomet bobbycomet released this 07 Jul 21:54
· 25 commits to main since this release
5a77734

v2.0.5 New Features and Fixes

Added

  • "Regenerate Timers" button in the toolbar (also available as
    griffin-updater-cli install-timers, which now does the same thing).
    Previously, if an app's .service/.timer files under
    ~/.config/systemd/user/ were deleted or corrupted by anything other
    than Griffin Updater's own Remove button, there was no way to get them
    back short of opening Edit and re-saving that one app manually. This
    regenerates every configured app's units from scratch in one pass.
  • Orphaned unit cleanup, folded into the same action. If a
    .service/.timer pair exists on disk with no matching app in Griffin
    Updater's config at all (e.g., removed some way other than the GUI, or
    left over from an older version), Regenerate Timers now finds and
    removes those too, instead of leaving them to linger forever. Reports
    how many orphaned units were cleaned up alongside the regenerate result.

Fixed

  • Removing an app didn't clear its stored state. The systemd units
    were already being cleaned up correctly on Remove, but the app's
    installed-version/log history in state.json was left behind. Re-
    adding the same app later could silently inherit that stale state and
    report "already up to date" even though nothing had actually been
    installed since the re-add. Removing an app now clears its state too,
    so a full remove-and-re-add always starts genuinely fresh.

Clarified (no code change needed)

  • Double-checked whether Griffin Updater has an equivalent to the old
    standalone appify-updater.sh's deb-vs-AppImage auto-detection bug
    (where having both installed for testing caused it to always assume
    .deb, even when AppImage was the one that should've been checked).
    It doesn't: appimage_installer.py and archive_installer.py never
    call dpkg-query at all, under any circumstance - app category is
    fixed by what you explicitly picked in Add/Edit, with no runtime
    auto-detection heuristic to get confused by having both installed
    side by side.

Fixed

  • A malformed regex in asset_pattern or version_regex could crash
    the entire check, uncaught.
    Both fields are user-editable (per-app, or
    via the shared catalog), and an easy typo like an unbalanced parenthesis
    previously caused a raw re.error to propagate straight out of version
    resolution instead of a clean, readable error - this surfaced while
    debugging an unrelated standalone script, and turned out to apply here
    too. Both resolve_static_url's version_regex and
    resolve_github_release's asset_pattern now compile/match inside a
    try/except and raise a normal VersionResolutionError with the actual
    regex problem spelled out, instead of an uncaught exception.
  • One app's check could silently abort the rest of a Check All/
    check-all batch.
    Before this fix, any unexpected exception during
    one app's check (the regex bug above, or anything else not already
    anticipated) would kill the whole run: in the CLI/systemd-timer path,
    every app after the failing one in that batch would simply never get
    checked, with no log entry explaining why; in the GUI, the background
    QThread would silently die mid-batch, leaving "Checking N apps..." and
    disabled buttons stuck forever, since the completion signal would never
    fire. Both the CLI's check-all and the GUI's Check All Now now isolate
    each app's check individually - a crash on one app is logged clearly
    and the rest of the batch still runs to completion.

Also

  • Confirmed (via a standalone script for a different, unrelated app that
    hit a parallel bug) that Griffin Updater's own GitHub-release asset
    matching already raised a clean error for "no asset matched," rather
    than the bash-specific footgun that prompted this investigation
    (a grep -o | sed pipeline returning nonzero under set -e when zero
    lines match, killing the script one line before it would have logged
    its own friendly error message - worth knowing about if you maintain
    similar bash tooling elsewhere.