Some checks are pending
docker-build-cometbft / vars (push) Waiting to run
docker-build-cometbft / build-images (amd64, ubuntu-24.04) (push) Blocked by required conditions
docker-build-cometbft / build-images (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
docker-build-cometbft / merge-images (push) Blocked by required conditions
docker-build-e2e-node / vars (push) Waiting to run
docker-build-e2e-node / build-images (amd64, ubuntu-24.04) (push) Blocked by required conditions
docker-build-e2e-node / build-images (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
docker-build-e2e-node / merge-images (push) Blocked by required conditions
56 lines
1.9 KiB
Docker
56 lines
1.9 KiB
Docker
# Multi-stage build Dockerfile for CometBFT end-to-end testing
|
|
# Stage 1: Build environment - compiles the application and test node
|
|
FROM cometbft/cometbft-db-testing:v0.14.2 AS build
|
|
|
|
WORKDIR /src/cometbft
|
|
|
|
# Copy Go module files and download dependencies
|
|
# This is done before copying the rest of the code to leverage Docker's build cache
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
|
|
# Copy the entire codebase into the container
|
|
COPY . .
|
|
|
|
# Set build options to include specific features and databases
|
|
ENV COMETBFT_BUILD_OPTIONS=badgerdb,boltdb,cleveldb,rocksdb
|
|
RUN make build
|
|
RUN cd test/e2e && make node
|
|
|
|
# Stage 2: Final image - minimal runtime environment
|
|
FROM debian:bookworm-slim AS runtime
|
|
|
|
# Update system packages and install network utilities
|
|
RUN apt-get -qq update -y && apt-get -qq upgrade -y >/dev/null
|
|
RUN apt-get -qq install -y iputils-ping iproute2 >/dev/null
|
|
RUN apt install libsnappy-dev libgflags-dev libleveldb-dev -y >/dev/null
|
|
|
|
WORKDIR /cometbft
|
|
VOLUME /cometbft
|
|
ENV CMTHOME=/cometbft
|
|
|
|
# Configure Go race detector to halt on error
|
|
ENV GORACE="halt_on_error=1"
|
|
|
|
# Copy RocksDB shared libraries from the build stage
|
|
COPY --from=build /usr/local/lib/librocksdb.so* /lib/
|
|
|
|
# Copy executables from the build stage
|
|
# - entrypoint script for container initialization
|
|
# - cometbft binary for the blockchain node
|
|
# - app binary for the test application
|
|
COPY --from=build /src/cometbft/test/e2e/docker/entrypoint* /usr/bin/
|
|
COPY --from=build /src/cometbft/build/cometbft /usr/bin/cometbft
|
|
COPY --from=build /src/cometbft/test/e2e/build/node /usr/bin/app
|
|
|
|
# Expose ports:
|
|
# - 26656: P2P communication between nodes
|
|
# - 26657: RPC server for API requests
|
|
# - 26660: ABCI server for application communication
|
|
# - 6060: Prometheus metrics endpoint
|
|
EXPOSE 26656 26657 26660 6060
|
|
|
|
# Set the entrypoint script to initialize the container
|
|
ENTRYPOINT ["/usr/bin/entrypoint"]
|
|
# Default command to run when container starts (can be overridden)
|
|
CMD ["node"]
|