From fdbf375076996eece188251cd7a7ff6ac8be455b Mon Sep 17 00:00:00 2001 From: Ben Vincent Date: Sun, 1 Dec 2024 01:09:27 +1100 Subject: [PATCH] feat: only build packages that dont exist - check the rpm repo to confirm if a package already exists --- Makefile | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 18fe99c..304421b 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,23 @@ # Variables ROOT_DIR := $(PWD) RPMS_DIR := $(ROOT_DIR)/rpms +REPO_OPTIONS := --disablerepo=* --enablerepo=unkin # Automatically find all package/version directories PACKAGES := $(shell find $(RPMS_DIR) -mindepth 2 -maxdepth 2 -type d | sed "s|$(RPMS_DIR)/||") # Default target to build all packages and versions -.PHONY: all list build buildall clean -all: $(PACKAGES) +.PHONY: all list cache build clean +all: cache $(PACKAGES) list: @echo "$(PACKAGES)" +cache: + echo "Refreshing DNF cache..." && \ + sudo dnf clean all && \ + sudo dnf makecache && \ + # Build specific package/version .PHONY: $(PACKAGES) $(PACKAGES): @@ -26,17 +32,22 @@ build: @echo "Preparing to build $(PACKAGE_NAME) version $(PACKAGE_VERSION)" @cd $(RPMS_DIR)/$(PACKAGE_NAME) && \ export PACKAGE_RELEASE=$$(cat $(PACKAGE_VERSION)/release) && \ - echo "Using PACKAGE_RELEASE=$${PACKAGE_RELEASE}" && \ - docker build \ - --build-arg PACKAGE_VERSION=$(PACKAGE_VERSION) \ - --build-arg PACKAGE_RELEASE=$${PACKAGE_RELEASE} \ - -t $$(echo $(PACKAGE_NAME)-builder \ - | tr '[:upper:]' '[:lower:]') . && \ - docker create --name $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder \ - $$(echo $(PACKAGE_NAME)-builder | tr '[:upper:]' '[:lower:]') && \ - docker start -a $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder && \ - docker cp $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder:/app/dist/. $(ROOT_DIR)/dist/$(PACKAGE_NAME)/ && \ - docker rm $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder + export PACKAGE_FULL_NAME=$(PACKAGE_NAME)-$(PACKAGE_VERSION)-$$PACKAGE_RELEASE && \ + if sudo dnf info $$PACKAGE_FULL_NAME $(REPO_OPTIONS) > /dev/null 2>&1; then \ + echo "Skipping build for $(PACKAGE_NAME) version $(PACKAGE_VERSION) (already exists in the repository)"; \ + else \ + echo "Building RPM for $(PACKAGE_NAME) version $(PACKAGE_VERSION)"; \ + docker build \ + --build-arg PACKAGE_VERSION=$(PACKAGE_VERSION) \ + --build-arg PACKAGE_RELEASE=$${PACKAGE_RELEASE} \ + -t $$(echo $(PACKAGE_NAME)-builder \ + | tr '[:upper:]' '[:lower:]') . && \ + docker create --name $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder \ + $$(echo $(PACKAGE_NAME)-builder | tr '[:upper:]' '[:lower:]') && \ + docker start -a $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder && \ + docker cp $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder:/app/dist/. $(ROOT_DIR)/dist/$(PACKAGE_NAME)/ && \ + docker rm $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder + fi # Clean target clean: