mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-02 09:21:39 +00:00
93 lines
3.3 KiB
Docker
Executable File
93 lines
3.3 KiB
Docker
Executable File
# Use build argument for base image to allow using pre-cached base
|
|
ARG BASE_IMAGE=golang:1.25-alpine3.22
|
|
|
|
FROM ${BASE_IMAGE} AS builder
|
|
SHELL ["/bin/sh", "-ecuxo", "pipefail"]
|
|
|
|
# Install build dependencies
|
|
RUN apk add --no-cache \
|
|
ca-certificates \
|
|
build-base \
|
|
git \
|
|
linux-headers \
|
|
bash \
|
|
binutils-gold \
|
|
wget
|
|
|
|
WORKDIR /code
|
|
|
|
# Copy entire source code
|
|
COPY . .
|
|
|
|
# Fix git ownership issue
|
|
RUN git config --global --add safe.directory /code
|
|
|
|
# Download WasmVM library
|
|
RUN --mount=type=cache,target=/tmp/wasmvm \
|
|
set -eux; \
|
|
export ARCH=$(uname -m); \
|
|
WASM_VERSION=$(GOTOOLCHAIN=auto go list -m all | grep github.com/CosmWasm/wasmvm | head -1 || echo ""); \
|
|
if [ ! -z "${WASM_VERSION}" ]; then \
|
|
WASMVM_REPO=$(echo $WASM_VERSION | awk '{print $1}'); \
|
|
WASMVM_VERS=$(echo $WASM_VERSION | awk '{print $2}'); \
|
|
WASMVM_FILE="libwasmvm_muslc.${ARCH}.a"; \
|
|
if [ ! -f "/tmp/wasmvm/${WASMVM_FILE}" ]; then \
|
|
wget -O "/tmp/wasmvm/${WASMVM_FILE}" "https://${WASMVM_REPO}/releases/download/${WASMVM_VERS}/${WASMVM_FILE}"; \
|
|
fi; \
|
|
cp "/tmp/wasmvm/${WASMVM_FILE}" /lib/libwasmvm_muslc.a; \
|
|
fi
|
|
|
|
# Download Go modules
|
|
RUN --mount=type=cache,target=/go/pkg/mod \
|
|
--mount=type=cache,target=/root/.cache/go-build \
|
|
GOTOOLCHAIN=auto go mod download
|
|
|
|
# Build binary with optimizations
|
|
RUN --mount=type=cache,target=/go/pkg/mod \
|
|
--mount=type=cache,target=/root/.cache/go-build \
|
|
set -eux; \
|
|
VERSION=$(git describe --tags --always 2>/dev/null || echo "dev"); \
|
|
COMMIT=$(git log -1 --format='%H' 2>/dev/null || echo "unknown"); \
|
|
LEDGER_ENABLED=false BUILD_TAGS=muslc LINK_STATICALLY=true \
|
|
CGO_ENABLED=1 GOOS=linux \
|
|
GOTOOLCHAIN=auto go build \
|
|
-mod=readonly \
|
|
-tags "netgo,ledger,muslc" \
|
|
-ldflags "-X github.com/cosmos/cosmos-sdk/version.Name=sonr \
|
|
-X github.com/cosmos/cosmos-sdk/version.AppName=snrd \
|
|
-X github.com/cosmos/cosmos-sdk/version.Version=${VERSION} \
|
|
-X github.com/cosmos/cosmos-sdk/version.Commit=${COMMIT} \
|
|
-X github.com/cosmos/cosmos-sdk/version.BuildTags=netgo,ledger,muslc \
|
|
-w -s -linkmode=external -extldflags '-Wl,-z,muldefs -static'" \
|
|
-buildvcs=false \
|
|
-trimpath \
|
|
-o /code/build/snrd \
|
|
./cmd/snrd; \
|
|
file /code/build/snrd; \
|
|
echo "Ensuring binary is statically linked ..."; \
|
|
(file /code/build/snrd | grep "statically linked")
|
|
|
|
# --------------------------------------------------------
|
|
# Final minimal runtime image (default target for snrd)
|
|
FROM alpine:3.17
|
|
|
|
LABEL org.opencontainers.image.title="Sonr Daemon"
|
|
LABEL org.opencontainers.image.source="https://github.com/sonr-io/sonr"
|
|
|
|
# Copy binary from build stage
|
|
COPY --from=builder /code/build/snrd /usr/bin
|
|
COPY --from=builder /lib/libwasmvm_muslc.a /lib/libwasmvm_muslc.a
|
|
|
|
# Copy runtime scripts and make them executable
|
|
COPY --from=builder /code/scripts/test_node.sh /usr/bin/devnet
|
|
COPY --from=builder /code/scripts/testnet-setup.sh /usr/bin/testnet
|
|
COPY --from=builder /code/scripts/lib/ /usr/local/lib/sonr-scripts/
|
|
|
|
# Set up dependencies
|
|
ENV PACKAGES="curl make bash jq sed"
|
|
|
|
# Install minimum necessary dependencies
|
|
RUN apk add --no-cache $PACKAGES
|
|
|
|
WORKDIR /opt
|