aboutsummaryrefslogtreecommitdiffstats
path: root/tests
AgeCommit message (Collapse)AuthorFilesLines
12 hoursFilter bars: chips read as buttons, status dots, group labelsDanilo M.1-0/+3
Chips get a button background and border, a dot in the color the table uses for that status, and a muted label per group (overlay, status, state, result). Search fields get a search icon and a clear button. Phase 2 spec: why the signing key locks after the GUI quits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 hoursOne frame for every tab: ribbons of actions, next steps as dialogsDanilo M.1-68/+151
Tabs are permanent and load on first show. The ribbon shows the current tab's actions in workflow order, a small ribbon under it the view controls; inapplicable actions are disabled with the reason as tooltip. Starting a job stays on the tab; the Jobs tab reads (running), then shows the end status. When a preview this session started ends, its log opens with Run it (publish box) or Apply shadowing; Not now loses nothing, Run it in Jobs reopens it. New hint moves to the Packages ribbon and acts on the ticked packages without a hint. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 hourssbb-remote 0.6.0: hint-new takes several packages, no versionDanilo M.1-7/+9
Each gets the .info pin; Update selected sets a version later. One package that already has a hint refuses the whole job before it starts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursHints: Delete hint acts on the ticked packages, then offers RevertDanilo M.1-0/+12
Rows with only a stanza have no hint and are skipped. The deletes open the same dialog as a hint job: each removed hint's diff and Revert, which had no place in the GUI before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursPackages: Build/Update/Rebuild/Remove act on ticked packages onlyDanilo M.1-0/+4
The highlighted row used to stand in when nothing was ticked; with row clicks toggling the tick, that ran an action on a row just unticked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursPackages tab: a click anywhere on a row ticks or unticks itDanilo M.1-0/+4
Same as the Hints tab: the box is no longer user-checkable on its own and one clicked handler toggles the row, so no click counts twice. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursHints tab: a click anywhere on a row ticks or unticks itDanilo M.1-1/+6
The box is no longer user-checkable on its own, so a click on it is not counted twice; one cellClicked handler toggles every row click. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursHint diff dialog: color added, removed and hunk linesDanilo M.1-0/+5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursCtrl+A / Ctrl+Shift+A: select visible and clear, Packages and HintsDanilo M.1-2/+9
The search field keeps Ctrl+A for its own text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursHints tab: Select visible and ClearDanilo M.1-1/+11
Same pair as the Packages tab: tick every row the chips and search leave visible, untick every row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursUpstream versions with '-' as '_', as mkhint stored themDanilo M.1-1/+3
'-' is illegal in a SlackBuild version, so dated tags like exploitdb's 2026-10-14 are packaged 2026_10_14 and showed as outdated forever. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursHints screen: upstream check, hint jobs, diff and revertDanilo M.1-1/+70
Check upstream fills the upstream column and ticks the outdated hints, Update selected starts hint-update, Delete hint acts on the VM. When a hint job ends its SBB-RESULT opens a dialog with each changed hint's diff, Revert per package (once) and Build these. The Packages detail pane gets New hint and Open in Hints. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursUpstream versions from nvchecker on the desktopDanilo M.1-0/+112
nvchecker.toml moves from the VM into the repo. The GUI runs nvchecker with its own [__config__] (the keyfile from [hints]) and reads versions and per-package errors from --logger json; outdated is decided against the hints, so no oldver, newver or nvtake. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hourssbb-remote 0.5.0: hint jobs replace mkhint's hint editingDanilo M.1-0/+253
hint-update and hint-new run the helper's own _hint command: version bumps as mkhint does them (also '-' and dotless URL forms, never inside MD5SUM values), a DELREQUIRES-only hint pinned from the .info first, md5 of the first URL of each DOWNLOAD pair, --no-dl as DOWNLOAD="no", .bak before each write and a final SBB-RESULT line that job-result returns. hint-diff, hint-revert and hint-delete answer at once. neovim and openvino are refused until phase 4b. Job ids accept hyphenated kinds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 hoursShow dates as DD/MM/YYYY HH:MMDanilo M.1-0/+7
All GUI dates go through fmt_time; switch it to the Italian order with the year, and use it for the Dashboard's "stale since" too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 hoursbuild-log: show the last attempt's log, not always build.logDanilo M.2-1/+15
slackrepo writes one log per command (build, rebuild, update, remove). A failed update left build.log from an older successful build, so the viewer showed a success next to a failed result. The helper (0.4.1) now returns the newest command log and its name, which the viewer shows in the title and header. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 hoursResults tab with build logs; count only real packagesDanilo M.2-4/+89
sbb-remote 0.4.0: results lists slackrepo's last attempt per package (newest first, with built version and whether a log dir exists), and build-log returns the end of a package's build.log (512 KB) plus its resource.log, accepting only category/pkg paths. Result counts skip the legacy buildresults rows keyed by package file name: the 213 "bad" on the Dashboard matched no package. GUI: a Results tab (chips per result, table sorted by attempt time, detail pane, log viewer window that keeps the failure at the end), opened from the ribbon or by clicking a result in the Dashboard bar or legend, filtered to it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 hoursDashboard: freshness dot on the slackpkg tileDanilo M.1-1/+20
Green when the last upgrade is within a day, yellow after one day, red after two; the age text beside it carries the meaning too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 hoursDashboard: VM meters and sparklines, slackpkg tileDanilo M.2-3/+59
sbb-remote 0.3.0 adds CPU busy % (two /proc/stat samples), RAM total and available, disk / total and free, and the last slackpkg update (LASTUPDATE) and package change (/var/log/packages), replacing disk_free. The Dashboard shows a VM card with meters for CPU, RAM and disk / (accent, warning from 80%, critical from 90%, value always printed) and CPU/RAM sparklines from this session's polls, and a slackpkg tile in place of VM load. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 hoursRibbon for the screens; centered, distinct tab barDanilo M.1-0/+10
The Open menu becomes a toolbar ribbon (icon over label: Dashboard, Packages, Jobs) using the desktop icon theme with Qt fallbacks. Tabs are centered with a bordered, rounded shape, the selected one filled with the highlight color and joined to a highlight line over the pane, so the bar reads as its own control. Colors come from the palette. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 hoursCtrl+PgUp/PgDn cycle tabs from anywhere in the windowDanilo M.1-0/+12
QTabWidget's built-in binding only works with focus on the tab bar, and the table views take page keys. Window-level shortcuts, wrapping. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 hoursAdd Packages tab, hint view, Run it and signing key unlockDanilo M.1-4/+195
Packages tab over the helper inventory: query bar with cat:/maint:/ req:/status: prefixes, overlay and status chips, check column, and a detail pane with versions, dependencies after hints and a structured read-only view of the hint (hints.py mirrors slackrepo's parser). Actions start slackrepo previews; the Jobs tab offers Run it with a publish box (default from [builds] publish), asking for the signing key passphrase first when the key is locked. Status bar shows the key state; Dashboard tiles open their tabs; inventory reloads after slackrepo and publish jobs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 hourssbb-remote 0.2.0: inventory, slackrepo and publish jobs, signing keyDanilo M.1-4/+155
inventory lists every package with its effective version (hint over .info), build state from the slackrepo DB, summary, and the parsed hint found by slackrepo's search order; hints are parsed with shlex, never sourced. Job kinds now return argv plus env: slackrepo build/rebuild/update/remove (packages validated against the tree, --preview, --no-publish sets SBB_PUBLISH=n) and publish (sb-publish). gpg-status and gpg-unlock let the GUI unlock the package signing key in gpg-agent; the passphrase comes on stdin only, every other subprocess gets stdin=DEVNULL. A real slackrepo run is refused while the key is locked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 hourstests: always run the GUI tests offscreenDanilo M.1-1/+1
setdefault kept a QT_QPA_PLATFORM already set by the desktop session (wayland;xcb here), so the tests drew windows and modal dialogs on the real display. Force offscreen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 hoursRedesign the Dashboard as cards with stat tilesDanilo M.1-3/+14
The tiles were plain group boxes of key: value text and read as text scattered on a page. Now a KPI row (packages, built, last pull, VM load) with large values and muted details, a slackrepo results stacked bar in the reserved status colors with hover counts and a labelled legend, and a recent jobs card. Colors come from the Qt palette, so the user's theme applies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 hoursFix crash when closing the Jobs tab during a running jobDanilo M.1-1/+26
Closing the tab killed the job-follow process, whose finished signal arrived after the tab was deleted; the slot touched dead widgets and PyQt6 aborted the whole application on the unhandled exception. stop() now disconnects the process before killing it. A sys.excepthook logs any future slot exception to stderr instead of aborting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 hoursAdd the PyQt6 GUI: Dashboard, Jobs, VM control, notificationsDanilo M.1-0/+167
All VM access goes through remote.py (ssh with a shared ControlMaster, local virsh). The main window polls jobs, backs off while ssh is down, checks the libvirt domain and offers Start or Resume, and sends freedesktop notifications when a job ends or the VM comes up. The Jobs tab streams a job's log with job-follow and resumes at the last offset after a drop. Config is TOML, validated against built-in defaults. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
30 hoursAdd sbb-remote, the VM helperDanilo M.1-0/+281
Single-file stdlib helper the GUI runs over ssh. JSON commands for version, stats and jobs; job-start runs a fixed table of kinds (sbpull, sbshadow, each requiring --yes or --no) detached with setsid and no stdin, one at a time under a flock; job-follow streams a log from a byte offset so the GUI can drop and resume; job-kill sends SIGTERM to the job's process group. A job whose runner died is reported lost. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>