FROM golang:1.23-alpine AS builder WORKDIR /app # Install build dependencies RUN apk add --no-cache git # Copy module files first to leverage Docker cache for dependencies COPY go.mod go.sum ./ RUN go mod download # Copy the rest of the source code COPY . . # Argument to control the number of generated files (default to 5000 for a moderate delay) ARG FILE_COUNT=5000 # Generate the dummy source code to simulate a large codebase RUN echo "Generating $FILE_COUNT dummy files..." && \ go run gen.go -count $FILE_COUNT # Build the application # Using -a to force rebuilding of all packages to simulate a fresh, heavy build RUN echo "Starting heavy build..." && \ go build -a -o app . # Final stage: Create a minimal image FROM alpine:latest WORKDIR /root/ COPY --from=builder /app/app . CMD ["./app"]