Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
fd0c829
git hook to bump patch number
demonkillerr Aug 25, 2026
977a317
use version number from VERSION file in CMakeLists
demonkillerr Aug 25, 2026
6a7a03c
update todo test task
demonkillerr Aug 25, 2026
4be6d10
bump version to 0.3.x
demonkillerr Aug 25, 2026
8afc457
rename app to explorer
demonkillerr Aug 30, 2026
e1e37d5
granular cmake
demonkillerr Aug 30, 2026
d371359
remove hardcoded instances of version and use VERSION file as single …
demonkillerr Aug 30, 2026
b874eb3
configure spdlog and remove logger.h
demonkillerr Aug 30, 2026
a3a6124
fix: initiate resources
demonkillerr Aug 30, 2026
6a8f522
add logging instructions
demonkillerr Aug 30, 2026
30813df
allman clang format
demonkillerr Aug 30, 2026
0247fa2
update license years
demonkillerr Aug 30, 2026
f80d985
integrate catch2 tests
demonkillerr Aug 31, 2026
9f33383
add tests to root cmake
demonkillerr Aug 31, 2026
c0fa217
ci: add catch2 as dep
demonkillerr Aug 31, 2026
b3f20a8
test infrastructure information
demonkillerr Aug 31, 2026
d092697
new progress parser utility
demonkillerr Aug 31, 2026
1ec526d
sep logic for pacman conf file
demonkillerr Aug 31, 2026
458f048
add new core/ files
demonkillerr Aug 31, 2026
2e47a0d
PackageInfo map expored as a static
demonkillerr Aug 31, 2026
03125b6
move parsing logic out of package_details_dialog
demonkillerr Aug 31, 2026
f956c18
move pacman_conf logic out of gui/settings to core/
demonkillerr Aug 31, 2026
af4119c
update project info
demonkillerr Aug 31, 2026
9a8335c
cooperative cancellation for per-package AUR RPC loop. UpdatesWidget:…
demonkillerr Aug 31, 2026
84661e6
non-blocking termination of pacman/yay processes using std::jthread m…
demonkillerr Aug 31, 2026
b636824
cancel an existing thread if a new one is invoked instead of joining …
demonkillerr Aug 31, 2026
81ddf03
ci: git as a dependency for clang format
demonkillerr Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: "false"
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: "false"
AlwaysBreakAfterReturnType: TopLevelDefinitions
AlwaysBreakAfterReturnType: None
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: "false"
BinPackParameters: "false"
Expand All @@ -28,7 +28,7 @@ SortIncludes: "true"
SpaceAfterCStyleCast: "false"
SpaceInEmptyBlock: "false"
SpacesBeforeTrailingComments: "2"
SpacesInAngles: "true"
SpacesInParentheses: "true"
SpacesInSquareBrackets: "true"
Standard: c++17
SpacesInAngles: "false"
SpacesInParentheses: "false"
SpacesInSquareBrackets: "false"
Standard: c++20
73 changes: 51 additions & 22 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build and Release ALG App Store
name: Build and Release Explorer

on:
push:
Expand All @@ -7,12 +7,34 @@ on:
- '**.cpp'
- '**.h'
- 'CMakeLists.txt'
- 'VERSION'
- '.github/workflows/**'
pull_request:
branches: [ "main", "devel", "qt6" ]
workflow_dispatch:

jobs:
format:
runs-on: ubuntu-latest
container:
image: archlinux:latest

steps:
- name: Install clang-format
run: |
pacman -Syu --noconfirm
pacman -S --noconfirm --needed clang git

- name: Checkout code
uses: actions/checkout@v4

- name: Mark git directory as safe
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"

- name: Check formatting
run: |
find src tests \( -name '*.cpp' -o -name '*.h' \) | xargs clang-format --dry-run --Werror

build:
runs-on: ubuntu-latest
container:
Expand All @@ -35,7 +57,9 @@ jobs:
pacman \
libarchive \
curl \
pkgconf
pkgconf \
spdlog \
catch2

- name: Checkout code
uses: actions/checkout@v4
Expand All @@ -45,25 +69,25 @@ jobs:
- name: Mark git directory as safe
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"

- name: Extract version from CMakeLists.txt
- name: Extract version from VERSION file
id: get_version
run: |
VERSION=$(grep -oP 'project\(alg-app-store VERSION \K[0-9]+\.[0-9]+\.[0-9]+' CMakeLists.txt)
VERSION=$(cat VERSION)
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Detected version: $VERSION"

- name: Check if this should trigger a release
id: check_release
run: |
# Only release on main branch when CMakeLists.txt was modified
# Only release on main branch when VERSION was modified
if [[ "${{ github.ref }}" == "refs/heads/main" && "${{ github.event_name }}" == "push" ]]; then
# Check if CMakeLists.txt was changed in this push
if git diff --name-only HEAD~1 HEAD | grep -q "CMakeLists.txt"; then
# Check if VERSION was changed in this push
if git diff --name-only HEAD~1 HEAD | grep -q "^VERSION$"; then
echo "should_release=true" >> $GITHUB_OUTPUT
echo "Release triggered: CMakeLists.txt changed on main branch"
echo "Release triggered: VERSION changed on main branch"
else
echo "should_release=false" >> $GITHUB_OUTPUT
echo "No release: CMakeLists.txt not changed"
echo "No release: VERSION not changed"
fi
else
echo "should_release=false" >> $GITHUB_OUTPUT
Expand All @@ -80,17 +104,22 @@ jobs:
run: |
cd build
make -j$(nproc)


