diff --git a/build-logic/project-plugins/build.gradle.kts b/build-logic/project-plugins/build.gradle.kts index c0faeabf0777..4843b26cd368 100644 --- a/build-logic/project-plugins/build.gradle.kts +++ b/build-logic/project-plugins/build.gradle.kts @@ -31,9 +31,9 @@ dependencies { ) implementation("me.champeau.jmh:jmh-gradle-plugin:0.7.2") implementation("net.swiftzer.semver:semver:1.3.0") - implementation("org.gradlex:extra-java-module-info:1.6.1") - implementation("org.gradlex:java-ecosystem-capabilities:1.3.1") - implementation("org.gradlex:java-module-dependencies:1.5") + implementation("org.gradlex:extra-java-module-info:1.8") + implementation("org.gradlex:java-ecosystem-capabilities:1.5.1") + implementation("org.gradlex:java-module-dependencies:1.6.1") implementation("org.owasp:dependency-check-gradle:9.0.9") implementation("org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:4.4.1.3373") } diff --git a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.java-test-fixtures.gradle.kts b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.java-test-fixtures.gradle.kts new file mode 100644 index 000000000000..5de5f5e88e99 --- /dev/null +++ b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.java-test-fixtures.gradle.kts @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2024 Hedera Hashgraph, LLC + * + * 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. + */ + +import org.gradle.api.component.AdhocComponentWithVariants +import org.gradle.kotlin.dsl.get + +/* + * Copyright (C) 2022-2024 Hedera Hashgraph, LLC + * + * 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. + */ + +plugins { id("java-test-fixtures") } + +tasks.testFixturesJar { setGroup(null) } + +// Disable publishing of test fixture if 'java-test-fixtures' plugin is used +// https://docs.gradle.org/current/userguide/java_testing.html#ex-disable-publishing-of-test-fixtures-variants +(components["java"] as AdhocComponentWithVariants).apply { + withVariantsFromConfiguration(configurations["testFixturesApiElements"]) { skip() } + withVariantsFromConfiguration(configurations["testFixturesRuntimeElements"]) { skip() } +} diff --git a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.java.gradle.kts b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.java.gradle.kts index 689ef6640eaf..f3174eaaefb3 100644 --- a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.java.gradle.kts +++ b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.java.gradle.kts @@ -19,13 +19,14 @@ import Utils.Companion.versionTxt import com.adarshr.gradle.testlogger.theme.ThemeType import com.autonomousapps.AbstractExtension import com.autonomousapps.DependencyAnalysisSubExtension -import com.hedera.hashgraph.gradlebuild.service.TaskLockService +import com.hedera.hashgraph.gradlebuild.services.TaskLockService plugins { id("java") id("jacoco") id("checkstyle") id("com.adarshr.test-logger") + id("com.hedera.hashgraph.lifecycle") id("com.hedera.hashgraph.jpms-modules") id("com.hedera.hashgraph.jpms-module-dependencies") id("com.hedera.hashgraph.repositories") @@ -60,7 +61,16 @@ configurations.getByName("mainRuntimeClasspath") { extendsFrom(internal.get()) } dependencies { "internal"(platform("com.hedera.hashgraph:hedera-dependency-versions")) } +tasks.buildDependents { setGroup(null) } + +tasks.buildNeeded { setGroup(null) } + +tasks.jar { setGroup(null) } + sourceSets.all { + // Remove 'classes' tasks from 'build' group to keep it cleaned up + tasks.named(classesTaskName) { group = null } + configurations.getByName(compileClasspathConfigurationName) { extendsFrom(internal.get()) } configurations.getByName(runtimeClasspathConfigurationName) { extendsFrom(internal.get()) } @@ -162,6 +172,7 @@ testing { useJUnitJupiter() targets.all { testTask { + group = "build" maxHeapSize = "4g" // Some tests overlap due to using the same temp folders within one project // maxParallelForks = 4 <- set this, once tests can run in parallel @@ -174,6 +185,7 @@ testing { testType.set("hammer") targets.all { testTask { + group = "build" shouldRunAfter(tasks.test) usesService( gradle.sharedServices.registerIfAbsent("lock", TaskLockService::class) { @@ -190,6 +202,7 @@ testing { testType.set("time-consuming") targets.all { testTask { + group = "build" shouldRunAfter(tasks.test) maxHeapSize = "16g" } @@ -201,6 +214,7 @@ testing { testType.set(TestSuiteType.INTEGRATION_TEST) targets.all { testTask { + group = "build" shouldRunAfter(tasks.test) maxHeapSize = "8g" addTestListener(testLogger()) @@ -213,8 +227,10 @@ testing { testType.set("end-to-end-test") targets.all { testTask { + group = "build" shouldRunAfter(tasks.test) maxHeapSize = "8g" + jvmArgs("-XX:ActiveProcessorCount=6") } } } @@ -232,6 +248,22 @@ testing { } } +// If user gave the argument '-PactiveProcessorCount', then do: +// - run all test tasks in sequence +// - give the -XX:ActiveProcessorCount argument to the test JVMs +val activeProcessorCount = providers.gradleProperty("activeProcessorCount") + +if (activeProcessorCount.isPresent) { + tasks.withType().configureEach { + usesService( + gradle.sharedServices.registerIfAbsent("lock", TaskLockService::class) { + maxParallelUsages = 1 + } + ) + jvmArgs("-XX:ActiveProcessorCount=${activeProcessorCount.get()}") + } +} + tasks.jacocoTestReport { // Configure Jacoco so it outputs XML reports (needed by SonarCloud) reports { @@ -263,6 +295,14 @@ tasks.assemble { tasks.check { dependsOn(tasks.jacocoTestReport) } +tasks.named("qualityGate") { dependsOn(tasks.checkAllModuleInfo) } + +tasks.withType() { + // When ding a 'qualityGate' run, make sure spotlessApply is done before doing compilation and + // other checks based on compiled code + mustRunAfter(tasks.spotlessApply) +} + // Do not report dependencies from one source set to another as 'required'. // In particular, in case of test fixtures, the analysis would suggest to // add as testModuleInfo { require(...) } to the main module. This is diff --git a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-modules.gradle.kts b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-modules.gradle.kts index 41e197f0886c..a95989331eed 100644 --- a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-modules.gradle.kts +++ b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-modules.gradle.kts @@ -14,185 +14,176 @@ * limitations under the License. */ -import com.hedera.hashgraph.gradlebuild.rules.* +import org.gradlex.javaecosystem.capabilities.customrules.AddDependenciesMetadataRule +import org.gradlex.javaecosystem.capabilities.customrules.AddFeaturesMetadataRule +import org.gradlex.javaecosystem.capabilities.customrules.RemoveDependenciesMetadataRule plugins { id("org.gradlex.java-ecosystem-capabilities") id("org.gradlex.extra-java-module-info") } +// Fix or enhance the metadata of third-party Modules. This is about the metadata in the +// repositories: '*.pom' and '*.module' files. dependencies.components { - withModule("io.grpc:grpc-netty") - withModule("io.grpc:grpc-protobuf") - withModule("io.grpc:grpc-protobuf-lite") - withModule("io.grpc:grpc-services") - withModule("io.grpc:grpc-stub") - withModule("io.grpc:grpc-testing") - - withModule("com.github.ben-manes.caffeine:caffeine") - withModule("com.github.spotbugs:spotbugs-annotations") - withModule("com.google.dagger:dagger-compiler") - withModule("com.google.dagger:dagger-producers") - withModule("com.google.dagger:dagger-spi") - withModule("com.google.guava:guava") - withModule("com.google.protobuf:protobuf-java-util") - withModule("io.helidon.grpc:io.grpc") - withModule("org.apache.tuweni:tuweni-bytes") - withModule("org.apache.tuweni:tuweni-units") - - withModule("io.netty:netty-transport-native-epoll") - - withModule("io.prometheus:simpleclient") - - withModule("org.jetbrains.kotlin:kotlin-stdlib") + withModule("io.netty:netty-transport-native-epoll") { + params(listOf("linux-x86_64", "linux-aarch_64")) + } - withModule("junit:junit") -} + // The following 'io.grpc' libraries are replaced with a singe dependency to + // 'io.helidon.grpc:io.grpc', which is a re-packaged Modular Jar of all the 'grpc' libraries. + val grpcComponents = listOf("io.grpc:grpc-api", "io.grpc:grpc-context", "io.grpc:grpc-core") + val grpcModule = listOf("io.helidon.grpc:io.grpc") -extraJavaModuleInfo { - failOnAutomaticModules.set(true) // Only allow Jars with 'module-info' on all module paths + // These compile time annotation libraries are not of interest in our setup and are thus removed + // from the dependencies of all components that bring them in. + val annotationLibraries = + listOf( + "com.google.android:annotations", + "com.google.code.findbugs:annotations", + "com.google.code.findbugs:jsr305", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "org.checkerframework:checker-compat-qual", + "org.checkerframework:checker-qual", + "org.codehaus.mojo:animal-sniffer-annotations" + ) - module("io.grpc:grpc-netty", "grpc.netty") { - exportAllPackages() - requireAllDefinedDependencies() - requires("java.logging") - } - module("io.grpc:grpc-stub", "grpc.stub") { - exportAllPackages() - requireAllDefinedDependencies() - requires("java.logging") - } - module("io.grpc:grpc-testing", "grpc.testing") { - exportAllPackages() - requireAllDefinedDependencies() + withModule("io.grpc:grpc-netty") { + params(grpcComponents + annotationLibraries) } - module("io.grpc:grpc-services", "grpc.services") { - exportAllPackages() - requireAllDefinedDependencies() + withModule("io.grpc:grpc-netty") { params(grpcModule) } + withModule("io.grpc:grpc-protobuf") { + params(grpcComponents + annotationLibraries) } - module("io.grpc:grpc-protobuf", "grpc.protobuf") { - exportAllPackages() - requireAllDefinedDependencies() + withModule("io.grpc:grpc-protobuf") { params(grpcModule) } + withModule("io.grpc:grpc-protobuf-lite") { + params( + grpcComponents + annotationLibraries + listOf("com.google.protobuf:protobuf-javalite") + ) } - module("io.grpc:grpc-protobuf-lite", "grpc.protobuf.lite") { - exportAllPackages() - requireAllDefinedDependencies() - requires("com.google.protobuf") + withModule("io.grpc:grpc-protobuf-lite") { + params(grpcModule + listOf("com.google.protobuf:protobuf-java")) } - module("javax.annotation:javax.annotation-api", "java.annotation") { - exportAllPackages() - // no dependencies + withModule("io.grpc:grpc-services") { + params(grpcComponents + annotationLibraries) } - module("com.github.spotbugs:spotbugs-annotations", "com.github.spotbugs.annotations") { - exportAllPackages() - // no dependencies - see RemoveFindbugsAnnotationsMetadataRule + withModule("io.grpc:grpc-services") { params(grpcModule) } + withModule("io.grpc:grpc-stub") { + params(grpcComponents + annotationLibraries) } - module("com.google.protobuf:protobuf-java", "com.google.protobuf") { - exportAllPackages() - requireAllDefinedDependencies() - requires("java.logging") + withModule("io.grpc:grpc-stub") { params(grpcModule) } + withModule("io.grpc:grpc-testing") { + params(grpcComponents + annotationLibraries) } - module("com.google.guava:guava", "com.google.common") { - exportAllPackages() - requireAllDefinedDependencies() - requires("java.logging") - } - module("com.google.guava:failureaccess", "com.google.guava.failureaccess") { - exportAllPackages() - // no dependencies - } - module("com.google.api.grpc:proto-google-common-protos", "com.google.api.grpc.common") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.google.dagger:dagger", "dagger") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("io.perfmark:perfmark-api", "io.perfmark") { - exportAllPackages() - // no dependencies - } - module("javax.inject:javax.inject", "javax.inject") { - exportAllPackages() - // no dependencies + withModule("io.grpc:grpc-testing") { params(grpcModule) } + + withModule("com.github.ben-manes.caffeine:caffeine") { + params(annotationLibraries) } - module("org.apache.commons:commons-lang3", "org.apache.commons.lang3") { - exportAllPackages() - requireAllDefinedDependencies() + withModule("com.github.spotbugs:spotbugs-annotations") { + params(annotationLibraries) } - module("commons-codec:commons-codec", "org.apache.commons.codec") { - exportAllPackages() - requireAllDefinedDependencies() + withModule("com.google.dagger:dagger-compiler") { + params(annotationLibraries) } - module("commons-io:commons-io", "org.apache.commons.io") { - exportAllPackages() - // no dependencies + withModule("com.google.dagger:dagger-producers") { + params(annotationLibraries) } - module("org.apache.commons:commons-math3", "org.apache.commons.math3") { - exportAllPackages() - // no dependencies + withModule("com.google.dagger:dagger-spi") { + params(annotationLibraries) } - module("org.apache.commons:commons-collections4", "org.apache.commons.collections4") { - exportAllPackages() - // no dependencies + withModule("com.google.guava:guava") { + params(annotationLibraries) } - module("com.esaulpaugh:headlong", "headlong") { - exportAllPackages() - // no dependencies - } - module("org.connid:framework", "org.connid.framework") { - exportAllPackages() - // no dependencies - } - module("org.connid:framework-internal", "org.connid.framework.internal") { - exportAllPackages() - requires("org.connid.framework") // this is missing in POM + withModule("com.google.protobuf:protobuf-java-util") { + params(annotationLibraries) } - module("org.jetbrains:annotations", "org.jetbrains.annotations") { - exportAllPackages() - // no dependencies + withModule("io.helidon.grpc:io.grpc") { + params(annotationLibraries) } - module("io.tmio:tuweni-units", "tuweni.units") { - exportAllPackages() - requireAllDefinedDependencies() + withModule("org.apache.tuweni:tuweni-bytes") { + params(annotationLibraries) } - module("io.tmio:tuweni-bytes", "tuweni.bytes") { - exportAllPackages() - requireAllDefinedDependencies() + withModule("org.apache.tuweni:tuweni-units") { + params(annotationLibraries) } - module("net.i2p.crypto:eddsa", "net.i2p.crypto.eddsa") { - exportAllPackages() - // no dependencies + withModule("io.prometheus:simpleclient") { + params( + listOf( + "io.prometheus:simpleclient_tracer_otel", + "io.prometheus:simpleclient_tracer_otel_agent" + ) + ) } - module("io.netty:netty-codec-http", "io.netty.codec.http") { - exportAllPackages() - requireAllDefinedDependencies() + withModule("org.jetbrains.kotlin:kotlin-stdlib") { + params(listOf("org.jetbrains.kotlin:kotlin-stdlib-common")) } - module("io.netty:netty-codec-http2", "io.netty.codec.http2") { - exportAllPackages() - requireAllDefinedDependencies() + withModule("junit:junit") { + params(listOf("org.hamcrest:hamcrest-core")) } - module("io.netty:netty-codec-socks", "io.netty.codec.socks") { +} + +// Fix or enhance the 'module-info.class' of third-party Modules. This is about the +// 'module-info.class' inside the Jar files. In our full Java Modules setup every +// Jar needs to have this file. If it is missing, it is added by what is configured here. +extraJavaModuleInfo { + failOnAutomaticModules.set(true) // Only allow Jars with 'module-info' on all module paths + + module("io.grpc:grpc-netty", "grpc.netty") { exportAllPackages() requireAllDefinedDependencies() + requires("java.logging") } - module("io.netty:netty-handler-proxy", "io.netty.handler.proxy") { + module("io.grpc:grpc-stub", "grpc.stub") { exportAllPackages() requireAllDefinedDependencies() + requires("java.logging") } - module("io.netty:netty-transport-native-unix-common", "io.netty.transport.unix.common") { + module("io.grpc:grpc-testing", "grpc.testing") + module("io.grpc:grpc-services", "grpc.services") + module("io.grpc:grpc-protobuf", "grpc.protobuf") + module("io.grpc:grpc-protobuf-lite", "grpc.protobuf.lite") + module("javax.annotation:javax.annotation-api", "java.annotation") + module("com.github.spotbugs:spotbugs-annotations", "com.github.spotbugs.annotations") + module("com.google.protobuf:protobuf-java", "com.google.protobuf") { exportAllPackages() requireAllDefinedDependencies() + requires("java.logging") } - module("io.netty:netty-buffer", "io.netty.buffer") { + module("com.google.guava:guava", "com.google.common") { exportAllPackages() requireAllDefinedDependencies() + requires("java.logging") } - module("io.netty:netty-codec", "io.netty.codec") { + module("com.google.guava:failureaccess", "com.google.guava.failureaccess") + module("com.google.api.grpc:proto-google-common-protos", "com.google.api.grpc.common") + module("com.google.dagger:dagger", "dagger") + module("io.perfmark:perfmark-api", "io.perfmark") + module("javax.inject:javax.inject", "javax.inject") + module("org.apache.commons:commons-lang3", "org.apache.commons.lang3") + module("commons-codec:commons-codec", "org.apache.commons.codec") + module("commons-io:commons-io", "org.apache.commons.io") + module("org.apache.commons:commons-math3", "org.apache.commons.math3") + module("org.apache.commons:commons-collections4", "org.apache.commons.collections4") + module("com.esaulpaugh:headlong", "headlong") + module("org.connid:framework", "org.connid.framework") + module("org.connid:framework-internal", "org.connid.framework.internal") { exportAllPackages() - requireAllDefinedDependencies() + requires("org.connid.framework") // this is missing in POM } + module("org.jetbrains:annotations", "org.jetbrains.annotations") + module("io.tmio:tuweni-units", "tuweni.units") + module("io.tmio:tuweni-bytes", "tuweni.bytes") + module("net.i2p.crypto:eddsa", "net.i2p.crypto.eddsa") + module("io.netty:netty-codec-http", "io.netty.codec.http") + module("io.netty:netty-codec-http2", "io.netty.codec.http2") + module("io.netty:netty-codec-socks", "io.netty.codec.socks") + module("io.netty:netty-handler-proxy", "io.netty.handler.proxy") + module("io.netty:netty-transport-native-unix-common", "io.netty.transport.unix.common") + module("io.netty:netty-buffer", "io.netty.buffer") + module("io.netty:netty-codec", "io.netty.codec") module("io.netty:netty-common", "io.netty.common") { exportAllPackages() requireAllDefinedDependencies() @@ -200,98 +191,32 @@ extraJavaModuleInfo { requires("jdk.unsupported") ignoreServiceProvider("reactor.blockhound.integration.BlockHoundIntegration") } - module("io.netty:netty-handler", "io.netty.handler") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("io.netty:netty-resolver", "io.netty.resolver") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("io.netty:netty-transport", "io.netty.transport") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("io.netty:netty-transport-classes-epoll", "io.netty.transport.classes.epoll") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.antlr:antlr4-runtime", "org.antlr.antlr4.runtime") { - exportAllPackages() - // no dependencies - } - module("org.hyperledger.besu.internal:algorithms", "org.hyperledger.besu.internal.crypto") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.hyperledger.besu.internal:rlp", "org.hyperledger.besu.internal.rlp") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.hyperledger.besu:arithmetic", "org.hyperledger.besu.nativelib.arithmetic") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.hyperledger.besu:blake2bf", "org.hyperledger.besu.nativelib.blake2bf") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.hyperledger.besu:bls12-381", "org.hyperledger.besu.nativelib.bls12_381") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.hyperledger.besu:besu-datatypes", "org.hyperledger.besu.datatypes") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.hyperledger.besu:evm", "org.hyperledger.besu.evm") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.hyperledger.besu:plugin-api", "org.hyperledger.besu.plugin.api") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.hyperledger.besu:secp256k1", "org.hyperledger.besu.nativelib.secp256k1") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.hyperledger.besu:secp256r1", "org.hyperledger.besu.nativelib.secp256r1") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.goterl:resource-loader", "resource.loader") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.goterl:lazysodium-java", "lazysodium.java") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("tech.pegasys:jc-kzg-4844", "tech.pegasys.jckzg4844") { - exportAllPackages() - // no dependencies - } + module("io.netty:netty-handler", "io.netty.handler") + module("io.netty:netty-resolver", "io.netty.resolver") + module("io.netty:netty-transport", "io.netty.transport") + module("io.netty:netty-transport-classes-epoll", "io.netty.transport.classes.epoll") + module("org.antlr:antlr4-runtime", "org.antlr.antlr4.runtime") + module("org.hyperledger.besu.internal:algorithms", "org.hyperledger.besu.internal.crypto") + module("org.hyperledger.besu.internal:rlp", "org.hyperledger.besu.internal.rlp") + module("org.hyperledger.besu:arithmetic", "org.hyperledger.besu.nativelib.arithmetic") + module("org.hyperledger.besu:blake2bf", "org.hyperledger.besu.nativelib.blake2bf") + module("org.hyperledger.besu:bls12-381", "org.hyperledger.besu.nativelib.bls12_381") + module("org.hyperledger.besu:besu-datatypes", "org.hyperledger.besu.datatypes") + module("org.hyperledger.besu:evm", "org.hyperledger.besu.evm") + module("org.hyperledger.besu:plugin-api", "org.hyperledger.besu.plugin.api") + module("org.hyperledger.besu:secp256k1", "org.hyperledger.besu.nativelib.secp256k1") + module("org.hyperledger.besu:secp256r1", "org.hyperledger.besu.nativelib.secp256r1") + module("com.goterl:resource-loader", "resource.loader") + module("com.goterl:lazysodium-java", "lazysodium.java") + module("tech.pegasys:jc-kzg-4844", "tech.pegasys.jckzg4844") module("net.java.dev.jna:jna", "com.sun.jna") { exportAllPackages() requires("java.logging") } - module("org.eclipse.collections:eclipse-collections-api", "org.eclipse.collections.api") { - exportAllPackages() - // no dependencies - } - module("org.eclipse.collections:eclipse-collections", "org.eclipse.collections.impl") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("io.prometheus:simpleclient", "io.prometheus.simpleclient") { - exportAllPackages() - // no dependencies - } - module("io.prometheus:simpleclient_common", "io.prometheus.simpleclient_common") { - exportAllPackages() - requireAllDefinedDependencies() - } + module("org.eclipse.collections:eclipse-collections-api", "org.eclipse.collections.api") + module("org.eclipse.collections:eclipse-collections", "org.eclipse.collections.impl") + module("io.prometheus:simpleclient", "io.prometheus.simpleclient") + module("io.prometheus:simpleclient_common", "io.prometheus.simpleclient_common") module("io.prometheus:simpleclient_httpserver", "io.prometheus.simpleclient.httpserver") { exportAllPackages() requireAllDefinedDependencies() @@ -310,176 +235,54 @@ extraJavaModuleInfo { ) // Annotation processing only - module("com.google.auto.service:auto-service-annotations", "com.google.auto.service") { - exportAllPackages() - // no dependencies - } - module("com.google.auto.service:auto-service", "com.google.auto.service.processor") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.google.auto:auto-common", "com.google.auto.common") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.google.dagger:dagger-compiler", "dagger.compiler") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.google.dagger:dagger-producers", "dagger.producers") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.google.dagger:dagger-spi", "dagger.spi") { - exportAllPackages() - requireAllDefinedDependencies() - } + module("com.google.auto.service:auto-service-annotations", "com.google.auto.service") + module("com.google.auto.service:auto-service", "com.google.auto.service.processor") + module("com.google.auto:auto-common", "com.google.auto.common") + module("com.google.dagger:dagger-compiler", "dagger.compiler") + module("com.google.dagger:dagger-producers", "dagger.producers") + module("com.google.dagger:dagger-spi", "dagger.spi") module( "com.google.devtools.ksp:symbol-processing-api", "com.google.devtools.ksp.symbolprocessingapi" - ) { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.google.errorprone:javac-shaded", "com.google.errorprone.javac.shaded") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.google.googlejavaformat:google-java-format", "com.google.googlejavaformat") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("net.ltgt.gradle.incap:incap", "net.ltgt.gradle.incap") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.jetbrains.kotlinx:kotlinx-metadata-jvm", "kotlinx.metadata.jvm") { - exportAllPackages() - requireAllDefinedDependencies() - } + ) + module("com.google.errorprone:javac-shaded", "com.google.errorprone.javac.shaded") + module("com.google.googlejavaformat:google-java-format", "com.google.googlejavaformat") + module("net.ltgt.gradle.incap:incap", "net.ltgt.gradle.incap") + module("org.jetbrains.kotlinx:kotlinx-metadata-jvm", "kotlinx.metadata.jvm") // Testing only - module("com.google.jimfs:jimfs", "com.google.jimfs") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.awaitility:awaitility", "awaitility") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("uk.org.webcompere:system-stubs-core", "uk.org.webcompere.systemstubs.core") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("uk.org.webcompere:system-stubs-jupiter", "uk.org.webcompere.systemstubs.jupiter") { - exportAllPackages() - requireAllDefinedDependencies() - } + module("com.google.jimfs:jimfs", "com.google.jimfs") + module("org.awaitility:awaitility", "awaitility") + module("uk.org.webcompere:system-stubs-core", "uk.org.webcompere.systemstubs.core") + module("uk.org.webcompere:system-stubs-jupiter", "uk.org.webcompere.systemstubs.jupiter") // JMH only - module("net.sf.jopt-simple:jopt-simple", "jopt.simple") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.openjdk.jmh:jmh-core", "jmh.core") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.openjdk.jmh:jmh-generator-asm", "jmh.generator.asm") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.openjdk.jmh:jmh-generator-bytecode", "jmh.generator.bytecode") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.openjdk.jmh:jmh-generator-reflection", "jmh.generator.reflection") { - exportAllPackages() - requireAllDefinedDependencies() - } + module("net.sf.jopt-simple:jopt-simple", "jopt.simple") + module("org.openjdk.jmh:jmh-core", "jmh.core") + module("org.openjdk.jmh:jmh-generator-asm", "jmh.generator.asm") + module("org.openjdk.jmh:jmh-generator-bytecode", "jmh.generator.bytecode") + module("org.openjdk.jmh:jmh-generator-reflection", "jmh.generator.reflection") // Test clients only - module("com.github.docker-java:docker-java-api", "com.github.docker.java.api") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.github.docker-java:docker-java-transport", "com.github.docker.java.transport") { - exportAllPackages() - requireAllDefinedDependencies() - } + module("com.github.docker-java:docker-java-api", "com.github.docker.java.api") + module("com.github.docker-java:docker-java-transport", "com.github.docker.java.transport") module( "com.github.docker-java:docker-java-transport-zerodep", "com.github.docker.transport.zerodep" - ) { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.google.protobuf:protobuf-java-util", "com.google.protobuf.util") { - exportAllPackages() - requireAllDefinedDependencies() - } + ) + module("com.google.protobuf:protobuf-java-util", "com.google.protobuf.util") module("com.squareup:javapoet", "com.squareup.javapoet") { exportAllPackages() requires("java.compiler") } - module("junit:junit", "junit") { - exportAllPackages() - // no dependencies - } - module("org.apache.commons:commons-compress", "org.apache.commons.compress") { - exportAllPackages() - // no dependencies - } - module("org.hamcrest:hamcrest", "org.hamcrest") { - exportAllPackages() - // no dependencies - } - module("org.json:json", "org.json") { - exportAllPackages() - // no dependencies - } - module("org.mockito:mockito-core", "org.mockito") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.objenesis:objenesis", "org.objenesis") { - exportAllPackages() - // no dependencies - } - module("org.rnorth.duct-tape:duct-tape", "org.rnorth.ducttape") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.testcontainers:junit-jupiter", "org.testcontainers.junit.jupiter") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.testcontainers:testcontainers", "org.testcontainers") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("org.mockito:mockito-junit-jupiter", "org.mockito.junit.jupiter") { - exportAllPackages() - requireAllDefinedDependencies() - } - - // Jars that are not patched but to which Jars we patch above have 'requires'. - // If the 'requires' are created by requireAllDefinedDependencies(), the information - // how the library coordinates map to the Module Names is requires here. - knownModule( - "com.fasterxml.jackson.core:jackson-annotations", - "com.fasterxml.jackson.annotation" - ) - knownModule("com.github.ben-manes.caffeine:caffeine", "com.github.benmanes.caffeine") - knownModule("com.google.code.gson:gson", "com.google.gson") - knownModule("io.helidon.grpc:io.grpc", "io.grpc") - knownModule("net.bytebuddy:byte-buddy", "net.bytebuddy") - knownModule("net.bytebuddy:byte-buddy-agent", "net.bytebuddy.agent") - knownModule("org.apache.logging.log4j:log4j-api", "org.apache.logging.log4j") - knownModule("org.bouncycastle:bcprov-jdk18on", "org.bouncycastle.provider") - knownModule("org.jetbrains.kotlin:kotlin-stdlib", "kotlin.stdlib") - knownModule("org.jetbrains.kotlin:kotlin-stdlib-jdk8", "kotlin.stdlib.jdk8") - knownModule("org.junit.jupiter:junit-jupiter-api", "org.junit.jupiter.api") - knownModule("org.ow2.asm:asm", "org.objectweb.asm") - knownModule("org.slf4j:slf4j-api", "org.slf4j") + module("junit:junit", "junit") + module("org.apache.commons:commons-compress", "org.apache.commons.compress") + module("org.hamcrest:hamcrest", "org.hamcrest") + module("org.json:json", "org.json") + module("org.mockito:mockito-core", "org.mockito") + module("org.objenesis:objenesis", "org.objenesis") + module("org.rnorth.duct-tape:duct-tape", "org.rnorth.ducttape") + module("org.testcontainers:junit-jupiter", "org.testcontainers.junit.jupiter") + module("org.testcontainers:testcontainers", "org.testcontainers") + module("org.mockito:mockito-junit-jupiter", "org.mockito.junit.jupiter") } diff --git a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.lifecycle.gradle.kts b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.lifecycle.gradle.kts new file mode 100644 index 000000000000..ef8cee2c5083 --- /dev/null +++ b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.lifecycle.gradle.kts @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2016-2024 Hedera Hashgraph, LLC + * + * 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. + */ + +plugins { + id("base") + id("com.diffplug.spotless") +} + +// Convenience for local development: when running './gradlew' without any parameters just show the +// tasks from the 'build' group +defaultTasks("tasks") + +tasks.named("tasks") { + if (!isDetail) { + displayGroup = "build" + } +} + +tasks.register("qualityGate") { + group = "build" + description = "Apply spotless rules and run all quality checks." + dependsOn(tasks.spotlessApply) + dependsOn(tasks.assemble) +} diff --git a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.maven-publish.gradle.kts b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.maven-publish.gradle.kts index f95f9803739e..ba45f82a7cfb 100644 --- a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.maven-publish.gradle.kts +++ b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.maven-publish.gradle.kts @@ -25,22 +25,11 @@ java { withSourcesJar() } -val javaComponent = components["java"] as AdhocComponentWithVariants - -plugins.withId("java-test-fixtures") { - // Disable publishing of test fixture if 'java-test-fixtures' plugin is used - // https://docs.gradle.org/current/userguide/java_testing.html#ex-disable-publishing-of-test-fixtures-variants - javaComponent.withVariantsFromConfiguration(configurations["testFixturesApiElements"]) { - skip() - } - javaComponent.withVariantsFromConfiguration(configurations["testFixturesRuntimeElements"]) { - skip() - } -} +tasks.withType().configureEach { setGroup(null) } val maven = publishing.publications.create("maven") { - from(javaComponent) + from(components["java"]) versionMapping { // Everything published takes the versions from the resolution result. // These are the versions we define in 'hedera-dependency-versions' diff --git a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.root.gradle.kts b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.root.gradle.kts index 68680ae813b9..67e50ec2fbac 100644 --- a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.root.gradle.kts +++ b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.root.gradle.kts @@ -18,6 +18,7 @@ import Utils.Companion.versionTxt import net.swiftzer.semver.SemVer plugins { + id("com.hedera.hashgraph.lifecycle") id("com.hedera.hashgraph.repositories") id("com.hedera.hashgraph.aggregate-reports") id("com.hedera.hashgraph.spotless-conventions") diff --git a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.sdk.conventions.gradle.kts b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.sdk.conventions.gradle.kts index 49a7504022ef..0daa91c5b955 100644 --- a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.sdk.conventions.gradle.kts +++ b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.sdk.conventions.gradle.kts @@ -34,6 +34,9 @@ tasks.test { val timingSensitive = tasks.register("timingSensitive") { + group = "build" + description = "Runs the timing sensitive tests of test suite." + // Separate target (task) for timingSensitive tests. // Tests should eventually be fixed or moved to 'hammer'. testClassesDirs = sourceSets.test.get().output.classesDirs @@ -42,7 +45,7 @@ val timingSensitive = usesService( gradle.sharedServices.registerIfAbsent( "lock", - com.hedera.hashgraph.gradlebuild.service.TaskLockService::class + com.hedera.hashgraph.gradlebuild.services.TaskLockService::class ) { maxParallelUsages = 1 } diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoGrpcDependencyMetadataRule.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoGrpcDependencyMetadataRule.kt deleted file mode 100644 index 74b0aa24c79e..000000000000 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoGrpcDependencyMetadataRule.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2022-2023 Hedera Hashgraph, LLC - * - * 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. - */ - -package com.hedera.hashgraph.gradlebuild.rules - -import org.gradle.api.artifacts.CacheableRule -import org.gradle.api.artifacts.ComponentMetadataContext -import org.gradle.api.artifacts.ComponentMetadataRule - -/** - * Replace all 'grpc' dependencies with a singe dependency to - * 'io.helidon.grpc:io.grpc' which is a re-packaged Modular Jar - * of all the 'grpc' libraries. - */ -@CacheableRule -abstract class IoGrpcDependencyMetadataRule : ComponentMetadataRule { - - override fun execute(context: ComponentMetadataContext) { - context.details.allVariants { - withDependencies { - removeAll { it.name == "grpc-api" } - removeAll { it.name == "grpc-context" } - removeAll { it.name == "grpc-core" } - removeAll { it.name == "error_prone_annotations" } - removeAll { it.group == "com.google.code.findbugs" } - add("io.helidon.grpc:io.grpc") - } - } - } -} diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoNettyNativeEpollMetadataRule.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoNettyNativeEpollMetadataRule.kt deleted file mode 100644 index 229c51d04545..000000000000 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoNettyNativeEpollMetadataRule.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2022-2023 Hedera Hashgraph, LLC - * - * 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. - */ - -package com.hedera.hashgraph.gradlebuild.rules - -import org.gradle.api.artifacts.CacheableRule -import org.gradle.api.artifacts.ComponentMetadataContext -import org.gradle.api.artifacts.ComponentMetadataRule - -/** - * Configures native Jars of 'io.netty.native.epoll' so that they can be selected by 'capability'. - * https://docs.gradle.org/current/userguide/component_metadata_rules.html#making_different_flavors_of_a_library_available_through_capabilities - */ -@CacheableRule -abstract class IoNettyNativeEpollMetadataRule : ComponentMetadataRule { - - override fun execute(context: ComponentMetadataContext) { - val name = context.details.id.name - val version = context.details.id.version - listOf("linux-x86_64", "linux-aarch_64").forEach { nativeVariant -> - context.details.addVariant(nativeVariant, "runtime") { - withCapabilities { - removeCapability("io.netty", "netty-transport-native-epoll") - addCapability("io.netty", "netty-transport-native-epoll-$nativeVariant", version) - } - withFiles { - removeAllFiles() - addFile("$name-$version-$nativeVariant.jar") - } - } - } - } -} diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoPrometheusSimpleclientMetadataRule.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoPrometheusSimpleclientMetadataRule.kt deleted file mode 100644 index 1dae45916db7..000000000000 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoPrometheusSimpleclientMetadataRule.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2022-2023 Hedera Hashgraph, LLC - * - * 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. - */ - -package com.hedera.hashgraph.gradlebuild.rules - -import org.gradle.api.artifacts.CacheableRule -import org.gradle.api.artifacts.ComponentMetadataContext -import org.gradle.api.artifacts.ComponentMetadataRule - -/** - * Removes unused transitive dependencies of 'io.prometheus:simpleclient'. - */ -@CacheableRule -abstract class IoPrometheusSimpleclientMetadataRule : ComponentMetadataRule { - - override fun execute(context: ComponentMetadataContext) { - context.details.allVariants { - withDependencies { - removeAll { it.name == "simpleclient_tracer_otel" } - removeAll { it.name == "simpleclient_tracer_otel_agent" } - } - } - } -} \ No newline at end of file diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveAnnotationLibrariesMetadataRule.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveAnnotationLibrariesMetadataRule.kt deleted file mode 100644 index 2994f4a48c73..000000000000 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveAnnotationLibrariesMetadataRule.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2022-2023 Hedera Hashgraph, LLC - * - * 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. - */ - -package com.hedera.hashgraph.gradlebuild.rules - -import org.gradle.api.artifacts.CacheableRule -import org.gradle.api.artifacts.ComponentMetadataContext -import org.gradle.api.artifacts.ComponentMetadataRule - -/** - * Removes annotation libraries for annotations that this project does not require - * at runtime or compile time. These are typically annotations used by additional - * code analysis tools that are not used by this project. - */ -@CacheableRule -abstract class RemoveAnnotationLibrariesMetadataRule : ComponentMetadataRule { - - override fun execute(context: ComponentMetadataContext) { - context.details.allVariants { - withDependencies { - removeAll { it.name == "animal-sniffer-annotations" } - removeAll { it.name == "checker-qual" } - removeAll { it.name == "checker-compat-qual" } - removeAll { it.name == "error_prone_annotations" } - removeAll { it.name == "j2objc-annotations" } - removeAll { it.name == "listenablefuture" } - removeAll { it.group == "com.google.android" && it.name == "annotations"} - // 'findbugs' annotations are not used and cause split package with 'javax.annotation-api' - removeAll { it.group == "com.google.code.findbugs" } - } - } - } -} \ No newline at end of file diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveHamcrestCoreMetadataRule.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveHamcrestCoreMetadataRule.kt deleted file mode 100644 index f3380c0b809f..000000000000 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveHamcrestCoreMetadataRule.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2022-2023 Hedera Hashgraph, LLC - * - * 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. - */ - -package com.hedera.hashgraph.gradlebuild.rules - -import org.gradle.api.artifacts.CacheableRule -import org.gradle.api.artifacts.ComponentMetadataContext -import org.gradle.api.artifacts.ComponentMetadataRule - -/** - * JUnit4 is only needed as a transitive dependency of test containers. - * We do not use it for running tests or asserting. Hence, in our context, - * the (old) hamcrest-core assertion library can be removed. - */ -@CacheableRule -abstract class RemoveHamcrestCoreMetadataRule : ComponentMetadataRule { - - override fun execute(context: ComponentMetadataContext) { - context.details.allVariants { - withDependencies { - removeAll { it.name == "hamcrest-core" } - } - } - } -} \ No newline at end of file diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveKotlinStdlibCommonMetadataRule.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveKotlinStdlibCommonMetadataRule.kt deleted file mode 100644 index 60c75ee85143..000000000000 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveKotlinStdlibCommonMetadataRule.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2022-2023 Hedera Hashgraph, LLC - * - * 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. - */ - -package com.hedera.hashgraph.gradlebuild.rules - -import org.gradle.api.artifacts.CacheableRule -import org.gradle.api.artifacts.ComponentMetadataContext -import org.gradle.api.artifacts.ComponentMetadataRule - -/** - * Kotlin 'kotlin-stdlib-common' (which is not a JPMS module) is not required at runtime, if the - * runtime is a JVM. It exists for Kotlins multi-platform aspect (which we do not care for). - */ -@CacheableRule -abstract class RemoveKotlinStdlibCommonMetadataRule : ComponentMetadataRule { - - override fun execute(context: ComponentMetadataContext) { - context.details.allVariants { - withDependencies { - removeAll { it.name == "kotlin-stdlib-common" } - } - } - } -} \ No newline at end of file diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/service/TaskLockService.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/services/TaskLockService.kt similarity index 73% rename from build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/service/TaskLockService.kt rename to build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/services/TaskLockService.kt index 10b30b04f833..02a673bb75ca 100644 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/service/TaskLockService.kt +++ b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/services/TaskLockService.kt @@ -1,4 +1,4 @@ -package com.hedera.hashgraph.gradlebuild.service +package com.hedera.hashgraph.gradlebuild.services import org.gradle.api.services.BuildService import org.gradle.api.services.BuildServiceParameters diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1af9e0930b89..a80b22ce5cff 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew.bat b/gradlew.bat index 6689b85beecd..7101f8e4676f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/hedera-node/hapi/build.gradle.kts b/hedera-node/hapi/build.gradle.kts index 9bfc4093709d..d74d977ce7b8 100644 --- a/hedera-node/hapi/build.gradle.kts +++ b/hedera-node/hapi/build.gradle.kts @@ -18,7 +18,7 @@ plugins { id("com.hedera.hashgraph.hapi") id("com.hedera.hashgraph.evm-maven-publish") @Suppress("DSL_SCOPE_VIOLATION") alias(libs.plugins.pbj) - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } description = "Hedera API" diff --git a/hedera-node/hedera-app-spi/build.gradle.kts b/hedera-node/hedera-app-spi/build.gradle.kts index 8855753afe80..6509307a50d7 100644 --- a/hedera-node/hedera-app-spi/build.gradle.kts +++ b/hedera-node/hedera-app-spi/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("com.hedera.hashgraph.conventions") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } description = "Hedera Application - SPI" diff --git a/hedera-node/hedera-app/build.gradle.kts b/hedera-node/hedera-app/build.gradle.kts index 61c18de8d52a..e824670f52b3 100644 --- a/hedera-node/hedera-app/build.gradle.kts +++ b/hedera-node/hedera-app/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("com.hedera.hashgraph.conventions") id("com.hedera.hashgraph.benchmark-conventions") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } description = "Hedera Application - Implementation" @@ -197,7 +197,8 @@ tasks.register("run") { } tasks.register("modrun") { - group = "application" + group = "build" + description = "Run a Hedera consensus node instance." dependsOn(tasks.assemble) workingDir = nodeWorkingDir.get().asFile jvmArgs = listOf("-cp", "data/lib/*:data/apps/*", "-Dhedera.workflows.enabled=true") diff --git a/hedera-node/hedera-config/build.gradle.kts b/hedera-node/hedera-config/build.gradle.kts index a66daae7e031..98e8f1ec3abd 100644 --- a/hedera-node/hedera-config/build.gradle.kts +++ b/hedera-node/hedera-config/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("com.hedera.hashgraph.conventions") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } description = "Hedera Configuration" diff --git a/hedera-node/hedera-mono-service/build.gradle.kts b/hedera-node/hedera-mono-service/build.gradle.kts index 0ea6f9d910a2..356553143f4e 100644 --- a/hedera-node/hedera-mono-service/build.gradle.kts +++ b/hedera-node/hedera-mono-service/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("com.hedera.hashgraph.conventions") id("com.hedera.hashgraph.benchmark-conventions") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } description = "Hedera Application - MONO Service Implementation" diff --git a/hedera-node/hedera-token-service/build.gradle.kts b/hedera-node/hedera-token-service/build.gradle.kts index c9e63060e433..d26b1c916e25 100644 --- a/hedera-node/hedera-token-service/build.gradle.kts +++ b/hedera-node/hedera-token-service/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("com.hedera.hashgraph.conventions") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } description = "Hedera Token Service API" diff --git a/hedera-node/test-clients/build.gradle.kts b/hedera-node/test-clients/build.gradle.kts index 1eca5056b734..6d98fd248d78 100644 --- a/hedera-node/test-clients/build.gradle.kts +++ b/hedera-node/test-clients/build.gradle.kts @@ -272,7 +272,7 @@ val copyValidation = val cleanValidation = tasks.register("cleanValidation") { - group = "build" + group = "copy" delete(File(project.file("validation-scenarios"), "ValidationScenarios.jar")) } @@ -286,7 +286,7 @@ val copyYahCli = val cleanYahCli = tasks.register("cleanYahCli") { - group = "build" + group = "copy" delete(File(project.file("yahcli"), "yahcli.jar")) } diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/ethereum/NonceSuite.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/ethereum/NonceSuite.java index 28c7075fe928..49681023d05b 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/ethereum/NonceSuite.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/ethereum/NonceSuite.java @@ -78,9 +78,9 @@ public class NonceSuite extends HapiSuite { private static final String REVERTER_CONSTRUCTOR_CONTRACT = "ReverterConstructor"; private static final String REVERTER_CONSTRUCTOR_TRANSFER_CONTRACT = "ReverterConstructorTransfer"; private static final String REVERTER_CONSTRUCTOR_CALL_WITH_VALUE_TO_ETH_PRECOMPILE_CONTRACT = - "ReverterConstructorCallWithValueToEthPrecompile"; + "ConsValueEthPrecompile"; private static final String REVERTER_CONSTRUCTOR_CALL_WITH_VALUE_TO_HEDERA_PRECOMPILE_CONTRACT = - "ReverterConstructorCallWithValueToHederaPrecompile"; + "ConsValueSysContract"; private static final String EXTERNAL_FUNCTION = "externalFunction"; private static final String REVERT_WITH_REVERT_REASON_FUNCTION = "revertWithRevertReason"; private static final String TRANSFER_TO_FUNCTION = "transferTo"; diff --git a/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ConsValueEthPrecompile.bin b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ConsValueEthPrecompile.bin new file mode 100644 index 000000000000..3294ec887680 --- /dev/null +++ b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ConsValueEthPrecompile.bin @@ -0,0 +1 @@ +60806040526000600273ffffffffffffffffffffffffffffffffffffffff166001604051602a9060a9565b60006040518083038185875af1925050503d80600081146065576040519150601f19603f3d011682016040523d82523d6000602084013e606a565b606091505b5050905080607757600080fd5b5060bc565b600081905092915050565b50565b60006095600083607c565b9150609e826087565b600082019050919050565b600060b282608a565b9150819050919050565b603f806100ca6000396000f3fe6080604052600080fdfea26469706673582212202e3dbdaadc75b74c9ba208a4c6c96908ac667757b0d65fd655aa27a769943a0f64736f6c63430008100033 \ No newline at end of file diff --git a/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ConsValueEthPrecompile.json b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ConsValueEthPrecompile.json new file mode 100644 index 000000000000..1e0e4702cb5d --- /dev/null +++ b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ConsValueEthPrecompile.json @@ -0,0 +1 @@ +[{"inputs":[],"stateMutability":"payable","type":"constructor"}] \ No newline at end of file diff --git a/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToEthPrecompile/ReverterConstructorCallWithValueToEthPrecompile.sol b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ConsValueEthPrecompile.sol similarity index 65% rename from hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToEthPrecompile/ReverterConstructorCallWithValueToEthPrecompile.sol rename to hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ConsValueEthPrecompile.sol index 3b83e214d928..2b05a7ea01d8 100644 --- a/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToEthPrecompile/ReverterConstructorCallWithValueToEthPrecompile.sol +++ b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ConsValueEthPrecompile.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.20; +pragma solidity ^0.8.0; -contract ReverterConstructorCallWithValueToEthPrecompile { +contract ConsValueEthPrecompile { constructor() payable { (bool success,) = address(0x2).call{value: 1}(""); diff --git a/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToEthPrecompile/ReverterConstructorCallWithValueToEthPrecompile.bin b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ReverterConstructorCallWithValueToEthPrecompile.bin similarity index 100% rename from hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToEthPrecompile/ReverterConstructorCallWithValueToEthPrecompile.bin rename to hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ReverterConstructorCallWithValueToEthPrecompile.bin diff --git a/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToEthPrecompile/ReverterConstructorCallWithValueToEthPrecompile.json b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ReverterConstructorCallWithValueToEthPrecompile.json similarity index 100% rename from hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToEthPrecompile/ReverterConstructorCallWithValueToEthPrecompile.json rename to hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueEthPrecompile/ReverterConstructorCallWithValueToEthPrecompile.json diff --git a/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueSysContract/ConsValueSysContract.bin b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueSysContract/ConsValueSysContract.bin new file mode 100644 index 000000000000..095553eda2ae --- /dev/null +++ b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueSysContract/ConsValueSysContract.bin @@ -0,0 +1 @@ +6080604052600061016773ffffffffffffffffffffffffffffffffffffffff166001604051602b9060aa565b60006040518083038185875af1925050503d80600081146066576040519150601f19603f3d011682016040523d82523d6000602084013e606b565b606091505b5050905080607857600080fd5b5060bd565b600081905092915050565b50565b60006096600083607d565b9150609f826088565b600082019050919050565b600060b382608b565b9150819050919050565b603f806100cb6000396000f3fe6080604052600080fdfea2646970667358221220c8954bc418cec31160f47872a782f65cf40e0f0489c4b1977afcfa0caaf0628b64736f6c63430008100033 \ No newline at end of file diff --git a/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueSysContract/ConsValueSysContract.json b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueSysContract/ConsValueSysContract.json new file mode 100644 index 000000000000..1e0e4702cb5d --- /dev/null +++ b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueSysContract/ConsValueSysContract.json @@ -0,0 +1 @@ +[{"inputs":[],"stateMutability":"payable","type":"constructor"}] \ No newline at end of file diff --git a/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToHederaPrecompile/ReverterConstructorCallWithValueToHederaPrecompile.sol b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueSysContract/ConsValueSysContract.sol similarity index 65% rename from hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToHederaPrecompile/ReverterConstructorCallWithValueToHederaPrecompile.sol rename to hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueSysContract/ConsValueSysContract.sol index b85649416b78..c09f264a8227 100644 --- a/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToHederaPrecompile/ReverterConstructorCallWithValueToHederaPrecompile.sol +++ b/hedera-node/test-clients/src/main/resource/contract/contracts/ConsValueSysContract/ConsValueSysContract.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.20; +pragma solidity ^0.8.0; -contract ReverterConstructorCallWithValueToHederaPrecompile { +contract ConsValueSysContract { constructor() payable { (bool success,) = address(0x167).call{value: 1}(""); diff --git a/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToHederaPrecompile/ReverterConstructorCallWithValueToHederaPrecompile.bin b/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToHederaPrecompile/ReverterConstructorCallWithValueToHederaPrecompile.bin deleted file mode 100644 index 7f0d05915670..000000000000 --- a/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToHederaPrecompile/ReverterConstructorCallWithValueToHederaPrecompile.bin +++ /dev/null @@ -1 +0,0 @@ -60806040525f61016773ffffffffffffffffffffffffffffffffffffffff166001604051602a9060a1565b5f6040518083038185875af1925050503d805f81146062576040519150601f19603f3d011682016040523d82523d5f602084013e6067565b606091505b50509050806073575f80fd5b5060b3565b5f81905092915050565b50565b5f608e5f836078565b91506097826082565b5f82019050919050565b5f60a9826085565b9150819050919050565b603e806100bf5f395ff3fe60806040525f80fdfea2646970667358221220d8429086ef3ca628542c700e6826b788bdc6ab6ee2f72f5f91b318e5ae76981464736f6c63430008180033 \ No newline at end of file diff --git a/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToHederaPrecompile/ReverterConstructorCallWithValueToHederaPrecompile.json b/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToHederaPrecompile/ReverterConstructorCallWithValueToHederaPrecompile.json deleted file mode 100644 index 5fa856267a8b..000000000000 --- a/hedera-node/test-clients/src/main/resource/contract/contracts/ReverterConstructorCallWithValueToHederaPrecompile/ReverterConstructorCallWithValueToHederaPrecompile.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "payable", - "type": "constructor" - } -] \ No newline at end of file diff --git a/platform-sdk/swirlds-base/build.gradle.kts b/platform-sdk/swirlds-base/build.gradle.kts index 45d362a9590b..130117977b9b 100644 --- a/platform-sdk/swirlds-base/build.gradle.kts +++ b/platform-sdk/swirlds-base/build.gradle.kts @@ -18,7 +18,7 @@ plugins { id("com.hedera.hashgraph.sdk.conventions") id("com.hedera.hashgraph.platform-maven-publish") id("com.hedera.hashgraph.benchmark-conventions") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } testModuleInfo { requires("org.junit.jupiter.api") } diff --git a/platform-sdk/swirlds-common/build.gradle.kts b/platform-sdk/swirlds-common/build.gradle.kts index 2db78a006d6e..3709fc79ad37 100644 --- a/platform-sdk/swirlds-common/build.gradle.kts +++ b/platform-sdk/swirlds-common/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("com.hedera.hashgraph.sdk.conventions") id("com.hedera.hashgraph.platform-maven-publish") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } mainModuleInfo { diff --git a/platform-sdk/swirlds-config-api/build.gradle.kts b/platform-sdk/swirlds-config-api/build.gradle.kts index 7f60cd81e132..47a52cc77ead 100644 --- a/platform-sdk/swirlds-config-api/build.gradle.kts +++ b/platform-sdk/swirlds-config-api/build.gradle.kts @@ -17,5 +17,5 @@ plugins { id("com.hedera.hashgraph.sdk.conventions") id("com.hedera.hashgraph.platform-maven-publish") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } diff --git a/platform-sdk/swirlds-config-extensions/build.gradle.kts b/platform-sdk/swirlds-config-extensions/build.gradle.kts index 8a4e9302c61b..9e59fdc8bbc7 100644 --- a/platform-sdk/swirlds-config-extensions/build.gradle.kts +++ b/platform-sdk/swirlds-config-extensions/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("com.hedera.hashgraph.sdk.conventions") id("com.hedera.hashgraph.platform-maven-publish") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } testModuleInfo { diff --git a/platform-sdk/swirlds-jasperdb/build.gradle.kts b/platform-sdk/swirlds-jasperdb/build.gradle.kts index 01025b0a40c5..83a43305f27f 100644 --- a/platform-sdk/swirlds-jasperdb/build.gradle.kts +++ b/platform-sdk/swirlds-jasperdb/build.gradle.kts @@ -18,7 +18,7 @@ plugins { id("com.hedera.hashgraph.sdk.conventions") id("com.hedera.hashgraph.platform-maven-publish") id("com.hedera.hashgraph.benchmark-conventions") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } mainModuleInfo { annotationProcessor("com.swirlds.config.processor") } diff --git a/platform-sdk/swirlds-logging/build.gradle.kts b/platform-sdk/swirlds-logging/build.gradle.kts index 825125e7c7ac..b8ca4d37ed6a 100644 --- a/platform-sdk/swirlds-logging/build.gradle.kts +++ b/platform-sdk/swirlds-logging/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("com.hedera.hashgraph.sdk.conventions") id("com.hedera.hashgraph.platform-maven-publish") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") id("com.hedera.hashgraph.benchmark-conventions") } diff --git a/platform-sdk/swirlds-merkle/build.gradle.kts b/platform-sdk/swirlds-merkle/build.gradle.kts index 200f4335358e..b808f518bcc4 100644 --- a/platform-sdk/swirlds-merkle/build.gradle.kts +++ b/platform-sdk/swirlds-merkle/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("com.hedera.hashgraph.sdk.conventions") id("com.hedera.hashgraph.platform-maven-publish") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } testModuleInfo { diff --git a/platform-sdk/swirlds-merkle/src/test/java/com/swirlds/virtual/merkle/map/MapTest.java b/platform-sdk/swirlds-merkle/src/test/java/com/swirlds/virtual/merkle/map/MapTest.java index dac9be213d1c..2d6f63818db4 100644 --- a/platform-sdk/swirlds-merkle/src/test/java/com/swirlds/virtual/merkle/map/MapTest.java +++ b/platform-sdk/swirlds-merkle/src/test/java/com/swirlds/virtual/merkle/map/MapTest.java @@ -31,6 +31,7 @@ import com.swirlds.virtual.merkle.TestValueSerializer; import com.swirlds.virtualmap.VirtualMap; import com.swirlds.virtualmap.datasource.VirtualDataSourceBuilder; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Tags; @@ -55,6 +56,8 @@ VirtualMap createMap(String label) { @Tag(TIME_CONSUMING) @Tags({@Tag("VirtualMerkle"), @Tag("VMAP-019")}) @DisplayName("Insert one million elements with same key but different value") + // FUTURE WORK: https://github.com/hashgraph/hedera-services/issues/11498 + @Disabled void insertRemoveAndModifyOneMillion() throws InterruptedException { final int changesPerBatch = 15_432; // Some unexpected size just to be crazy final int max = 1_000_000; diff --git a/platform-sdk/swirlds-platform-core/build.gradle.kts b/platform-sdk/swirlds-platform-core/build.gradle.kts index 1f345fc4c399..9e9d62534fe8 100644 --- a/platform-sdk/swirlds-platform-core/build.gradle.kts +++ b/platform-sdk/swirlds-platform-core/build.gradle.kts @@ -18,7 +18,7 @@ plugins { id("com.hedera.hashgraph.sdk.conventions") id("com.hedera.hashgraph.platform-maven-publish") id("com.hedera.hashgraph.benchmark-conventions") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } mainModuleInfo { diff --git a/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/SwirldsPlatform.java b/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/SwirldsPlatform.java index d9f06cf30d37..06f4d2c1a600 100644 --- a/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/SwirldsPlatform.java +++ b/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/SwirldsPlatform.java @@ -910,10 +910,12 @@ private void loadReconnectState(final SignedState signedState) { // this guarantees that the platform status will be RECONNECT_COMPLETE before the state is saved platformStatusManager.submitStatusAction(new ReconnectCompleteAction(signedState.getRound())); latestImmutableState.setState(signedState.reserve("set latest immutable to reconnect state")); - stateManagementComponent.stateToLoad(signedState, SourceOfSignedState.RECONNECT); savedStateController.reconnectStateReceived( signedState.reserve("savedStateController.reconnectStateReceived")); - platformWiring.getSaveStateToDiskInput().put(signedState.reserve("save reconnect state to disk")); + // this will send the state to the signature collector which will send it to be written to disk. + // in the future, we might not send it to the collector because it already has all the signatures + // if this is the case, we must make sure to send it to the writer directly + stateManagementComponent.stateToLoad(signedState, SourceOfSignedState.RECONNECT); loadStateIntoConsensus(signedState); diff --git a/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/state/signed/SignedStateFileManager.java b/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/state/signed/SignedStateFileManager.java index cd5c3f6043e4..b23fd33ea418 100644 --- a/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/state/signed/SignedStateFileManager.java +++ b/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/state/signed/SignedStateFileManager.java @@ -18,7 +18,6 @@ import static com.swirlds.common.io.utility.FileUtils.deleteDirectoryAndLog; import static com.swirlds.logging.legacy.LogMarker.EXCEPTION; -import static com.swirlds.logging.legacy.LogMarker.STATE_TO_DISK; import static com.swirlds.platform.state.signed.StateToDiskReason.UNKNOWN; import com.swirlds.base.time.Time; @@ -126,7 +125,7 @@ public SignedStateFileManager( final SignedState signedState = reservedSignedState.get(); if (signedState.hasStateBeenSavedToDisk()) { logger.info( - STATE_TO_DISK.getMarker(), + EXCEPTION.getMarker(), "Not saving signed state for round {} to disk because it has already been saved.", signedState.getRound()); return null; diff --git a/platform-sdk/swirlds-virtualmap/build.gradle.kts b/platform-sdk/swirlds-virtualmap/build.gradle.kts index 8a939e537d4b..b31d2be822ab 100644 --- a/platform-sdk/swirlds-virtualmap/build.gradle.kts +++ b/platform-sdk/swirlds-virtualmap/build.gradle.kts @@ -20,7 +20,7 @@ plugins { id("com.hedera.hashgraph.sdk.conventions") id("com.hedera.hashgraph.platform-maven-publish") id("com.hedera.hashgraph.benchmark-conventions") - id("java-test-fixtures") + id("com.hedera.hashgraph.java-test-fixtures") } mainModuleInfo { annotationProcessor("com.swirlds.config.processor") } diff --git a/platform-sdk/swirlds-virtualmap/src/test/java/com/swirlds/virtualmap/VirtualMapTests.java b/platform-sdk/swirlds-virtualmap/src/test/java/com/swirlds/virtualmap/VirtualMapTests.java index 03345634b4d9..c758aa58ea6c 100644 --- a/platform-sdk/swirlds-virtualmap/src/test/java/com/swirlds/virtualmap/VirtualMapTests.java +++ b/platform-sdk/swirlds-virtualmap/src/test/java/com/swirlds/virtualmap/VirtualMapTests.java @@ -84,6 +84,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Tags; @@ -1047,6 +1048,8 @@ void testExternalSerializationAndDeserialization() throws IOException { @Tags({@Tag("VirtualMerkle"), @Tag("VMAP-019")}) @DisplayName("Insert one million elements with same key but different value") @Tag(TestQualifierTags.TIME_CONSUMING) + // FUTURE WORK: https://github.com/hashgraph/hedera-services/issues/11498 + @Disabled void insertRemoveAndModifyOneMillion() throws InterruptedException { final int changesPerBatch = 15_432; // Some unexpected size just to be crazy final int max = 1_000_000; diff --git a/platform-sdk/swirlds-virtualmap/src/test/java/com/swirlds/virtualmap/internal/pipeline/VirtualPipelineTests.java b/platform-sdk/swirlds-virtualmap/src/test/java/com/swirlds/virtualmap/internal/pipeline/VirtualPipelineTests.java index ce6656a35aa7..e3ef6ac8ad63 100644 --- a/platform-sdk/swirlds-virtualmap/src/test/java/com/swirlds/virtualmap/internal/pipeline/VirtualPipelineTests.java +++ b/platform-sdk/swirlds-virtualmap/src/test/java/com/swirlds/virtualmap/internal/pipeline/VirtualPipelineTests.java @@ -62,6 +62,7 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -835,6 +836,8 @@ private static void copyAndMeasureTime(final Deque copies, fin @Test @Tag(TestQualifierTags.TIME_CONSUMING) @DisplayName("Flush Throttle") + // FUTURE WORK: https://github.com/hashgraph/hedera-services/pull/11497 + @Disabled void flushThrottle() throws InterruptedException { final int preferredQueueSize = 2;