Skip to content

0.3.x - #29

Open
demonkillerr wants to merge 27 commits into
mainfrom
0.3.x
Open

0.3.x#29
demonkillerr wants to merge 27 commits into
mainfrom
0.3.x

Conversation

@demonkillerr

@demonkillerr demonkillerr commented Aug 31, 2026

Copy link
Copy Markdown
Member

This release aims to solve some of the housekeeping tasks ahead of 0.4.x. It renames the project to Explorer, modernizes the build, replaces logging, enforces formatting, adds a test suite, and cleans up a couple of real blocking/cancellation bugs. This PR aims to work on #19 and #20 along with other things.

Few of the things this covers is as follows:

  • Rename: alg-app-store → Explorer
  • Build system modernization
  • Versioning
  • Logging overhaul
  • clang-format enforcement
  • Test infrastructure
  • std::jthread + non-blocking cooperative cancellation

Find more information below:

Rename application:

This is the project wide effort to rename applications after HPC clusters.

  • Repo, binary target, and all source/doc references renamed throughout (CMakeLists.txt, main.cpp, mainwindow.cpp, assets/*.desktop/.png, README.md, CONTRIBUTING.md, build.sh, .gitignore, CI workflow)
  • Fixed two pre-existing CI bugs found while touching release.yml: the version-extraction step still grepped CMakeLists.txt for a version string that no longer lived there, and the release-trigger check watched the wrong file. Both now correctly read/watch the VERSION file
  • Added a missing install() rule for explorer.png so the desktop file's Icon= actually resolves post-install

Build system modernization

  • Bumped to C++20
  • Split the monolithic CMakeLists.txt into granular per-folder libraries: core, gui, utils
  • Fixed a regression this surfaced: moving resources.qrc into thestatic gui library silently broke QSS loading at runtime (linker drops a static lib's unreferenced resource initializer). Fixed with Q_INIT_RESOURCE(resources) in main.cpp

Versioning

  • Eliminated the hardcoded version string in the About dialog — src/utils/version.h.in is now configure_file() from the root VERSION file (the project's single source of truth) into a generated version.h

Logging overhaul

  • Replaced the old qDebug-based Logger:: wrapper with spdlog
  • Added -v/-vv/-D CLI verbosity flags, parsed and stripped from argv before QApplication construction
  • Established a safety pattern for dynamic log messages: always passed as a format argument (spdlog::info("{}", msg)), never as the format string itself, so arbitrary content (pacman/AUR output, JSON) containing {/} can't be misparsed as a fmt placeholder

clang-format enforcement

  • Finalized .clang-format (WebKit-based, Allman braces, C++20), one isolated repo-wide reformat commit across entire code base
  • New CI format job gates PRs on clang-format --dry-run --Werror

Test infrastructure

  • Catch2 (v3) + CTest, scoped deliberately to pure logic only. AlpmWrapper/PackageManager still touch real libalpm/pkexec, not mocked yet (full mock backend deferred to 0.5.x)
  • Extracted three previously inline pieces of logic into testable free functions/statics in core: AurHelper::parseAurPackage (AUR JSON parsing), new PacmanConf::isMultilibEnabled/isChaoticAurEnabled (pacman.conf section parsing, pulled out of SettingsWidget), new parseOperationProgress(pacman/yay/paru output parsing, pulled out of PackageDetailsDialog)

std::jthread + non blocking cooperative cancellation

  • AurHelper::checkAurUpdates() now takes a std::stop_token, checked both between packages and against an in-flight AUR RPC request (via std::stop_callback aborting the pending reply). The AUR RPC has no client-side timeout, so this matters
  • UpdatesWidget runs the update check on a std::jthread member instead of QtConcurrent::run, so a repeat click or widget teardown cancels an in-progress check instead of leaving it orphaned. Verified live (not just reviewed): completed a check successfully headless, and separately quit mid-check and confirmed shutdown completed in ~1.2s instead of hanging on the network call
  • PackageManager::cancelRunningOperation() : the pkexec pkill calls that actually kills the privileged pacman/yay/paru process (as opposed to just the local wrapper) now runs on a background std::jthread overlapping with the existing wait instead of blocking the GUI thread in front of it, cutting worst-case cancel latency roughly in half

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant