Compare commits

..

2 Commits

Author SHA1 Message Date
d02d801814 import CS snapm-0.4.3-1.el9 2025-09-15 12:48:35 +00:00
7d57a7bfb6 import CS snapm-0.4.0-2.el9 2025-03-19 07:30:38 +00:00
16 changed files with 108 additions and 353 deletions

View File

@ -1 +0,0 @@
1

6
.gitignore vendored
View File

@ -1,5 +1 @@
/snapm-0.4.0.tar.gz
/snapm-0.4.3.tar.gz
/snapm-0.5.1.tar.gz
/snapm-0.5.2.tar.gz
/snapm-0.7.0.tar.gz
SOURCES/snapm-0.4.3.tar.gz

1
.snapm.metadata Normal file
View File

@ -0,0 +1 @@
249e7900beb6fed873b91cc7152cbc5b13e3a450 SOURCES/snapm-0.4.3.tar.gz

View File

@ -1,112 +0,0 @@
From 5d363f97d4ccea2a53c7da48ff9f18a3dd9da274 Mon Sep 17 00:00:00 2001
From: "Bryn M. Reeves" <bmr@redhat.com>
Date: Thu, 8 Jan 2026 18:24:16 +0000
Subject: [PATCH] tests: skip a handful of tests in RH CI environments #915
Resolves: #915
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
tests/__init__.py | 7 +++++++
tests/test_command.py | 4 +++-
tests/test_mounts.py | 4 +++-
tests/test_plugin.py | 3 ++-
4 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/tests/__init__.py b/tests/__init__.py
index fa39b9cb..989fc87f 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -101,3 +101,10 @@ def have_root():
and ``False`` otherwise.
"""
return os.geteuid() == 0 and os.getegid() == 0
+
+
+def in_rh_ci():
+ """Return ``True`` if we appear to be running in CentOS/RHEL CI,
+ and ``False`` otherwise.
+ """
+ return os.environ.get("IN_RH_CI", None) is not None
diff --git a/tests/test_command.py b/tests/test_command.py
index c1e547fb..4319ecd3 100644
--- a/tests/test_command.py
+++ b/tests/test_command.py
@@ -18,7 +18,7 @@ from snapm.report import ReportOpts
import snapm.manager
import boom
-from tests import MockArgs, have_root, BOOT_ROOT_TEST
+from tests import MockArgs, have_root, BOOT_ROOT_TEST, in_rh_ci
from ._util import LvmLoopBacked, StratisLoopBacked
@@ -1079,6 +1079,7 @@ class CommandTests(CommandTestsBase):
args += ["snapset", "delete", "hourly.0"]
self.assertEqual(command.main(args), 0)
+ @unittest.skipIf(in_rh_ci(), "Tests running in RH CI pipeline")
def test_main_snapset_diff(self):
"""Test 'snapm snapset diff' command."""
self.manager.create_snapshot_set("testset0", self.mount_points())
@@ -1110,6 +1111,7 @@ class CommandTests(CommandTestsBase):
self.manager.delete_snapshot_sets(snapm.Selection(name="testset0"))
self.manager.delete_snapshot_sets(snapm.Selection(name="testset1"))
+ @unittest.skipIf(in_rh_ci(), "Tests running in RH CI pipeline")
def test_main_snapset_diffreport(self):
"""Test 'snapm snapset diffreport' command."""
self.manager.create_snapshot_set("testset0", self.mount_points())
diff --git a/tests/test_mounts.py b/tests/test_mounts.py
index d6c7a5a3..db249341 100644
--- a/tests/test_mounts.py
+++ b/tests/test_mounts.py
@@ -24,7 +24,7 @@ import snapm.manager._mounts as mounts
import snapm.manager
from snapm.manager.plugins import format_snapshot_name, encode_mount_point
-from tests import have_root, is_redhat
+from tests import have_root, is_redhat, in_rh_ci
from ._util import LoopBackDevices, LvmLoopBacked
ETC_FSTAB = "/etc/fstab"
@@ -587,6 +587,7 @@ class MountsTests(MountsTestsBase):
# 4. Check that the mount was still discovered (it's just a warning)
self.assertEqual(len(new_mounts._mounts), 1)
+ @unittest.skipIf(in_rh_ci(), "Tests running in RH CI pipeline")
def test_discover_incomplete_api_mounts(self):
"""
Tests that discovery logs warnings for missing API mounts.
@@ -626,6 +627,7 @@ class MountsTestsExec(MountsTestsBase):
"""
need_exec = True
+ @unittest.skipIf(in_rh_ci(), "Tests running in RH CI pipeline")
def test_mount_exec(self):
"""
Tests running a command chrooted inside a mounted snapshot set.
diff --git a/tests/test_plugin.py b/tests/test_plugin.py
index bd4fec08..7532a2fb 100644
--- a/tests/test_plugin.py
+++ b/tests/test_plugin.py
@@ -14,7 +14,7 @@ log = logging.getLogger()
import snapm.manager.plugins as plugins
-from tests import MockPlugin
+from tests import MockPlugin, in_rh_ci
def _find_device_mounts():
@@ -85,6 +85,7 @@ class PluginTests(unittest.TestCase):
for name, origin in snapshot_names.items():
self.assertEqual(None, plugins.parse_snapshot_name(name, origin))
+ @unittest.skipIf(in_rh_ci(), "Tests running in RH CI pipeline")
def test_device_from_mount_point(self):
mounts = _find_device_mounts()
for mount in mounts:
--
2.52.0

