# syntax=docker/dockerfile:1 # ============================================================================= # logcorrelator - Dockerfile de build et packaging RPM multi-distros # Optimisé avec stages communs et builds parallèles # ============================================================================= # ============================================================================= # Stage 0: Common RPM tools - Shared across all distributions # ============================================================================= FROM ruby:3.2-bookworm AS rpm-common-tools WORKDIR /package # Install RPM build tools and fpm (COMMON - cached across all distros) RUN --mount=type=cache,target=/var/cache/dnf \ --mount=type=cache,target=/var/cache/ruby \ dnf install -y epel-release && \ dnf install -y ruby rubygems ruby-devel rpm-build gcc make -y && \ gem install fpm -v 1.16.0 --no-document && \ dnf clean all # Common script to build RPM (parameterized) COPY <" \ --rpm-dist \${DIST_NAME} \ --depends "systemd" \ --after-install /tmp/scripts/post \ --before-remove /tmp/scripts/preun \ --after-remove /tmp/scripts/postun \ -p /packages/rpm/\${DIST_NAME}/logcorrelator-\${VERSION}-1.\${DIST_NAME}.x86_64.rpm \ usr/bin/logcorrelator \ etc/logcorrelator/logcorrelator.yml \ etc/logcorrelator/logcorrelator.yml.example \ var/log/logcorrelator \ var/run/logcorrelator \ var/lib/logcorrelator \ etc/systemd/system/logcorrelator.service \ etc/logrotate.d/logcorrelator echo "RPM built for \${DIST_NAME}" EOF RUN chmod +x /build-rpm.sh # ============================================================================= # Stage 1: Builder - Compilation du binaire Go (shared by all RPM builds) # ============================================================================= FROM golang:1.21 AS builder WORKDIR /build # Install dependencies (minimal, just for Go build) RUN --mount=type=cache,target=/var/cache/apt \ apt-get update && apt-get install -y --no-install-recommends \ git \ && rm -rf /var/lib/apt/lists/* # Copy go mod files COPY go.mod go.sum ./ # Download dependencies (cached) RUN --mount=type=cache,target=/go/pkg/mod \ go mod download # Copy source code COPY . . # Build binary for Linux ARG VERSION=1.0.0 RUN --mount=type=cache,target=/go/pkg/mod \ mkdir -p dist && \ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ go build -ldflags="-w -s -X main.Version=${VERSION}" \ -o dist/logcorrelator \ ./cmd/logcorrelator # ============================================================================= # Stage 2: RPM Package builder for Enterprise Linux 8 (el8) # Uses common RPM tools from rpm-common-tools stage # ============================================================================= FROM rpm-common-tools AS rpm-el8-builder WORKDIR /package # Copy builder stage for binary COPY --from=builder /build /build # Build RPM for el8 ARG VERSION=1.0.0 RUN /build-rpm.sh el8 rockylinux:8 ${VERSION} # ============================================================================= # Stage 3: RPM Package builder for Enterprise Linux 9 (el9) # Uses common RPM tools from rpm-common-tools stage # ============================================================================= FROM rpm-common-tools AS rpm-el9-builder WORKDIR /package # Copy builder stage for binary COPY --from=builder /build /build # Build RPM for el9 ARG VERSION=1.0.0 RUN /build-rpm.sh el9 rockylinux:9 ${VERSION} # ============================================================================= # Stage 4: RPM Package builder for Enterprise Linux 10 (el10) # Uses common RPM tools from rpm-common-tools stage # ============================================================================= FROM rpm-common-tools AS rpm-el10-builder WORKDIR /package # Copy builder stage for binary COPY --from=builder /build /build # Build RPM for el10 ARG VERSION=1.0.0 RUN /build-rpm.sh el10 almalinux:10 ${VERSION} # ============================================================================= # Stage 5: Output - Image finale avec les packages RPM # ============================================================================= FROM alpine:latest AS output WORKDIR /packages COPY --from=rpm-el8-builder /packages/rpm/el8/*.rpm /packages/rpm/el8/ COPY --from=rpm-el9-builder /packages/rpm/el9/*.rpm /packages/rpm/el9/ COPY --from=rpm-el10-builder /packages/rpm/el10/*.rpm /packages/rpm/el10/ CMD ["sh", "-c", "echo '=== RPM Enterprise Linux 8 ===' && ls -la /packages/rpm/el8/ && echo '' && echo '=== RPM Enterprise Linux 9 ===' && ls -la /packages/rpm/el9/ && echo '' && echo '=== RPM Enterprise Linux 10 ===' && ls -la /packages/rpm/el10/'"]