rpmbuilder/Makefile
Ben Vincent 80d648ee95 feat: update docker containers
- change to rpmbuilder and actionsdind managed by packer
- update makefile to ignore `resources` folder
2025-01-26 14:49:48 +11:00

59 lines
2.1 KiB
Makefile

# 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)/||" | grep -Ev '(scripts|/resources)')
# Default target to build all packages and versions
.PHONY: all list cache build clean
all: cache $(PACKAGES)
list:
@echo "Builds:"
@for package in $(PACKAGES); do \
echo " '$$package'"; \
done
cache:
echo "Refreshing DNF cache..." && \
dnf clean all && \
dnf makecache
# Build specific package/version
.PHONY: $(PACKAGES)
$(PACKAGES):
@PACKAGE_NAME=$(shell echo $(@) | cut -d/ -f1) && \
PACKAGE_VERSION=$(shell echo $(@) | cut -d/ -f2) && \
echo "Starting build $$PACKAGE_NAME/$$PACKAGE_VERSION" && \
$(MAKE) build PACKAGE_NAME=$$PACKAGE_NAME PACKAGE_VERSION=$$PACKAGE_VERSION
# Build target
build:
@mkdir -p $(ROOT_DIR)/dist/$(PACKAGE_NAME)/
@cd $(RPMS_DIR)/$(PACKAGE_NAME) && \
export PACKAGE_RELEASE=$$(cat $(PACKAGE_VERSION)/release) && \
export PACKAGE_FULL_NAME=$(PACKAGE_NAME)-$(PACKAGE_VERSION)-$$PACKAGE_RELEASE && \
echo "Checking repos for $$PACKAGE_FULL_NAME" && \
if 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:
@echo "Cleaning build artifacts..."
rm -rf $(ROOT_DIR)/dist