/* * Copyright ConsenSys AG. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * * SPDX-License-Identifier: Apache-2.0 * */ apply plugin: 'java-library' apply plugin: 'application' apply plugin: 'idea' jar { archiveBaseName = 'besu-evmtool' manifest { attributes( 'Specification-Title': archiveBaseName, 'Specification-Version': project.version, 'Implementation-Title': archiveBaseName, 'Implementation-Version': calculateVersion() ) } } dependencies { api 'org.slf4j:slf4j-api' implementation project(':besu') implementation project(':config') implementation project(':crypto') implementation project(':datatypes') implementation project(':consensus:clique') implementation project(':consensus:common') implementation project(':consensus:ibft') implementation project(':consensus:qbft') implementation project(':ethereum:api') implementation project(':ethereum:core') implementation project(':ethereum:referencetests') implementation project(':ethereum:rlp') implementation project(':evm') implementation project(':metrics:core') implementation project(':plugins:rocksdb') implementation project(':services:kvstore') implementation project(':util') implementation 'com.fasterxml.jackson.core:jackson-databind' implementation 'com.google.dagger:dagger' implementation 'com.google.guava:guava' implementation 'info.picocli:picocli' implementation 'io.vertx:vertx-core' implementation 'org.apache.logging.log4j:log4j-core' annotationProcessor 'com.google.dagger:dagger-compiler' testImplementation 'junit:junit' testImplementation 'org.assertj:assertj-core' testImplementation 'org.mockito:mockito-core' } mainClassName = 'org.hyperledger.besu.evmtool.EvmTool' startScripts { applicationName = 'evm' defaultJvmOpts = [ "-Dsecp256k1.randomize=false" ] doLast { unixScript.text = unixScript.text.replace('BESU_HOME', '\$APP_HOME') windowsScript.text = windowsScript.text.replace('BESU_HOME', '%~dp0..') } } // rename the top level dir from besu- to besu and this makes it really // simple for use in docker tasks.register("dockerDistUntar") { dependsOn distTar dependsOn distZip def dockerBuildDir = "${buildDir}/docker-besu-evmtool" def distTarFile = distTar.outputs.files.singleFile def distTarFileName = distTar.outputs.files.singleFile.name.replace(".tar", "") doFirst { new File(dockerBuildDir).mkdir() copy { from tarTree(distTarFile) into(dockerBuildDir) } file("${dockerBuildDir}/${distTarFileName}").renameTo("${dockerBuildDir}/besu-evmtool") } } task distDocker(type: Exec) { dependsOn dockerDistUntar def dockerBuildVersion = project.hasProperty('release.releaseVersion') ? project.property('release.releaseVersion') : "${rootProject.version}" def imageName = "hyperledger/besu-evmtool" def image = "${imageName}:${dockerBuildVersion}" def dockerBuildDir = "${buildDir}/docker-besu-evmtool/" workingDir "${dockerBuildDir}" doFirst { copy { from file("${projectDir}/src/main/docker/Dockerfile") into(workingDir) } } executable "sh" args "-c", "docker build --build-arg BUILD_DATE=${buildTime()} --build-arg VERSION=${dockerBuildVersion} --build-arg VCS_REF=${getCheckedOutGitCommitHash()} -t ${image} ." } task dockerUpload(type: Exec) { dependsOn distDocker def dockerBuildVersion = project.hasProperty('release.releaseVersion') ? project.property('release.releaseVersion') : "${rootProject.version}" def imageName = "hyperledger/besu-evmtool" def image = "${imageName}:${dockerBuildVersion}" def cmd = "docker push '${image}'" def additionalTags = [] if (project.hasProperty('branch') && project.property('branch') == 'main') { additionalTags.add('develop') } if (!(dockerBuildVersion ==~ /.*-SNAPSHOT/)) { additionalTags.add('latest') additionalTags.add(dockerBuildVersion.split(/\./)[0..1].join('.')) } additionalTags.each { tag -> cmd += " && docker tag '${image}' '${imageName}:${tag.trim()}' && docker push '${imageName}:${tag.trim()}'" } executable "sh" args "-c", cmd }