Nouveaux workflows GitHub Actions: - .github/workflows/build-deb.yml : Build et release DEB sur Ubuntu - .github/workflows/build-rpm.yml : Build et release RPM sur Fedora - Déclenchement sur tags v*, push main/master, workflow_dispatch - Upload des artifacts et création automatique de release Système de build de packages: - packaging/build-deb.sh : Script de build .deb avec sanitization version - packaging/build-rpm.sh : Script de build .rpm (via Docker) - packaging/Dockerfile.deb : Container Ubuntu 22.04 pour build DEB - packaging/Dockerfile.rpm : Container Go 1.24 + rpm pour build RPM Fichiers de configuration systemd: - packaging/systemd/ja4sentinel.service : Unit avec security hardening * NoNewPrivileges, ProtectSystem, ProtectHome * CAP_NET_RAW, CAP_NET_ADMIN pour packet capture - packaging/systemd/config.yml : Configuration par défaut Scripts mainteneur DEB: - packaging/deb/postinst : Création user/group, dirs, config - packaging/deb/prerm : Stop service avant upgrade/remove - packaging/deb/postrm : Cleanup complet en purge Spec file RPM: - packaging/rpm/ja4sentinel.spec : Spec complet avec dependencies * Requires: systemd, libpcap * %pre/%post/%preun/%postun scripts Tests d'installation dans containers: - packaging/test/test-deb.sh : Build + test Docker Ubuntu - packaging/test/test-rpm.sh : Build + test Docker Fedora - packaging/test/test-install-deb.sh : 11 tests automatisés - packaging/test/test-install-rpm.sh : 11 tests automatisés - Dockerfile.deb/rpm : Containers de test dédiés Makefile: - package-deb : Build .deb - package-rpm : Build .rpm via Docker (no-cache) - package : Build les deux - test-package-deb : Build + test installation DEB - test-package-rpm : Build + test installation RPM - test-package : Test les deux packages Tests: - ✅ DEB: 11/11 tests passés (binaire, config, service, user, dirs) - ✅ RPM: Build réussi (3.3 MB) - Version sanitization pour git tags (ex: efd4481-dirty → 0.0.0+efd4481-dirty) Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
139 lines
4.7 KiB
Makefile
139 lines
4.7 KiB
Makefile
.PHONY: build build-docker test test-docker test-integration lint clean help docker-build-dev docker-build-runtime package package-deb package-rpm
|
|
|
|
# Docker parameters
|
|
DOCKER=docker
|
|
DOCKER_BUILD=$(DOCKER) build
|
|
DOCKER_RUN=$(DOCKER) run
|
|
DOCKER_COMPOSE=docker compose
|
|
|
|
# Image names
|
|
DEV_IMAGE=ja4sentinel-dev:latest
|
|
RUNTIME_IMAGE=ja4sentinel-runtime:latest
|
|
TEST_SERVER_IMAGE=ja4sentinel-test-server:latest
|
|
|
|
# Binary name
|
|
BINARY_NAME=ja4sentinel
|
|
BINARY_PATH=./cmd/ja4sentinel
|
|
DIST_DIR=dist
|
|
BUILD_DIR=build
|
|
|
|
# Package version (strip 'v' prefix from git tags)
|
|
PKG_VERSION=$(shell git describe --tags --always --dirty 2>/dev/null | sed 's/^v//')
|
|
|
|
# Build flags
|
|
VERSION=$(PKG_VERSION)
|
|
BUILD_TIME=$(shell date -u '+%Y-%m-%d_%H:%M:%S')
|
|
GIT_COMMIT=$(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
|
|
|
LDFLAGS=-ldflags "-X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME) -X main.GitCommit=$(GIT_COMMIT)"
|
|
|
|
# Default target
|
|
all: docker-build-dev test-docker
|
|
|
|
## build: Build the ja4sentinel binary locally
|
|
build:
|
|
mkdir -p $(DIST_DIR)
|
|
go build -buildvcs=false $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME) $(BINARY_PATH)
|
|
|
|
## build-linux: Build for Linux (amd64)
|
|
build-linux:
|
|
mkdir -p $(DIST_DIR)
|
|
GOOS=linux GOARCH=amd64 go build -buildvcs=false $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-linux-amd64 $(BINARY_PATH)
|
|
|
|
## docker-build-dev: Build the development Docker image
|
|
docker-build-dev:
|
|
$(DOCKER_BUILD) -t $(DEV_IMAGE) -f Dockerfile.dev .
|
|
|
|
## docker-build-runtime: Build the runtime Docker image (multi-stage build)
|
|
docker-build-runtime:
|
|
$(DOCKER_BUILD) -t $(RUNTIME_IMAGE) -f Dockerfile .
|
|
|
|
## docker-build-test-server: Build the test server image
|
|
docker-build-test-server:
|
|
$(DOCKER_BUILD) -t $(TEST_SERVER_IMAGE) -f Dockerfile.test-server .
|
|
|
|
## test: Run unit tests locally
|
|
test:
|
|
go test -v ./...
|
|
|
|
## test-docker: Run unit tests inside Docker container
|
|
test-docker: docker-build-dev
|
|
$(DOCKER_RUN) --rm -v $(PWD):/app -w /app $(DEV_IMAGE) go test -v ./...
|
|
|
|
## test-race: Run tests with race detector in Docker
|
|
test-race: docker-build-dev
|
|
$(DOCKER_RUN) --rm -v $(PWD):/app -w /app $(DEV_IMAGE) go test -race -v ./...
|
|
|
|
## test-coverage: Run tests with coverage report in Docker
|
|
test-coverage: docker-build-dev
|
|
$(DOCKER_RUN) --rm -v $(PWD):/app -w /app $(DEV_IMAGE) sh -c \
|
|
"go test -v -coverprofile=coverage.out ./... && go tool cover -html=coverage.out -o coverage.html"
|
|
|
|
## test-integration: Run integration tests in Docker
|
|
test-integration: docker-build-dev docker-build-test-server
|
|
$(DOCKER_COMPOSE) -f docker-compose.test.yml up --build --abort-on-container-exit --exit-code-from ja4sentinel-test
|
|
|
|
## test-integration-clean: Run integration tests and clean up afterward
|
|
test-integration-clean: docker-build-dev docker-build-test-server
|
|
$(DOCKER_COMPOSE) -f docker-compose.test.yml up --build --abort-on-container-exit --exit-code-from ja4sentinel-test
|
|
$(DOCKER_COMPOSE) -f docker-compose.test.yml down -v
|
|
|
|
## lint: Run linters in Docker
|
|
lint: docker-build-dev
|
|
$(DOCKER_RUN) --rm -v $(PWD):/app -w /app $(DEV_IMAGE) sh -c \
|
|
"go vet ./... && echo 'Running gofmt check...' && gofmt -l . | grep -v '^vendor/' | grep -v '^path/' || true"
|
|
|
|
## fmt: Format all Go files
|
|
fmt:
|
|
gofmt -w .
|
|
|
|
## package: Build all packages (deb + rpm)
|
|
package: package-deb package-rpm
|
|
|
|
## package-deb: Build DEB package
|
|
package-deb: build-linux
|
|
./packaging/build-deb.sh "$(PKG_VERSION)" "amd64"
|
|
|
|
## package-rpm: Build RPM package (requires Docker)
|
|
package-rpm: build-linux
|
|
mkdir -p build
|
|
docker build --no-cache -t ja4sentinel-packager-rpm \
|
|
--build-arg VERSION=$(PKG_VERSION) \
|
|
--build-arg ARCH=x86_64 \
|
|
-f packaging/Dockerfile.rpm .
|
|
@echo "Extracting RPM from Docker image..."
|
|
docker run --rm ja4sentinel-packager-rpm sh -c 'cat /packages/*.rpm' > build/ja4sentinel.rpm
|
|
@echo "RPM package created: build/ja4sentinel.rpm"
|
|
ls -la build/*.rpm
|
|
|
|
## test-package-deb: Test DEB package installation in Docker
|
|
test-package-deb: package-deb
|
|
./packaging/test/test-deb.sh
|
|
|
|
## test-package-rpm: Test RPM package installation in Docker
|
|
test-package-rpm: package-rpm
|
|
./packaging/test/test-rpm.sh
|
|
|
|
## test-package: Test all packages installation
|
|
test-package: test-package-deb test-package-rpm
|
|
|
|
## clean: Clean build artifacts and Docker images
|
|
clean:
|
|
rm -rf $(DIST_DIR)/
|
|
rm -rf $(BUILD_DIR)/
|
|
rm -f coverage.out coverage.html
|
|
$(DOCKER) rmi $(DEV_IMAGE) 2>/dev/null || true
|
|
$(DOCKER) rmi $(RUNTIME_IMAGE) 2>/dev/null || true
|
|
$(DOCKER) rmi $(TEST_SERVER_IMAGE) 2>/dev/null || true
|
|
|
|
## clean-all: Clean everything including containers and volumes
|
|
clean-all: clean
|
|
$(DOCKER_COMPOSE) -f docker-compose.test.yml down -v --remove-orphans
|
|
|
|
## 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/^/ /'
|