From 15c26e1a295117041882b5312ac43f5d3e37fbbd Mon Sep 17 00:00:00 2001 From: James Campbell Date: Wed, 22 Jan 2025 00:45:20 -0500 Subject: [PATCH] Improve install tests --- Makefile | 81 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 8cc86ad..9e657f6 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,30 @@ PACKAGE_NAME := pgmon VERSION := 1.0 +SCRIPT := src/$(PACKAGE_NAME).py + +# Where packages are built BUILD_DIR := build +# OS images used to build packages +# These are created with: make docker +# Targets are at the bottom of this file DEB_IMAGE := debian-package-builder RPM_IMAGE := rpm-package-builder EL7_IMAGE := el7-package-builder -SCRIPT := src/$(PACKAGE_NAME).py +# List of versions to test for each distro +INSTALL_TEST_DEBIAN_RELEASES := 10 11 +INSTALL_TEST_REDHAT_RELEASES := 8 9 +INSTALL_TEST_REDHAT_OLD_RELEASES := 7 +INSTALL_TEST_UBUNTU_RELEASES := 20.04 22.04 24.04 + +# The default release to test for each distro (basically pick the last one in the list) +INSTALL_TEST_DEBIAN_RELEASE := $(lastword $(INSTALL_TEST_DEBIAN_RELEASES)) +INSTALL_TEST_REDHAT_RELEASE := $(lastword $(INSTALL_TEST_REDHAT_RELEASES)) +INSTALL_TEST_REDHAT_OLD_RELEASE := $(lastword $(INSTALL_TEST_REDHAT_OLD_RELEASES)) +INSTALL_TEST_UBUNTU_RELEASE := $(lastword $(INSTALL_TEST_UBUNTU_RELEASES)) -INSTALL_TEST_DEBIAN := 11 -INSTALL_TEST_REDHAT := 9 -INSTALL_TEST_UBUNTU := 24.04 ## # These targets are the main ones to use for most things. @@ -21,6 +34,7 @@ INSTALL_TEST_UBUNTU := 24.04 all: deb rpm +# Create a deb package deb: mkdir -p $(BUILD_DIR)/deb docker run --rm \ @@ -29,6 +43,7 @@ deb: --user $(shell id -u):$(shell id -g) \ $(DEB_IMAGE) +# Create an rpm package rpm: mkdir -p $(BUILD_DIR)/rpm docker run --rm \ @@ -37,18 +52,22 @@ rpm: --user $(shell id -u):$(shell id -g) \ $(RPM_IMAGE) +# Create a tarball tgz: rm -rf $(BUILD_DIR)/tgz/root mkdir -p $(BUILD_DIR)/tgz/root $(MAKE) install DESTDIR=$(BUILD_DIR)/tgz/root tar -cz -f $(BUILD_DIR)/tgz/$(PACKAGE_NAME)-$(VERSION).tgz -C $(BUILD_DIR)/tgz/root . +# Clean up the build directory clean: rm -rf $(BUILD_DIR) +# Run unit tests for the script test: cd src ; python3 -m unittest +# Install the script at the specified base directory install: # Set up directories mkdir -p $(DESTDIR)/etc/$(PACKAGE_NAME) @@ -74,24 +93,57 @@ install: # Install logrotate config cp logrotate/${PACKAGE_NAME}.logrotate ${DESTDIR}/etc/logrotate.d/${PACKAGE_NAME} -install-tests: debian-install-test rocky-install-test ubuntu-install-test +# Run all of the install tests +install-tests: all-debian-install-tests all-redhat-install-tests all-ubuntu-install-tests + +.PHONY: all-debian-install-tests all-redhat-install-tests all-ubuntu-install-tests + +# Run all of the Debian install tests +all-debian-install-tests: + $(foreach version, $(INSTALL_TEST_DEBIAN_RELEASES), $(MAKE) debian-install-test INSTALL_TEST_DEBIAN_RELEASE=$(version) ;) + +# Run all of the RedHat install tests +all-redhat-install-tests: + $(foreach version, $(INSTALL_TEST_REDHAT_RELEASES), $(MAKE) redhat-install-test INSTALL_TEST_REDHAT_RELEASE=$(version) ;) + +# Run all of the *old* RedHat install tests +all-redhat-old-install-tests: + $(foreach version, $(INSTALL_TEST_REDHAT_OLD_RELEASES), $(MAKE) redhat-old-install-test INSTALL_TEST_REDHAT_OLD_RELEASE=$(version) ;) + +# Run all of the Ubuntu install tests +all-ubuntu-install-tests: + $(foreach version, $(INSTALL_TEST_REDHAT_RELEASES), $(MAKE) ubuntu-install-test INSTALL_TEST_REDHAT_RELEASE=$(version) ;) + + +.PHONY: debian-install-test redhat-install-test rhel-old-install-test ubuntu-install-test + +# Run the specified (or latest) Debian install test debian-install-test: docker run --rm \ -v ./$(BUILD_DIR)/deb:/output \ - debian:$(INSTALL_TEST_DEBIAN) \ + debian:$(INSTALL_TEST_DEBIAN_RELEASE) \ bash -c 'apt-get update && apt-get install -y /output/$(PACKAGE_NAME)_$(VERSION).deb' -rocky-install-test: +# Run the specified (or latest) RedHat install test +redhat-install-test: docker run --rm \ -v ./$(BUILD_DIR)/rpm:/output \ - rockylinux:$(INSTALL_TEST_REDHAT) \ - bash -c 'yum makecache && yum install -y /output/$(PACKAGE_NAME)-$(VERSION)-1.el$(INSTALL_TEST_REDHAT).noarch.rpm' + rockylinux:$(INSTALL_TEST_REDHAT_RELEASE) \ + bash -c 'dnf makecache && dnf install -y /output/$(PACKAGE_NAME)-$(VERSION).rpm' +# Run the specified (or latest) *old* RedHat install test +rhel-old-install-test: + docker run --rm \ + -v ./$(BUILD_DIR)/rpm:/output \ + rockylinux:$(INSTALL_TEST_REDHAT_OLD_RELEASE) \ + bash -c 'yum makecache && yum install -y /output/$(PACKAGE_NAME)-$(VERSION).el$(INSTALL_TEST_REDHAT_OLD_RELEASE).rpm' + +# Run the specified (or latest) Ubuntu install test ubuntu-install-test: docker run --rm \ -v ./$(BUILD_DIR)/deb:/output \ - ubuntu:$(INSTALL_TEST_UBUNTU) \ + ubuntu:$(INSTALL_TEST_UBUNTU_RELEASE) \ bash -c 'apt-get update && apt-get install -y /output/$(PACKAGE_NAME)_$(VERSION).deb' @@ -120,6 +172,15 @@ package-rpm: -bb /output/SPECS/$(PACKAGE_NAME).spec cp /output/RPMS/noarch/*.rpm /output/ +# RPM package creation logic for old versions of RedHat (ie: 7) +package-rpm-old: + mkdir -p /output/{BUILD,RPMS,SOURCES,SPECS,SRPMS} + cp RPM-OLD/$(PACKAGE_NAME).spec /output/SPECS/ + rpmbuild --define '_topdir /output' \ + --define 'version $(VERSION)' \ + -bb /output/SPECS/$(PACKAGE_NAME).spec + cp /output/RPMS/noarch/*.rpm /output/ + ## # Container targets