mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
.
This commit is contained in:
7
.github/workflows/docker.yml
vendored
7
.github/workflows/docker.yml
vendored
@ -29,16 +29,11 @@ jobs:
|
|||||||
- uses: Swatinem/rust-cache@v2
|
- uses: Swatinem/rust-cache@v2
|
||||||
with:
|
with:
|
||||||
cache-on-failure: true
|
cache-on-failure: true
|
||||||
- name: Install cross main
|
|
||||||
id: cross_main
|
|
||||||
run: |
|
|
||||||
cargo install cross --git https://github.com/cross-rs/cross
|
|
||||||
- name: Log in to Docker
|
- name: Log in to Docker
|
||||||
run: |
|
run: |
|
||||||
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username ${DOCKER_USERNAME} --password-stdin
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username ${DOCKER_USERNAME} --password-stdin
|
||||||
- name: Set up Docker builder
|
- name: Set up Docker builder
|
||||||
run: |
|
run: |
|
||||||
docker run --privileged --rm tonistiigi/binfmt --install arm64,amd64
|
docker buildx create --use --name builder
|
||||||
docker buildx create --use --name cross-builder
|
|
||||||
- name: Build and push nanoreth image
|
- name: Build and push nanoreth image
|
||||||
run: make IMAGE_NAME=$IMAGE_NAME DOCKER_IMAGE_NAME=$DOCKER_IMAGE_NAME PROFILE=maxperf docker-build-push-latest
|
run: make IMAGE_NAME=$IMAGE_NAME DOCKER_IMAGE_NAME=$DOCKER_IMAGE_NAME PROFILE=maxperf docker-build-push-latest
|
||||||
46
Cross.toml
46
Cross.toml
@ -1,46 +0,0 @@
|
|||||||
[build]
|
|
||||||
pre-build = [
|
|
||||||
# Use HTTPS for package sources
|
|
||||||
"apt-get update && apt-get install --assume-yes --no-install-recommends ca-certificates",
|
|
||||||
# "find /etc/apt/ -type f \\( -name '*.list' -o -name '*.sources' \\) -exec sed -i 's|http://|https://|g' {} +",
|
|
||||||
|
|
||||||
# Configure APT retries and timeouts to handle network issues
|
|
||||||
"echo 'Acquire::Retries \"3\";' > /etc/apt/apt.conf.d/80-retries",
|
|
||||||
"echo 'Acquire::http::Timeout \"60\";' >> /etc/apt/apt.conf.d/80-retries",
|
|
||||||
"echo 'Acquire::ftp::Timeout \"60\";' >> /etc/apt/apt.conf.d/80-retries",
|
|
||||||
|
|
||||||
# rust-bindgen dependencies: llvm-dev libclang-dev (>= 10) clang (>= 10)
|
|
||||||
# See: https://github.com/cross-rs/cross/wiki/FAQ#using-clang--bindgen for
|
|
||||||
# recommended clang versions for the given cross and bindgen version.
|
|
||||||
"apt-get update && apt-get install --assume-yes --no-install-recommends llvm-dev libclang-dev clang",
|
|
||||||
]
|
|
||||||
|
|
||||||
[target.x86_64-pc-windows-gnu]
|
|
||||||
# Why do we need a custom Dockerfile on Windows:
|
|
||||||
# 1. `reth-libmdbx` stopped working with MinGW 9.3 that cross image comes with.
|
|
||||||
# 2. To be able to update the version of MinGW, we need to also update the Ubuntu that the image is based on.
|
|
||||||
#
|
|
||||||
# Also see https://github.com/cross-rs/cross/issues/1667
|
|
||||||
# Inspired by https://github.com/cross-rs/cross/blob/9e2298e17170655342d3248a9c8ac37ef92ba38f/docker/Dockerfile.x86_64-pc-windows-gnu#L51
|
|
||||||
dockerfile = "./Dockerfile.x86_64-pc-windows-gnu"
|
|
||||||
|
|
||||||
[target.riscv64gc-unknown-linux-gnu]
|
|
||||||
image = "ubuntu:24.04"
|
|
||||||
pre-build = [
|
|
||||||
"apt update",
|
|
||||||
"apt install --yes gcc gcc-riscv64-linux-gnu libclang-dev make",
|
|
||||||
]
|
|
||||||
env.passthrough = [
|
|
||||||
"CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_LINKER=riscv64-linux-gnu-gcc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[build.env]
|
|
||||||
passthrough = ["JEMALLOC_SYS_WITH_LG_PAGE"]
|
|
||||||
|
|
||||||
# Use specific Docker images for Linux targets to avoid GLIBC compatibility issues
|
|
||||||
# TODO remove this when cross has more stable release
|
|
||||||
[target.x86_64-unknown-linux-gnu]
|
|
||||||
image = "ghcr.io/cross-rs/x86_64-unknown-linux-gnu:0.2.5"
|
|
||||||
|
|
||||||
[target.aarch64-unknown-linux-gnu]
|
|
||||||
image = "ghcr.io/cross-rs/aarch64-unknown-linux-gnu:0.2.5"
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
# This image is meant to enable cross-architecture builds.
|
|
||||||
# It assumes the reth binary has already been compiled for `$TARGETPLATFORM` and is
|
|
||||||
# locatable in `./dist/bin/$TARGETARCH`
|
|
||||||
FROM --platform=$TARGETPLATFORM ubuntu:22.04
|
|
||||||
|
|
||||||
LABEL org.opencontainers.image.source=https://github.com/hl-archive-node/nanoreth
|
|
||||||
LABEL org.opencontainers.image.licenses="MIT OR Apache-2.0"
|
|
||||||
|
|
||||||
# Install root certificates for aws sdk to work
|
|
||||||
RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates
|
|
||||||
|
|
||||||
# Filled by docker buildx
|
|
||||||
ARG TARGETARCH
|
|
||||||
|
|
||||||
COPY ./dist/bin/$TARGETARCH/reth-hl /usr/local/bin/reth-hl
|
|
||||||
|
|
||||||
EXPOSE 9001 8545 8546
|
|
||||||
ENTRYPOINT ["/usr/local/bin/reth"]
|
|
||||||
45
Makefile
45
Makefile
@ -1,6 +1,8 @@
|
|||||||
# Modifed from reth Makefile
|
# Modifed from reth Makefile
|
||||||
.DEFAULT_GOAL := help
|
.DEFAULT_GOAL := help
|
||||||
|
|
||||||
|
GIT_SHA ?= $(shell git rev-parse HEAD)
|
||||||
|
GIT_TAG ?= $(shell git describe --tags --abbrev=0)
|
||||||
BIN_DIR = "dist/bin"
|
BIN_DIR = "dist/bin"
|
||||||
|
|
||||||
# List of features to use when building. Can be overridden via the environment.
|
# List of features to use when building. Can be overridden via the environment.
|
||||||
@ -211,32 +213,6 @@ check-features:
|
|||||||
--package reth-primitives \
|
--package reth-primitives \
|
||||||
--feature-powerset
|
--feature-powerset
|
||||||
|
|
||||||
# The following commands use `cross` to build a cross-compile.
|
|
||||||
#
|
|
||||||
# These commands require that:
|
|
||||||
#
|
|
||||||
# - `cross` is installed (`cargo install cross`).
|
|
||||||
# - Docker is running.
|
|
||||||
# - The current user is in the `docker` group.
|
|
||||||
#
|
|
||||||
# The resulting binaries will be created in the `target/` directory.
|
|
||||||
|
|
||||||
# For aarch64, set the page size for jemalloc.
|
|
||||||
# When cross compiling, we must compile jemalloc with a large page size,
|
|
||||||
# otherwise it will use the current system's page size which may not work
|
|
||||||
# on other systems. JEMALLOC_SYS_WITH_LG_PAGE=16 tells jemalloc to use 64-KiB
|
|
||||||
# pages. See: https://github.com/paradigmxyz/reth/issues/6742
|
|
||||||
build-aarch64-unknown-linux-gnu: export JEMALLOC_SYS_WITH_LG_PAGE=16
|
|
||||||
|
|
||||||
# No jemalloc on Windows
|
|
||||||
build-x86_64-pc-windows-gnu: FEATURES := $(filter-out jemalloc jemalloc-prof,$(FEATURES))
|
|
||||||
|
|
||||||
# Note: The additional rustc compiler flags are for intrinsics needed by MDBX.
|
|
||||||
# See: https://github.com/cross-rs/cross/wiki/FAQ#undefined-reference-with-build-std
|
|
||||||
build-%:
|
|
||||||
RUSTFLAGS="-C link-arg=-lgcc -Clink-arg=-static-libgcc" \
|
|
||||||
cross build --bin reth-hl --target $* --features "$(FEATURES)" --profile "$(PROFILE)"
|
|
||||||
|
|
||||||
##@ Docker
|
##@ Docker
|
||||||
|
|
||||||
# Note: This requires a buildx builder with emulation support. For example:
|
# Note: This requires a buildx builder with emulation support. For example:
|
||||||
@ -271,20 +247,15 @@ docker-build-push-latest: ## Build and push a cross-arch Docker image tagged wit
|
|||||||
docker-build-push-nightly: ## Build and push cross-arch Docker image tagged with the latest git tag with a `-nightly` suffix, and `latest-nightly`.
|
docker-build-push-nightly: ## Build and push cross-arch Docker image tagged with the latest git tag with a `-nightly` suffix, and `latest-nightly`.
|
||||||
$(call docker_build_push,nightly,nightly)
|
$(call docker_build_push,nightly,nightly)
|
||||||
|
|
||||||
# Create a cross-arch Docker image with the given tags and push it
|
# Create a Docker image using the main Dockerfile
|
||||||
define docker_build_push
|
define docker_build_push
|
||||||
$(MAKE) build-x86_64-unknown-linux-gnu
|
docker buildx build --file ./Dockerfile . \
|
||||||
mkdir -p $(BIN_DIR)/amd64
|
--platform linux/amd64 \
|
||||||
cp $(CARGO_TARGET_DIR)/x86_64-unknown-linux-gnu/$(PROFILE)/reth-hl $(BIN_DIR)/amd64/reth-hl
|
|
||||||
|
|
||||||
$(MAKE) build-aarch64-unknown-linux-gnu
|
|
||||||
mkdir -p $(BIN_DIR)/arm64
|
|
||||||
cp $(CARGO_TARGET_DIR)/aarch64-unknown-linux-gnu/$(PROFILE)/reth-hl $(BIN_DIR)/arm64/reth-hl
|
|
||||||
|
|
||||||
docker buildx build --file ./Dockerfile.cross . \
|
|
||||||
--platform linux/amd64,linux/arm64 \
|
|
||||||
--tag $(DOCKER_IMAGE_NAME):$(1) \
|
--tag $(DOCKER_IMAGE_NAME):$(1) \
|
||||||
--tag $(DOCKER_IMAGE_NAME):$(2) \
|
--tag $(DOCKER_IMAGE_NAME):$(2) \
|
||||||
|
--build-arg BUILD_PROFILE=$(PROFILE) \
|
||||||
|
--build-arg FEATURES=$(FEATURES) \
|
||||||
|
--build-arg RUSTFLAGS=-C target-cpu=native \
|
||||||
--provenance=false \
|
--provenance=false \
|
||||||
--push
|
--push
|
||||||
endef
|
endef
|
||||||
|
|||||||
Reference in New Issue
Block a user