106
SPECS/snapm.spec Normal file
View File

@ -0,0 +1,106 @@
%global summary A set of tools for managing snapshots
Name: snapm
Version: 0.4.3
Release: 1%{?dist}
Summary: %{summary}
License: Apache-2.0
URL: https://github.com/snapshotmanager/%{name}
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
BuildArch: noarch
BuildRequires: boom-boot
BuildRequires: lvm2
BuildRequires: make
BuildRequires: stratis-cli
BuildRequires: stratisd
BuildRequires: python3-devel
BuildRequires: python3-sphinx
Requires: python3-snapm = %{version}-%{release}
Recommends: boom-boot
%package -n python3-snapm
Summary: %{summary}
%package -n python3-snapm-doc
Summary: %{summary}
%description
Snapshot manager (snapm) is a tool for managing sets of snapshots on Linux
systems. The snapm tool allows snapshots of multiple volumes to be captured at
the same time, representing the system state at the time the set was created.
%description -n python3-snapm
Snapshot manager (snapm) is a tool for managing sets of snapshots on Linux
systems. The snapm tool allows snapshots of multiple volumes to be captured at
the same time, representing the system state at the time the set was created.
This package provides the python3 snapm module.
%description -n python3-snapm-doc
Snapshot manager (snapm) is a tool for managing sets of snapshots on Linux
systems. The snapm tool allows snapshots of multiple volumes to be captured at
the same time, representing the system state at the time the set was created.
This package provides the python3 snapm module documentation in HTML format.
%prep
%autosetup -p1 -n %{name}-%{version}
%generate_buildrequires
%pyproject_buildrequires
%build
%pyproject_wheel
%{make_build} -C doc html
rm doc/_build/html/.buildinfo
mv doc/_build/html doc/html
rm -rf doc/html/_sources doc/_build
rm -f doc/*.rst doc/Makefile doc/conf.py
%install
%pyproject_install
mkdir -p %{buildroot}/%{_mandir}/man8
%{__install} -p -m 644 man/man8/snapm.8 %{buildroot}/%{_mandir}/man8
%check
%pytest --log-level=debug -v tests/
%files
# Main license for snapm (Apache-2.0)
%license LICENSE
%doc README.md
%{_bindir}/snapm
%doc %{_mandir}/man*/snapm.*
%files -n python3-snapm
# license for snapm (Apache-2.0)
%license LICENSE
%doc README.md
%{python3_sitelib}/%{name}/
%{python3_sitelib}/%{name}*.dist-info/
%files -n python3-snapm-doc
# license for snapm (Apache-2.0)
%license LICENSE
%doc README.md
%doc doc
%changelog
* Mon May 12 2025 Bryn M. Reeves <bmr@redhat.com> - 0.4.3-1
- Update to upstream 0.4.3
Resolves: RHEL-89836
Resolves: RHEL-78813
* Thu Jan 09 2025 Bryn M. Reeves <bmr@redhat.com> - 0.4.0-2
- Bump release and rebuild
Resolves: RHEL-59005
* Wed Dec 18 2024 Bryn M. Reeves <bmr@redhat.com> - 0.4.0-1
- Initial commit on c9s
Resolves: RHEL-59005

View File

@ -1,6 +0,0 @@
--- !Policy
product_versions:
- rhel-10
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}

View File

