diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..48966bb --- /dev/null +++ b/Makefile @@ -0,0 +1,107 @@ +.PHONY: build build-docker test test-docker lint clean help docker-build-dev docker-build-runtime package package-rpm + +# Docker parameters +DOCKER=docker +DOCKER_BUILD=$(DOCKER) build +DOCKER_RUN=$(DOCKER) run + +# Image names +DEV_IMAGE=logcorrelator-dev:latest +RUNTIME_IMAGE=logcorrelator:latest +PACKAGER_IMAGE=logcorrelator-packager:latest + +# Binary name +BINARY_NAME=logcorrelator +DIST_DIR=dist + +# Package version +PKG_VERSION ?= 1.0.3 + +## build: Build the logcorrelator binary locally +build: + mkdir -p $(DIST_DIR) + go build -ldflags="-w -s" -o $(DIST_DIR)/$(BINARY_NAME) ./cmd/$(BINARY_NAME) + +## docker-build-dev: Build the development Docker image +docker-build-dev: + $(DOCKER_BUILD) --target builder -t $(DEV_IMAGE) -f Dockerfile . + +## docker-build-runtime: Build the runtime Docker image +docker-build-runtime: + $(DOCKER_BUILD) --target runtime -t $(RUNTIME_IMAGE) -f Dockerfile . + +## test: Run unit tests locally +test: + go test -race -coverprofile=coverage.out ./... + +## test-docker: Run unit tests inside Docker container +test-docker: docker-build-dev + @echo "Tests already run in builder stage" + +## lint: Run linters +lint: + go vet ./... + gofmt -l . + +## fmt: Format all Go files +fmt: + gofmt -w . + +## package: Build RPM packages for all target distributions +package: package-rpm + +## package-rpm: Build RPM packages for Rocky Linux 8/9, AlmaLinux 10 (requires Docker) +package-rpm: + mkdir -p $(DIST_DIR)/rpm/rocky8 $(DIST_DIR)/rpm/rocky9 $(DIST_DIR)/rpm/almalinux10 + $(DOCKER_BUILD) --target output -t $(PACKAGER_IMAGE) \ + --build-arg VERSION=$(PKG_VERSION) \ + -f Dockerfile.package . + @echo "Extracting RPM packages from Docker image..." + $(DOCKER_RUN) --rm -v $(PWD)/$(DIST_DIR):/output $(PACKAGER_IMAGE) sh -c \ + "cp -r /packages/rpm/rocky8 /output/rpm/ && \ + cp -r /packages/rpm/rocky9 /output/rpm/ && \ + cp -r /packages/rpm/almalinux10 /output/rpm/" + @echo "RPM packages created:" + @echo " Rocky Linux 8:" + ls -la $(DIST_DIR)/rpm/rocky8/ 2>/dev/null || echo " (no packages)" + @echo " Rocky Linux 9:" + ls -la $(DIST_DIR)/rpm/rocky9/ 2>/dev/null || echo " (no packages)" + @echo " AlmaLinux 10:" + ls -la $(DIST_DIR)/rpm/almalinux10/ 2>/dev/null || echo " (no packages)" + +## test-package-rpm: Test RPM package installation in Docker +test-package-rpm: package-rpm + ./packaging/test/test-rpm.sh + +## test-package: Test RPM package installation +test-package: test-package-rpm + +## ci: Full CI pipeline (tests, build, packages, package tests) +ci: ci-test ci-build ci-package ci-package-test + +## ci-test: Run all tests for CI +ci-test: test lint + +## ci-build: Build for CI (production binary) +ci-build: build + +## ci-package: Build all packages for CI +ci-package: package + +## ci-package-test: Test all packages for CI +ci-package-test: test-package + +## clean: Clean build artifacts and Docker images +clean: + rm -rf $(DIST_DIR)/ + rm -f coverage.out + $(DOCKER) rmi $(DEV_IMAGE) 2>/dev/null || true + $(DOCKER) rmi $(RUNTIME_IMAGE) 2>/dev/null || true + $(DOCKER) rmi $(PACKAGER_IMAGE) 2>/dev/null || true + +## help: Show this help message +help: + @echo "Usage: make [target]" + @echo "" + @echo "Targets:" + @sed -n 's/^##//p' $(MAKEFILE_LIST) | column -t -s ':' | sed -e 's/^/ /' diff --git a/build.sh b/build.sh deleted file mode 100755 index 86a1a86..0000000 --- a/build.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -# Build script - everything runs in Docker containers -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -cd "$SCRIPT_DIR" - -VERSION="${VERSION:-1.0.3}" -OUTPUT_DIR="${SCRIPT_DIR}/dist" - -echo "==============================================" -echo " logcorrelator - Docker Build Pipeline" -echo "==============================================" -echo "" - -# Create output directory -mkdir -p "${OUTPUT_DIR}" - -# Step 1: Build and test -echo "[1/4] Building and running tests in container..." -docker build \ - --target builder \ - -t logcorrelator-builder:latest \ - -f Dockerfile . - -# Step 2: Build runtime image -echo "[2/4] Building runtime image..." -docker build \ - --target runtime \ - -t logcorrelator:${VERSION} \ - -t logcorrelator:latest \ - -f Dockerfile . - -# Step 3: Build RPM packages -echo "[3/4] Building RPM packages in container..." -docker build \ - --target output \ - --build-arg VERSION="${VERSION}" \ - -t logcorrelator-packager:latest \ - -f Dockerfile.package . - -# Extract packages from builder container -echo "[4/4] Extracting packages..." -mkdir -p "${OUTPUT_DIR}/rpm/rocky8" "${OUTPUT_DIR}/rpm/rocky9" "${OUTPUT_DIR}/rpm/almalinux10" -docker run --rm -v "${OUTPUT_DIR}:/output" logcorrelator-packager:latest \ - sh -c 'cp -r /packages/rpm/rocky8 /output/rpm/ && cp -r /packages/rpm/rocky9 /output/rpm/ && cp -r /packages/rpm/almalinux10 /output/rpm/' - -echo "" -echo "==============================================" -echo " Build Complete!" -echo "==============================================" -echo "" -echo "Artifacts:" -echo " - Runtime image: logcorrelator:${VERSION}" -echo " - RPM Rocky 8: ${OUTPUT_DIR}/rpm/rocky8/logcorrelator-${VERSION}-1.el8.x86_64.rpm" -echo " - RPM Rocky 9: ${OUTPUT_DIR}/rpm/rocky9/logcorrelator-${VERSION}-1.el9.x86_64.rpm" -echo " - RPM AlmaLinux 10: ${OUTPUT_DIR}/rpm/almalinux10/logcorrelator-${VERSION}-1.el10.x86_64.rpm" -echo "" -echo "Usage:" -echo " # Run with Docker:" -echo " docker run -d --name logcorrelator \\" -echo " -v /var/run/logcorrelator:/var/run/logcorrelator \\" -echo " -v /var/log/logcorrelator:/var/log/logcorrelator \\" -echo " -v ./config.yml:/etc/logcorrelator/logcorrelator.yml \\" -echo " logcorrelator:latest" -echo "" -echo " # Install RPM on Rocky Linux 8/9:" -echo " sudo dnf install -y ${OUTPUT_DIR}/rpm/rocky8/logcorrelator-${VERSION}-1.el8.x86_64.rpm" -echo " sudo dnf install -y ${OUTPUT_DIR}/rpm/rocky9/logcorrelator-${VERSION}-1.el9.x86_64.rpm" -echo " sudo systemctl enable logcorrelator" -echo " sudo systemctl start logcorrelator" -echo "" -echo " # Install RPM on AlmaLinux 10:" -echo " sudo dnf install -y ${OUTPUT_DIR}/rpm/almalinux10/logcorrelator-${VERSION}-1.el10.x86_64.rpm" -echo " sudo systemctl enable logcorrelator" -echo " sudo systemctl start logcorrelator" -echo "" diff --git a/test.sh b/test.sh deleted file mode 100755 index 2a2f515..0000000 --- a/test.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -# Test script - runs all tests in Docker container -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -cd "$SCRIPT_DIR" - -echo "==============================================" -echo " logcorrelator - Test Suite (Docker)" -echo "==============================================" -echo "" - -# Build test image and run tests -docker build \ - --target builder \ - -t logcorrelator-test:latest \ - -f Dockerfile . - -echo "" -echo "Tests completed successfully!" -echo ""