From 8b7d14a72c0e2209522c55a2d0ddbfe0c2be4b6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Mass=C3=A9?= Date: Mon, 24 Nov 2025 15:39:38 -0500 Subject: [PATCH] toward second release --- .gitignore | 2 +- Makefile | 27 +++++++++++++++++++++------ packaging/zvirt.spec | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 packaging/zvirt.spec diff --git a/.gitignore b/.gitignore index fb74213..567609b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -zvirt-*.tar.gz +build/ diff --git a/Makefile b/Makefile index ef5ff9a..058de5d 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ PREFIX ?= /usr/local -.PHONY: all test unit-test syntax-test e2e-test lint clean prerequisites install uninstall release tarball install-tarball +.PHONY: all test unit-test syntax-test e2e-test lint clean prerequisites install uninstall release tarball install-tarball srpm rpm +VERSION := $(shell git describe --tags --abbrev=0) all: syntax-test lint unit-test e2e-test release @@ -14,6 +15,7 @@ prerequisites: @/bin/bash -Eeuo pipefail -c 'if ! yq --version &>/dev/null; then dnf install -y yq; fi' @/bin/bash -Eeuo pipefail -c 'if ! shellcheck --version &>/dev/null; then dnf install -y shellcheck; fi' @/bin/bash -Eeuo pipefail -c 'if ! gh --version &>/dev/null; then dnf install -y gh; fi' + @/bin/bash -Eeuo pipefail -c 'if ! rpmbuild --version &>/dev/null; then dnf install -y rpm-build; fi' unit-test: prerequisites @echo "Running unit tests..." @@ -25,7 +27,7 @@ e2e-test: prerequisites install: @echo "Installing zvirt..." - @install -d $(PREFIX)/lib/zvirt + @install -d $(PREFIX)/lib/zvirt $(PREFIX)/bin @install -m 755 src/bin/zvirt $(PREFIX)/bin/zvirt @install -m 644 src/lib/zvirt/core.sh $(PREFIX)/lib/zvirt/core.sh @@ -36,19 +38,32 @@ uninstall: tarball: @echo "Creating release tarball..." - @set -Eeuo pipefail; VERSION=$$(git describe --tags --abbrev=0); tar --exclude-vcs --exclude='*.swp' -czf zvirt-$$VERSION.tar.gz --transform "s|^src|zvirt-$$VERSION|" src + @mkdir -p build + @tar --exclude-vcs --exclude='*.swp' -czf build/zvirt-$(VERSION).tar.gz --transform "s|^src|zvirt-$(VERSION)|" src install-tarball: tarball @echo "Installing zvirt from release tarball..." - @set -Eeuo pipefail; VERSION=$$(git describe --tags --abbrev=0); tar -xvzf zvirt-$$VERSION.tar.gz --strip-components=1 -C $(PREFIX) + @tar -xvzf build/zvirt-$(VERSION).tar.gz --strip-components=1 -C $(PREFIX) +srpm: prerequisites tarball + @echo "Creating SRPM..." + @git ls-files | sed 's|^|./|' > build/filelist.txt + @mkdir -p build/zvirt-$(VERSION)/SOURCES + @tar --verbatim-files-from --files-from=build/filelist.txt -cvzf build/zvirt-$(VERSION)/SOURCES/zvirt-$(VERSION).tar.gz --transform "s|^./|zvirt-$(VERSION)/|" + @rpmbuild --define "_topdir $$(pwd)/build/zvirt-$(VERSION)" --define "version $(VERSION)" -ba packaging/zvirt.spec +rpm: prerequisites + @echo "Creating RPM..." + @rpmbuild --define "_topdir $$(pwd)/build/zvirt-$(VERSION)" --define "version $(VERSION)" -bb packaging/zvirt.spec -release: prerequisites tarball +release: prerequisites tarball srpm rpm @echo "Creating GitHub release..." - @set -Eeuo pipefail; VERSION=$$(git describe --tags --abbrev=0); gh release create $$VERSION zvirt-$$VERSION.tar.gz --draft --title "zvirt $$VERSION" --notes "Release $$VERSION of zvirt." + @gh release create $(VERSION) build/zvirt-$(VERSION).tar.gz build/zvirt-$(VERSION)/RPMS/noarch/zvirt-$(VERSION)-*.rpm build/zvirt-$(VERSION)/SRPMS/zvirt-$(VERSION)-*.rpm --draft --title "zvirt $(VERSION)" --notes "Release $(VERSION) of zvirt." clean: + @echo "Cleaning up..." + @rm -rf build/zvirt-* + lint: prerequisites @echo "Linting..." @cd src && shellcheck --severity=error bin/zvirt lib/zvirt/*.sh diff --git a/packaging/zvirt.spec b/packaging/zvirt.spec new file mode 100644 index 0000000..216c194 --- /dev/null +++ b/packaging/zvirt.spec @@ -0,0 +1,40 @@ +Name: zvirt +Version: %{version} +Release: 1%{?dist} +Summary: Libvirt ZFS snapshots utility + +License: MIT +URL: https://github.com/nmasse-itix/zvirt +Source0: %{name}-%{version}.tar.gz + +BuildArch: noarch + +Requires: bash +Requires: libvirt +Requires: zfs + +%description +Zvirt takes snapshots of Libvirt domains using ZFS. +It supports both crash-consistent and live snapshots. + +At the end, all components of a domain (Domain definition, TPM, NVRAM, +VirtioFS, ZFS snapshots of the underlying storage volumes) are captured +as a set of consistent ZFS snapshots. + +%prep +%setup -q + +%build +# Nothing to build for a shell script + +%install +make PREFIX=%{buildroot}%{_prefix} install + +%files +%{_bindir}/zvirt +%{_prefix}/lib/zvirt/core.sh +%dir %{_prefix}/lib/zvirt + +%changelog +* Mon Nov 24 2025 Nicolas Massé - 0.0.1-1 +- Initial package release