@ -1,32 +0,0 @@
summary: Run snapm unit tests from dist-git sources
discover:
how: fmf
dist-git-source: true
execute:
how: tmt
prepare:
- name: Install packages
how: install
package:
- stratisd
- stratis-cli
- lvm2
- python3-boom
- python3-pytest
- boom-boot
- rpmdevtools
- name: Enable Stratisd
how: shell
script: |
systemctl enable --now stratisd
- name: Enable CRB
how: shell
script: |
dnf install -y "dnf-command(config-manager)" ;
dnf config-manager --set-enabled crb || true
- name: Create boom OsProfile
how: shell
script: |
boom profile create --from-host

View File

@ -1,136 +0,0 @@
%global summary A set of tools for managing snapshots
Name: snapm
Version: 0.7.0
Release: %autorelease
Summary: %{summary}
License: Apache-2.0
URL: https://github.com/snapshotmanager/%{name}
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
Patch1: 0001-tests-skip-a-handful-of-tests-in-RH-CI-environments-.patch
BuildArch: noarch
BuildRequires: boom-boot
BuildRequires: lvm2
BuildRequires: make
BuildRequires: stratis-cli
BuildRequires: stratisd
BuildRequires: systemd-rpm-macros
BuildRequires: python3-devel
BuildRequires: python3-sphinx
%if 0%{?fedora}
BuildRequires: libfaketime
%endif
Requires: python3-snapm = %{version}-%{release}
Recommends: boom-boot
Recommends: python3-file-magic
%package -n python3-snapm
Summary: %{summary}
%package -n python3-snapm-doc
Summary: %{summary}
%description
Snapshot manager (snapm) is a tool for managing sets of snapshots on Linux
systems. The snapm tool allows snapshots of multiple volumes to be captured at
the same time, representing the system state at the time the set was created.
%description -n python3-snapm
Snapshot manager (snapm) is a tool for managing sets of snapshots on Linux
systems. The snapm tool allows snapshots of multiple volumes to be captured at
the same time, representing the system state at the time the set was created.
This package provides the python3 snapm module.
%description -n python3-snapm-doc
Snapshot manager (snapm) is a tool for managing sets of snapshots on Linux
systems. The snapm tool allows snapshots of multiple volumes to be captured at
the same time, representing the system state at the time the set was created.
This package provides the python3 snapm module documentation in HTML format.
%prep
%autosetup -p1 -n %{name}-%{version}
%generate_buildrequires
%pyproject_buildrequires
%build
%pyproject_wheel
%{make_build} -C doc html
rm doc/_build/html/.buildinfo
mv doc/_build/html doc/html
rm -rf doc/html/_sources doc/_build
rm -f doc/*.rst doc/Makefile doc/conf.py
%install
%pyproject_install
mkdir -p ${RPM_BUILD_ROOT}/%{_sysconfdir}/%{name}/plugins.d
mkdir -p ${RPM_BUILD_ROOT}/%{_sysconfdir}/%{name}/schedule.d
%{__install} -p -m 644 etc/%{name}/snapm.conf ${RPM_BUILD_ROOT}/%{_sysconfdir}/%{name}
%{__install} -p -m 644 etc/%{name}/plugins.d/lvm2-cow.conf ${RPM_BUILD_ROOT}/%{_sysconfdir}/%{name}/plugins.d
%{__install} -p -m 644 etc/%{name}/plugins.d/lvm2-thin.conf ${RPM_BUILD_ROOT}/%{_sysconfdir}/%{name}/plugins.d
%{__install} -p -m 644 etc/%{name}/plugins.d/stratis.conf ${RPM_BUILD_ROOT}/%{_sysconfdir}/%{name}/plugins.d
mkdir -p ${RPM_BUILD_ROOT}/%{_mandir}/man8
mkdir -p ${RPM_BUILD_ROOT}/%{_mandir}/man5
%{__install} -p -m 644 man/man8/snapm.8 ${RPM_BUILD_ROOT}/%{_mandir}/man8
%{__install} -p -m 644 man/man5/snapm.conf.5 ${RPM_BUILD_ROOT}/%{_mandir}/man5
%{__install} -p -m 644 man/man5/snapm-plugins.d.5 ${RPM_BUILD_ROOT}/%{_mandir}/man5
%{__install} -p -m 644 man/man5/snapm-schedule.d.5 ${RPM_BUILD_ROOT}/%{_mandir}/man5
mkdir -p ${RPM_BUILD_ROOT}/%{_unitdir}
%{__install} -p -m 644 systemd/snapm-create@.service ${RPM_BUILD_ROOT}/%{_unitdir}
%{__install} -p -m 644 systemd/snapm-create@.timer ${RPM_BUILD_ROOT}/%{_unitdir}
%{__install} -p -m 644 systemd/snapm-gc@.service ${RPM_BUILD_ROOT}/%{_unitdir}
%{__install} -p -m 644 systemd/snapm-gc@.timer ${RPM_BUILD_ROOT}/%{_unitdir}
mkdir -p ${RPM_BUILD_ROOT}/%{_tmpfilesdir}
%{__install} -p -m 644 systemd/tmpfiles.d/%{name}.conf ${RPM_BUILD_ROOT}/%{_tmpfilesdir}/
%{__install} -d -m 0700 ${RPM_BUILD_ROOT}/%{_rundir}/%{name}
%{__install} -d -m 0700 ${RPM_BUILD_ROOT}/%{_rundir}/%{name}/mounts
%{__install} -d -m 0700 ${RPM_BUILD_ROOT}/%{_rundir}/%{name}/lock
%check
%pytest --log-level=debug -v tests/
%files
# Main license for snapm (Apache-2.0)
%license LICENSE
%doc README.md
%{_bindir}/snapm
%doc %{_mandir}/man*/snapm*
%attr(644, -, -) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/snapm.conf
%attr(644, -, -) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/plugins.d/*
%dir %attr(755, -, -) %{_sysconfdir}/%{name}/schedule.d
%attr(644, -, -) %{_unitdir}/snapm-create@.service
%attr(644, -, -) %{_unitdir}/snapm-create@.timer
%attr(644, -, -) %{_unitdir}/snapm-gc@.service
%attr(644, -, -) %{_unitdir}/snapm-gc@.timer
%attr(644, -, -) %{_tmpfilesdir}/%{name}.conf
%dir %{_rundir}/%{name}/
%dir %{_rundir}/%{name}/mounts
%dir %{_rundir}/%{name}/lock
%files -n python3-snapm
# license for snapm (Apache-2.0)
%license LICENSE
%doc README.md
%{python3_sitelib}/%{name}/
%{python3_sitelib}/%{name}*.dist-info/
%files -n python3-snapm-doc
# license for snapm (Apache-2.0)
%license LICENSE
%doc README.md
%doc doc
%changelog
%autochangelog

View File

@ -1 +0,0 @@
SHA512 (snapm-0.7.0.tar.gz) = 13f88538070690bd4a051968f6a23abfc65c5bc5e30ed9fc75dd9cf0518c295099e237b66d704a560df5e9fb8ef5fd544ab72bd302f296be7d077feb78480368

View File

@ -1,2 +0,0 @@
summary: Test snapm --help output
test: ./test.sh

View File

@ -1,8 +0,0 @@
#!/bin/sh -eux
echo $TMT_SOURCE_DIR
ls $TMT_SOURCE_DIR
tmp=$(mktemp)
snapm --help > "$tmp"
grep 'Snapshot Manager' "$tmp"
rm "$tmp"

View File

@ -1,6 +0,0 @@
summary: Run snapm upstream test suite
test: ./prepare-host-environment.sh; ./run-unit-tests.sh
require:
- python3-pytest
- python3-devel
duration: 90m

View File

@ -1,11 +0,0 @@
#!/usr/bin/bash
# Prepare the host environment for running the snapm tests.
# This includes installing missing dependencies and tools.
set -euxo pipefail
# Move to the checked out git repo with the test plans
# this should be the root of the dist-git repo
cd "${TMT_TREE}"
sudo dnf builddep -y snapm.spec

View File

@ -1,25 +0,0 @@
#!/usr/bin/bash
# Execute snapm unit tests from a checked out dist-git repo
set -euxo pipefail
source /etc/os-release
# Move to the directory with sources
cd ${TMT_SOURCE_DIR}
# Extract the Source0 basename without extension
SRC_DIR=$(spectool --source 0 snapm.spec | sed 's/.\+\(snapm-[0-9.]\+\)\.tar\.gz/\1/')
# Move to the extracted sources directory (patches are applied by default)
cd "${SRC_DIR}"
# Configure snapm
cp -r etc/snapm/ /etc
cp systemd/*.service systemd/*.timer /usr/lib/systemd/system
cp systemd/tmpfiles.d/snapm.conf /usr/lib/tmpfiles.d
systemctl daemon-reload
systemd-tmpfiles --create /usr/lib/tmpfiles.d/snapm.conf
# Run tests
sudo IN_RH_CI=yes pytest -v --log-level=debug tests/

View File

@ -1,2 +0,0 @@
summary: Test snapm --version output
test: ./test.sh

View File

@ -1,6 +0,0 @@
#!/bin/sh -eux
tmp=$(mktemp)
snapm --version > "$tmp"
grep '0.7.0' "$tmp"
rm "$tmp"