diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml
index 43c50be..58978a7 100644
--- a/.github/workflows/pipeline.yml
+++ b/.github/workflows/pipeline.yml
@@ -124,30 +124,52 @@ jobs:
# --- Build and Validation Stage ---
unit-tests:
- name: Run Unit Tests (${{ matrix.os }})
+ name: Unit Tests (${{ matrix.target.name }})
if: github.ref != 'refs/heads/gh-pages'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
- os: [fedora:latest, debian:latest]
+ target:
+ - name: 'Fedora'
+ image: 'fedora:latest'
+ pkg_cmd: 'dnf install -y'
+ deps: 'bats python3-pytest python3-pytest-cov python3-pytest-xdist make hostname util-linux python3-yaml'
+ - name: 'AlmaLinux'
+ image: 'almalinux:9'
+ # Enable CRB for epel, then install epel-release for bats, then install packages
+ pkg_cmd: 'dnf install -y dnf-plugins-core && dnf config-manager --set-enabled crb && dnf install -y epel-release && dnf install -y'
+ deps: 'bats python3-pytest python3-pytest-cov python3-pytest-xdist make hostname util-linux python3-yaml'
+ - name: 'Debian'
+ image: 'debian:latest'
+ pkg_cmd: 'apt-get update && apt-get install -y'
+ deps: 'bats python3-pytest python3-pytest-cov python3-pytest-xdist make hostname bsdutils python3-yaml'
+ - name: 'Ubuntu'
+ image: 'ubuntu:latest'
+ pkg_cmd: 'apt-get update && apt-get install -y'
+ deps: 'bats python3-pytest python3-pytest-cov python3-pytest-xdist make hostname bsdutils python3-yaml'
+ - name: 'Arch Linux'
+ image: 'archlinux:latest'
+ pkg_cmd: 'pacman -Syu --noconfirm'
+ deps: 'bats python-pytest python-pytest-cov python-pytest-xdist make inetutils util-linux python-yaml'
+ - name: 'OpenSUSE'
+ image: 'opensuse/tumbleweed:latest'
+ pkg_cmd: 'zypper --non-interactive install'
+ deps: 'bats python3-pytest python3-pytest-cov python3-pytest-xdist make hostname util-linux python3-PyYAML python3-dbus-python'
container:
- image: ${{ matrix.os }}
+ image: ${{ matrix.target.image }}
steps:
- name: Checkout Repository
uses: actions/checkout@v5
+
- name: Install Test Dependencies
run: |
- if command -v dnf >/dev/null 2>&1; then
- dnf install -y bats python3-pytest python3-pytest-cov python3-pytest-xdist make hostname util-linux python3-yaml
- else
- apt-get update && apt-get install -y bats python3-pytest python3-pytest-cov python3-pytest-xdist make hostname bsdutils python3-yaml
- fi
+ ${{ matrix.target.pkg_cmd }} ${{ matrix.target.deps }}
+
- name: Run Tests
run: |
export PYTHONPATH=src
make test
-
build-rpm:
name: Build & Verify RPMs
if: github.ref != 'refs/heads/gh-pages'
@@ -214,7 +236,6 @@ jobs:
name: debs
path: debs/
retention-days: 5
-
smoke-test:
name: Smoke Test (${{ matrix.os }})
if: github.ref != 'refs/heads/gh-pages'
@@ -223,42 +244,69 @@ jobs:
strategy:
fail-fast: false
matrix:
- os: [fedora:40, fedora:41, ubuntu:latest, debian:latest]
+ # Added almalinux:9 and opensuse/tumbleweed for comprehensive Linux representation
+ os: [fedora:40, fedora:41, almalinux:9, ubuntu:latest, debian:latest, opensuse/tumbleweed:latest]
container:
image: ${{ matrix.os }}
options: --privileged
steps:
- name: Checkout Repository
uses: actions/checkout@v5
+
- name: Install Runtime Dependencies
run: |
- if [ -f /etc/debian_version ]; then
+ if command -v apt-get >/dev/null 2>&1; then
apt-get update && apt-get install -y curl unzip systemd
+ elif command -v zypper >/dev/null 2>&1; then
+ zypper --non-interactive --no-gpg-checks install curl unzip systemd util-linux shadow
else
- dnf install -y curl unzip systemd shadow-utils util-linux
+ # For AlmaLinux, enable EPEL, CRB, and Oracle UEK (for snapper)
+ if grep -q "AlmaLinux" /etc/os-release; then
+ dnf install -y epel-release dnf-plugins-core
+ dnf config-manager --set-enabled crb || true
+ {
+ echo "[ol9_UEKR7]"
+ echo "name=Oracle Linux 9 UEK Release 7 (\$basearch)"
+ echo "baseurl=https://yum.oracle.com/repo/OracleLinux/OL9/UEKR7/\$basearch/"
+ echo "gpgkey=https://yum.oracle.com/RPM-GPG-KEY-oracle-ol9"
+ echo "gpgcheck=1"
+ echo "enabled=1"
+ } > /etc/yum.repos.d/oracle-linux-9.repo
+ dnf makecache
+ # Pre-install dependencies to ensure they are available
+ dnf install -y --allowerasing snapper s-nail || dnf install -y --allowerasing snapper mailx
+ fi
+
+ dnf install -y --allowerasing curl unzip systemd shadow-utils util-linux
fi
+
- name: Retrieve RPM Artifacts
- if: contains(matrix.os, 'fedora')
+ if: contains(matrix.os, 'fedora') || contains(matrix.os, 'almalinux') || contains(matrix.os, 'opensuse')
uses: actions/download-artifact@v4
with:
name: rpms
path: rpms
+
- name: Retrieve DEB Artifacts
if: contains(matrix.os, 'ubuntu') || contains(matrix.os, 'debian')
uses: actions/download-artifact@v4
with:
name: debs
path: debs
+
- name: Execute Package Installation
run: |
- if [ -f /etc/debian_version ]; then
+ if command -v apt-get >/dev/null 2>&1; then
apt-get install -y ./debs/*.deb
+ elif command -v zypper >/dev/null 2>&1; then
+ zypper --non-interactive --no-gpg-checks install rpms/flatpak-automatic-[0-9].*.noarch.rpm
else
- dnf install -y rpms/flatpak-automatic-[0-9].*.noarch.rpm
+ dnf install -y --allowerasing rpms/flatpak-automatic-[0-9].*.noarch.rpm
fi
+
- name: Validate Filesystem Integrity
run: |
- if [ -f /etc/debian_version ]; then
+ if command -v apt-get >/dev/null 2>&1; then
test -f /etc/default/flatpak-automatic
test -f /lib/systemd/system/flatpak-automatic.timer || test -f /usr/lib/systemd/system/flatpak-automatic.timer
test -f /lib/systemd/system/flatpak-automatic.service || test -f /usr/lib/systemd/system/flatpak-automatic.service
@@ -268,9 +316,10 @@ jobs:
test -f /usr/lib/systemd/system/flatpak-automatic.service
fi
test -f /usr/bin/flatpak-automatic
+
- name: Verify Systemd Unit Syntax
run: |
- if [ -f /etc/debian_version ]; then
+ if command -v apt-get >/dev/null 2>&1; then
systemd-analyze verify /lib/systemd/system/flatpak-automatic.timer || systemd-analyze verify /usr/lib/systemd/system/flatpak-automatic.timer
systemd-analyze verify /lib/systemd/system/flatpak-automatic.service || systemd-analyze verify /usr/lib/systemd/system/flatpak-automatic.service
else
diff --git a/.gitignore b/.gitignore
index 7b94226..310df80 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,3 +29,4 @@ __pycache__/
build_docs/
site/
src/flatpak_automatic.egg-info/
+htmlcov/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 85afc0a..d32f2fc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,37 @@ The used format is based on
[Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [1.5.37] - 2026-05-05
+
+### 🐛 Bug Fixes
+
+- _(rpm)_ Use compatible package names for OpenSUSE and AlmaLinux
+
+## [1.5.36] - 2026-05-05
+
+### 🐛 Bug Fixes
+
+- _(rpm)_ Mark example config as configuration file to satisfy rpmlint
+- _(rpm)_ Mark example config as noreplace to satisfy rpmlint
+
+### ⚙️ Miscellaneous Tasks
+
+- _(release)_ Bump version to 1.5.36
+
+## [1.5.35] - 2026-05-05
+
+### 🐛 Bug Fixes
+
+- _(ci)_ Resolve OpenSUSE and AlmaLinux installation issues and improve spec
+ portability
+
+## [1.5.34] - 2026-05-05
+
+### ⚙️ Miscellaneous Tasks
+
+- Expand distro testing coverage with AlmaLinux, Arch, and OpenSUSE
+- Fix Arch Linux package name for bats and expand distro matrix
+
## [1.5.33] - 2026-05-05
### 🐛 Bug Fixes
diff --git a/Makefile b/Makefile
index 5d9a25d..ca22363 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
NAME := flatpak-automatic
EPOCH := 1
-VERSION := 1.5.33
+VERSION := 1.5.37
REL_NUM := 1
DATE := $(shell LC_ALL=C date +"%a %b %d %Y")
AUTHOR := "fedoraBee <9395414+fedoraBee@users.noreply.github.com>"
diff --git a/assets/banner.svg b/assets/banner.svg
index d6708b4..9263b09 100644
--- a/assets/banner.svg
+++ b/assets/banner.svg
@@ -17,6 +17,6 @@
| _|| / _` || ._| '_ \/ _` || / /
|_| |_\__,_|\__|| .__/\__,_||_\_\
AUTOMATIC |_|
- v1.5.33
+ v1.5.37
diff --git a/config/sysconfig/flatpak-automatic b/config/sysconfig/flatpak-automatic
index 21c66f6..faa4113 100644
--- a/config/sysconfig/flatpak-automatic
+++ b/config/sysconfig/flatpak-automatic
@@ -6,7 +6,7 @@
# Please migrate your settings to the new YAML format.
# ==============================================================================
-# Version: 1.5.33 | Built for Fedora & Universal RPM Systems
+# Version: 1.5.37 | Built for Fedora & Universal RPM Systems
# Built for Fedora & Universal RPM Systems
# --- [ Universal Notifications (Apprise) ] ---
diff --git a/pyproject.toml b/pyproject.toml
index 595fa6d..c1adec9 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "flatpak-automatic"
-version = "1.5.33"
+version = "1.5.37"
authors = [
{ name = "fedoraBee", email = "9395414+fedoraBee@users.noreply.github.com" },
]
diff --git a/rpm/flatpak-automatic.spec.in b/rpm/flatpak-automatic.spec.in
index 72b3eba..e48926a 100644
--- a/rpm/flatpak-automatic.spec.in
+++ b/rpm/flatpak-automatic.spec.in
@@ -14,10 +14,10 @@ BuildRequires: systemd-rpm-macros
Requires: flatpak
Requires: python3
-Requires: python3-yaml
-Requires: python3-dbus
+Requires: (python3-pyyaml or python3-PyYAML)
+Requires: (python3-dbus or python3-dbus-python)
Requires: snapper
-Requires: s-nail
+Requires: (s-nail or mailx)
Requires: systemd
Recommends: python3-apprise
@@ -78,7 +78,7 @@ fi
%dir %{_sysconfdir}/flatpak-automatic
%dir %{_sysconfdir}/flatpak-automatic/templates
%config(noreplace) %{_sysconfdir}/flatpak-automatic/config.yaml
-%{_sysconfdir}/flatpak-automatic/config.example.yaml
+%config(noreplace) %{_sysconfdir}/flatpak-automatic/config.example.yaml
%config(noreplace) %{_sysconfdir}/flatpak-automatic/config.user.yaml
%config(noreplace) %{_sysconfdir}/flatpak-automatic/templates/*
diff --git a/src/flatpak-automatic.py b/src/flatpak-automatic.py
index 35cbce1..7ff30de 100755
--- a/src/flatpak-automatic.py
+++ b/src/flatpak-automatic.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# Version: 1.5.33
+# Version: 1.5.37
import sys
import os
diff --git a/src/flatpak_automatic/__init__.py b/src/flatpak_automatic/__init__.py
index 0ba02a0..85f4f3a 100644
--- a/src/flatpak_automatic/__init__.py
+++ b/src/flatpak_automatic/__init__.py
@@ -1,6 +1,6 @@
from .updater import FlatpakUpdater
-__version__ = "1.5.33"
+__version__ = "1.5.37"
from .snapper import SnapperManager
from .config import ConfigManager, StateManager
diff --git a/src/flatpak_automatic/cli.py b/src/flatpak_automatic/cli.py
index 2a59b00..5d299c4 100644
--- a/src/flatpak_automatic/cli.py
+++ b/src/flatpak_automatic/cli.py
@@ -10,7 +10,7 @@ def banner() -> str:
f"{Colors.OKBLUE} | __| |__ _ | |_ _ __ __ _ | |__ \n"
f"{Colors.HEADER} | _|| / _` || ._| '_ \\/ _` || / / \n"
f"{Colors.OKPINK} |_| |_\\__,_|\\__|| .__/\\__,_||_\\_\\\n"
- f" AUTOMATIC |_| {Colors.ENDC} {Colors.OKCYAN} v1.5.33{Colors.ENDC}\n"
+ f" AUTOMATIC |_| {Colors.ENDC} {Colors.OKCYAN} v1.5.37{Colors.ENDC}\n"
)
diff --git a/tbump.toml b/tbump.toml
index ea102b8..2342dab 100644
--- a/tbump.toml
+++ b/tbump.toml
@@ -1,5 +1,5 @@
[version]
-current = "1.5.33"
+current = "1.5.37"
# Updated regex to support X.Y.Z and X.Y.Z-rc1 (or -beta, -alpha)
regex = '''
(?P\d+)