- name: Run tests
run: |
cd build
ctest --output-on-failure

- name: Check build artifacts
run: |
ls -lh build/alg-app-store
file build/alg-app-store
ls -lh build/explorer
file build/explorer

- name: Set artifact name
id: artifact
run: |
# Replace forward slashes with dashes to handle PR refs like "12/merge"
ARTIFACT_NAME="alg-app-store-${{ github.ref_name }}-${{ steps.get_version.outputs.version }}"
ARTIFACT_NAME="explorer-${{ github.ref_name }}-${{ steps.get_version.outputs.version }}"
ARTIFACT_NAME="${ARTIFACT_NAME//\//-}"
echo "name=$ARTIFACT_NAME" >> $GITHUB_OUTPUT
echo "Artifact name: $ARTIFACT_NAME"
Expand All @@ -99,7 +128,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: ${{ steps.artifact.outputs.name }}
path: build/alg-app-store
path: build/explorer
retention-days: 30

release:
Expand All @@ -121,31 +150,31 @@ jobs:

- name: Prepare release assets
run: |
chmod +x ./release/alg-app-store
tar -czvf alg-app-store-${{ needs.build.outputs.version }}-linux-x86_64.tar.gz -C ./release alg-app-store
chmod +x ./release/explorer
tar -czvf explorer-${{ needs.build.outputs.version }}-linux-x86_64.tar.gz -C ./release explorer

- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ needs.build.outputs.version }}
name: ALG App Store v${{ needs.build.outputs.version }}
name: Explorer v${{ needs.build.outputs.version }}
body: |
## ALG App Store v${{ needs.build.outputs.version }}
## Explorer v${{ needs.build.outputs.version }}

A modern package manager GUI for Arch Linux.

### Installation
```bash
tar -xzvf alg-app-store-${{ needs.build.outputs.version }}-linux-x86_64.tar.gz
sudo mv alg-app-store /usr/local/bin/
tar -xzvf explorer-${{ needs.build.outputs.version }}-linux-x86_64.tar.gz
sudo mv explorer /usr/local/bin/
```

### Requirements
- Qt6 (Core, Gui, Widgets, Network, Concurrent)
- libalpm (pacman library)
- yay or paru (for AUR support)
files: |
alg-app-store-${{ needs.build.outputs.version }}-linux-x86_64.tar.gz
explorer-${{ needs.build.outputs.version }}-linux-x86_64.tar.gz
draft: false
prerelease: false
env:
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Makefile
*.pro.user.*

# Executable
alg-app-store
explorer

# IDE
.vscode/
Expand Down
88 changes: 24 additions & 64 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
cmake_minimum_required(VERSION 3.16)

project(alg-app-store VERSION 0.2.30 LANGUAGES CXX)
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" PROJECT_VERSION_STRING)

set(CMAKE_CXX_STANDARD 17)
project(explorer VERSION ${PROJECT_VERSION_STRING} LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

# Find Qt6 packages
find_package(Qt6 REQUIRED COMPONENTS
Core
Gui
Expand All @@ -17,78 +18,32 @@ find_package(Qt6 REQUIRED COMPONENTS
Concurrent
)

# Find libalpm
find_package(PkgConfig REQUIRED)
pkg_check_modules(ALPM REQUIRED libalpm)

# Include directories
include_directories(
${CMAKE_SOURCE_DIR}/src
${ALPM_INCLUDE_DIRS}
)
find_package(spdlog REQUIRED)

# Source files
set(SOURCES
src/main.cpp

# Core
src/core/alpm_wrapper.cpp
src/core/aur_helper.cpp
src/core/package_manager.cpp

# GUI
src/gui/mainwindow.cpp
src/gui/home_widget.cpp
src/gui/search_widget.cpp
src/gui/installed_widget.cpp
src/gui/updates_widget.cpp
src/gui/settings_widget.cpp
src/gui/package_card.cpp
src/gui/package_details_dialog.cpp
)
add_subdirectory(src/utils)
add_subdirectory(src/core)
add_subdirectory(src/gui)

# Header files
set(HEADERS
src/utils/logger.h
src/utils/types.h

# Core
src/core/alpm_wrapper.h
src/core/aur_helper.h
src/core/package_manager.h

# GUI
src/gui/mainwindow.h
src/gui/home_widget.h
src/gui/search_widget.h
src/gui/installed_widget.h
src/gui/updates_widget.h
src/gui/settings_widget.h
src/gui/package_card.h
src/gui/package_details_dialog.h
)
# Defines BUILD_TESTING (default ON) and calls enable_testing().
include(CTest)
if(BUILD_TESTING)
find_package(Catch2 3 REQUIRED)
add_subdirectory(tests)
endif()

# Create executable
add_executable(${PROJECT_NAME}
${SOURCES}
${HEADERS}
resources.qrc
src/main.cpp
)

# Link libraries
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Network
Qt6::Concurrent
${ALPM_LIBRARIES}
gui
core
utils
)

# Link directories
link_directories(${ALPM_LIBRARY_DIRS})

# Compiler flags
target_compile_options(${PROJECT_NAME} PRIVATE
-Wall
-Wextra
Expand All @@ -101,6 +56,11 @@ install(TARGETS ${PROJECT_NAME}
)

# Install desktop file
install(FILES assets/alg-app-store.desktop
install(FILES assets/explorer.desktop
DESTINATION share/applications
)

# Install icon
install(FILES assets/explorer.png
DESTINATION share/pixmaps
)
Loading
Loading