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+)