diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..8283e293 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,34 @@ +FROM --platform=linux/amd64 debian:bullseye-slim + +RUN apt update && \ + apt install --no-install-recommends -q --assume-yes curl=7* libjemalloc-dev=5.* && \ + apt clean + +RUN ARCH=$(uname -m) && \ + if [ "$ARCH" = "aarch64" ]; then \ + curl -kL -o jdk-19.tar.gz https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19.0.2%2B7/OpenJDK19U-jre_aarch64_linux_hotspot_19.0.2_7.tar.gz ; \ + elif [ "$(uname -s)" = "Darwin" ] && [ "$(uname -m)" = "arm64" ]; then \ + curl -kL -o jdk-19.tar.gz https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19.0.2%2B7/OpenJDK19U-jre_aarch64_linux_hotspot_19.0.2_7.tar.gz ; \ + elif [ "$ARCH" = "x86_64" ]; then \ + curl -kL -o jdk-19.tar.gz https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19.0.2%2B7/OpenJDK19U-jre_x64_linux_hotspot_19.0.2_7.tar.gz ; \ + else \ + echo "Unsupported platform: $ARCH"; exit 1; \ + fi + +RUN tar -xzf jdk-19.tar.gz && \ + rm jdk-19.tar.gz && \ + mv jdk-19.0.2+7-jre /usr/bin/ && \ + update-alternatives --install "/usr/bin/java" "java" "/usr/bin/jdk-19.0.2+7-jre/bin/java" 1 + +ENV JAVA_HOME /usr/bin/jdk-19.0.2+7-jre +RUN export JAVA_HOME +RUN export PATH=$JAVA_HOME/bin:$PATH + +WORKDIR /usr/local/bin +COPY . . +ENV HILDR_JAR /usr/local/bin/hildr-node.jar +ENV HILDR_MAIN_CLASS io.optimism.Hildr + + + + diff --git a/docker/start-hildr-node.sh b/docker/start-hildr-node.sh index 3890fdbe..f25149f6 100755 --- a/docker/start-hildr-node.sh +++ b/docker/start-hildr-node.sh @@ -3,7 +3,7 @@ set -e if [ $SYNC_MODE = "full" ] then - exec hildr-node \ + exec java -cp $HILDR_JAR $HILDR_MAIN_CLASS \ --network $NETWORK \ --jwt-secret $JWT_SECRET \ --l1-rpc-url $L1_RPC_URL \ @@ -13,7 +13,7 @@ then --sync-mode $SYNC_MODE elif [ $SYNC_MODE = "checkpoint"] then - exec hildr-node \ + exec java -cp $HILDR_JAR $HILDR_MAIN_CLASS \ --network $NETWORK \ --jwt-secret $JWT_SECRET \ --l1-rpc-url $L1_RPC_URL \ diff --git a/hildr-node/build.gradle b/hildr-node/build.gradle index ff09fb43..64dc2487 100644 --- a/hildr-node/build.gradle +++ b/hildr-node/build.gradle @@ -66,13 +66,21 @@ dependencies { implementation('net.osslabz.evm:evm-abi-decoder:0.0.6') implementation 'com.github.gestalt-config:gestalt-core:0.20.4' implementation 'com.github.gestalt-config:gestalt-toml:0.20.4' - implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-toml:2.15.2' + + implementation 'com.fasterxml.jackson:jackson-bom:2.15.2' + implementation 'com.fasterxml.jackson.core:jackson-core' + implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-toml' implementation 'org.jctools:jctools-core:4.0.1' implementation 'io.jsonwebtoken:jjwt-api:0.11.5' implementation 'io.jsonwebtoken:jjwt-impl:0.11.5' implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5' + //jsonrpc + implementation('io.vertx:vertx-auth-jwt:4.4.2') + implementation('io.vertx:vertx-core:4.4.2') + implementation('io.vertx:vertx-web:4.4.2') + implementation 'io.micrometer:micrometer-registry-prometheus:1.11.0' implementation platform('io.micrometer:micrometer-tracing-bom:1.1.1') implementation 'io.micrometer:micrometer-tracing' @@ -239,5 +247,61 @@ jar { duplicatesStrategy = DuplicatesStrategy.WARN from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } + } { + exclude 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.SF' + } +} + +task buildBinary { + dependsOn jar + def buildBinaryDir = "build/binary" + def out = new ByteArrayOutputStream() + doFirst { + new File(buildBinaryDir).mkdirs() + copy { + from "build/libs/${project.name}-${project.version}.jar" + into buildBinaryDir + rename "${project.name}-${project.version}.jar", "${project.name}.jar" + } + } + doLast { + exec { + workingDir buildBinaryDir + executable "sh" + args "-c", "native-image -jar ${project.name}.jar --initialize-at-build-time=ch.qos.logback,org.slf4j,io.opentelemetry ${project.name}" + standardOutput out + } + } + println(out.toString()) +} + +task buildDocker { + dependsOn jar + def buildImageDir = "build/docker" + def out = new ByteArrayOutputStream() + doFirst { + new File(buildImageDir).mkdirs() + copy { + from "../docker/start-hildr-node.sh" + into buildImageDir + } + copy { + from "../docker/Dockerfile" + into buildImageDir + } + copy { + from "build/libs/${project.name}-${project.version}.jar" + into buildImageDir + rename "${project.name}-${project.version}.jar", "${project.name}.jar" + } + } + doLast { + exec { + workingDir buildImageDir + executable "sh" + args "-c", "docker build --platform=linux/amd64 -t optimism-java/${project.name}:latest ." + standardOutput out + } } + println(out.toString()) }