From 918f70df0abf08b7fcdaa8faa0b436703e396a58 Mon Sep 17 00:00:00 2001 From: Sally MacFarlane Date: Thu, 9 May 2024 14:53:22 +1000 Subject: [PATCH 1/6] catch any exception Signed-off-by: Sally MacFarlane --- .../kotlin/org/apache/tuweni/discovery/DNSResolver.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt b/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt index 30d9659c4..cab8d4aae 100644 --- a/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt +++ b/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt @@ -19,6 +19,7 @@ package org.apache.tuweni.discovery */ import io.vertx.core.Vertx +import io.vertx.core.VertxException import io.vertx.core.dns.DnsClient import io.vertx.core.dns.DnsClientOptions import io.vertx.core.dns.DnsException @@ -31,6 +32,7 @@ import org.apache.tuweni.crypto.SECP256K1 import org.apache.tuweni.devp2p.EthereumNodeRecord import org.slf4j.LoggerFactory import java.io.IOException +import java.lang.Exception /** * Resolves a set of ENR nodes from a host name. @@ -158,6 +160,13 @@ class DNSResolver @JvmOverloads constructor( } catch (e: IOException) { logger.warn("I/O exception contacting remote DNS server when resolving $domainName", e) return null + } catch (e: VertxException) { + // timeouts are common + logger.warn("Vertx exception contacting remote DNS server when resolving $domainName", e) + return null + } catch (e: Exception) { + logger.warn("Exception contacting remote DNS server when resolving $domainName", e) + return null } } From 92f5726855ba779e8282bde1388d26db9b403da9 Mon Sep 17 00:00:00 2001 From: Usman Saleem Date: Thu, 9 May 2024 19:55:47 +1000 Subject: [PATCH 2/6] GH Publish (#4) * build - Fix NOTICE * build - publish to GH Packages * build - GH action to publish to GH packages * build - Update check notice * Update .github/workflows/publish.yml Co-authored-by: Sally MacFarlane * build - Update groupId --------- Signed-off-by: Sally MacFarlane Co-authored-by: Sally MacFarlane --- .github/workflows/publish.yml | 45 +++++++++++++++++++++++++++++++++++ build.gradle | 24 +++++++++++++------ 2 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 000000000..2bd90c09e --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,45 @@ +# +# Licensed to the Consensys Software Inc under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +# This is adapted from https://docs.github.com/en/actions/publishing-packages/publishing-java-packages-with-gradle + +name: Publish package to GitHub Packages +on: + release: + types: [created] +jobs: + publish: + runs-on: ubuntu-latest + container: + image: tmio/tuweni-build:1.2 + permissions: + contents: read + packages: write + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + - name: Setup Gradle + uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0 + + - name: Publish package + run: ./gradlew publishAllPublicationsToGitHubPackagesRepository + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 4997585fb..7d59e5922 100644 --- a/build.gradle +++ b/build.gradle @@ -323,6 +323,7 @@ allprojects { publishing { repositories { maven { + name = "OSSRH" def isRelease = buildVersion.endsWith('SNAPSHOT') def releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2" def snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots" @@ -355,6 +356,15 @@ allprojects { } } } + + maven { + name = "GitHubPackages" + url = "https://maven.pkg.github.com/consensys/tuweni" + credentials { + username = System.getenv('GITHUB_ACTOR') + password = System.getenv('GITHUB_TOKEN') + } + } } publications { MavenDeployment(MavenPublication) { publication -> @@ -362,7 +372,7 @@ allprojects { from components.java artifact sourcesJar { classifier 'sources' } } - groupId 'io.tmio' + groupId 'io.consensys.protocols' artifactId 'tuweni-' + project.name version project.version @@ -378,7 +388,7 @@ allprojects { pom { name = project.name afterEvaluate { description = project.description } - url = 'https://github.com/tmio/tuweni' + url = 'https://github.com/consensys/tuweni' licenses { license { name = "The Apache License, Version 2.0" @@ -386,9 +396,9 @@ allprojects { } } scm { - connection = 'scm:https://github.com/tmio/tuweni.git' - developerConnection = 'scm:git@github.com:tmio/tuweni.git' - url = 'https://github.com/tmio/tuweni' + connection = 'scm:https://github.com/consensys/tuweni.git' + developerConnection = 'scm:git@github.com:consensys/tuweni.git' + url = 'https://github.com/consensys/tuweni' } developers { developer { @@ -400,7 +410,7 @@ allprojects { } issueManagement { system = "github" - url = "https://www.github.com/tmio/tuweni/issues" + url = "https://www.github.com/consensys/tuweni/issues" } } @@ -415,7 +425,7 @@ allprojects { def addDependencyNode = { dep, optional, scope -> def dependencyNode = dependenciesNode.appendNode('dependency') if (dep instanceof ProjectDependency) { - dependencyNode.appendNode('groupId', 'io.tmio') + dependencyNode.appendNode('groupId', 'io.consensys') dependencyNode.appendNode('artifactId', rootProject.name + '-' + dep.name) dependencyNode.appendNode('version', dep.version) } else { From 0f0e8e995b7af8c82f5898d37ce5dd80176a67c2 Mon Sep 17 00:00:00 2001 From: Sally MacFarlane Date: Fri, 10 May 2024 08:35:00 +1000 Subject: [PATCH 3/6] allocate memory explicitly for ref tests task (#6) allocate more memory for ref tests task Signed-off-by: Sally MacFarlane --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 20782899e..1127b4f1f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -174,6 +174,8 @@ jobs: path: "**/*.class" key: ${{ runner.os }}-build-${{ github.sha }} - name: gradle evm:referenceTest + env: + GRADLE_OPTS: "-Xmx2048m" run: gradle evm:referenceTest - name: Archive Junit Report if: always() From 6b0376c06cc8de829f3c93ea9516572e4bb42f41 Mon Sep 17 00:00:00 2001 From: Sally MacFarlane Date: Fri, 10 May 2024 09:47:14 +1000 Subject: [PATCH 4/6] Memory ref tests (#7) * allocate more memory for ref tests task --------- Signed-off-by: Sally MacFarlane --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1127b4f1f..cdb10d0b6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -175,7 +175,7 @@ jobs: key: ${{ runner.os }}-build-${{ github.sha }} - name: gradle evm:referenceTest env: - GRADLE_OPTS: "-Xmx2048m" + GRADLE_OPTS: "-Xmx4096m" run: gradle evm:referenceTest - name: Archive Junit Report if: always() From d780a654afc90f5fd3c16540d592259487e0a190 Mon Sep 17 00:00:00 2001 From: Sally MacFarlane Date: Fri, 10 May 2024 13:09:02 +1000 Subject: [PATCH 5/6] change log level (#1) Co-authored-by: Karim TAAM --- .../src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt b/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt index cab8d4aae..5ff7f4117 100644 --- a/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt +++ b/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt @@ -155,7 +155,7 @@ class DNSResolver @JvmOverloads constructor( return null } } catch (e: DnsException) { - logger.warn("DNS query error with $domainName", e) + logger.debug("DNS query error with $domainName", e) return null } catch (e: IOException) { logger.warn("I/O exception contacting remote DNS server when resolving $domainName", e) From 64e2413f16c6eed41cc0913accb095b56328e30c Mon Sep 17 00:00:00 2001 From: Chaminda Divitotawela Date: Mon, 14 Oct 2024 15:51:22 +1000 Subject: [PATCH 6/6] Update GPG key (#11) Existing gpg key has been expired and build fails. New key has been generated and updated. New key expires on 2026-10-14 Signed-off-by: Chaminda Divitotawela --- .github/workflows/build.yml | 2 +- gradle/tuweni-test.asc | 267 ++++++++++++++++-------------------- 2 files changed, 117 insertions(+), 152 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cdb10d0b6..d82bcd10a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,7 +42,7 @@ jobs: java-version: 17 cache: gradle - name: gradle assemble - run: gradle assemble compileTestJava compileIntegrationTestJava -x test -Psignatory.keyId=38F6C7215DD49C32 -Psigning.gnupg.keyName=38F6C7215DD49C32 -Psigning.gnupg.executable=gpg + run: gradle assemble compileTestJava compileIntegrationTestJava -x test -Psignatory.keyId=90010D4396A46BAF -Psigning.gnupg.keyName=90010D4396A46BAF -Psigning.gnupg.executable=gpg env: ENABLE_SIGNING: true - name: Upload source distrib diff --git a/gradle/tuweni-test.asc b/gradle/tuweni-test.asc index 9505d0d0c..f82688666 100644 --- a/gradle/tuweni-test.asc +++ b/gradle/tuweni-test.asc @@ -1,157 +1,122 @@ -----BEGIN PGP PRIVATE KEY BLOCK----- -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 -=6qjl +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 +=t7H2 -----END PGP PRIVATE KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK----- -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 -g3bCbgyoJoU= -=9Wkn +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 +HrtwG0b82VjL0JjZgi0zPR5FWXGocITQ +=J1Nv -----END PGP PUBLIC KEY BLOCK-----