diff --git a/CHANGELOG.md b/CHANGELOG.md index a539ffe094..d93e72c423 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ and what APIs have changed, if applicable. ## [Unreleased] +## [29.52.1] - 2024-04-03 +- fix concurrent configuration resolution issue in the Gradle plugin in Gradle 8 and above + ## [29.52.0] - 2024-04-01 - fix applying client side service config override in INDIS flow @@ -5677,7 +5680,8 @@ patch operations can re-use these classes for generating patch messages. ## [0.14.1] -[Unreleased]: https://github.com/linkedin/rest.li/compare/v29.52.0...master +[Unreleased]: https://github.com/linkedin/rest.li/compare/v29.52.1...master +[29.52.1]: https://github.com/linkedin/rest.li/compare/v29.52.0...v29.52.1 [29.52.0]: https://github.com/linkedin/rest.li/compare/v29.51.14...v29.52.0 [29.51.14]: https://github.com/linkedin/rest.li/compare/v29.51.13...v29.51.14 [29.51.13]: https://github.com/linkedin/rest.li/compare/v29.51.12...v29.51.13 diff --git a/gradle-plugins/src/main/java/com/linkedin/pegasus/gradle/PegasusPlugin.java b/gradle-plugins/src/main/java/com/linkedin/pegasus/gradle/PegasusPlugin.java index 4a2453665f..1d2c5bd0ca 100644 --- a/gradle-plugins/src/main/java/com/linkedin/pegasus/gradle/PegasusPlugin.java +++ b/gradle-plugins/src/main/java/com/linkedin/pegasus/gradle/PegasusPlugin.java @@ -61,6 +61,7 @@ import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.ConfigurationContainer; +import org.gradle.api.artifacts.Dependency; import org.gradle.api.file.FileCollection; import org.gradle.api.plugins.JavaBasePlugin; import org.gradle.api.plugins.JavaPlugin; @@ -1185,6 +1186,14 @@ private static Configuration getDataModelConfig(Project project, SourceSet sourc : project.getConfigurations().getByName("dataModel"); } + private static Dependency getDataModelDependency(Project project, String dependencyPath, SourceSet sourceSet) + { + Map declaration = new HashMap<>(); + declaration.put("path", dependencyPath); + declaration.put("configuration", isTestSourceSet(sourceSet) ? "testDataModel" : "dataModel"); + return project.getDependencies().project(declaration); + } + private static boolean isTaskSuccessful(Task task) { return task.getState().getExecuted() @@ -1264,8 +1273,15 @@ protected void configureRestModelGeneration(Project project, SourceSet sourceSet .plus(project.getConfigurations().getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME)) .plus(sourceSet.getRuntimeClasspath()); String destinationDirPrefix = getGeneratedDirPath(project, sourceSet, REST_GEN_TYPE) + File.separatorChar; - FileCollection restModelResolverPath = apiProject.files(getDataSchemaPath(project, sourceSet)) - .plus(getDataModelConfig(apiProject, sourceSet)); + Project finalApiProject = apiProject; + + Configuration restModelResolverConf = project.getConfigurations().create(sourceSet.getTaskName(null, "restModelResolverPath"), c -> { + c.setVisible(false); + c.setCanBeConsumed(false); + c.setCanBeResolved(true); + c.getDependencies().add(project.getDependencies().create(finalApiProject.files(getDataSchemaPath(project, sourceSet)))); + c.getDependencies().add(getDataModelDependency(project, finalApiProject.getPath(), sourceSet)); + }); Set watchedRestModelInputDirs = buildWatchedRestModelInputDirs(project, sourceSet); Set restModelInputDirs = difference(sourceSet.getAllSource().getSrcDirs(), sourceSet.getResources().getSrcDirs()); @@ -1289,7 +1305,7 @@ protected void configureRestModelGeneration(Project project, SourceSet sourceSet .getExtensions().getExtraProperties().get("pegasus"); task.setIdlOptions(pegasusOptions.get(sourceSet.getName()).idlOptions); - task.setResolverPath(restModelResolverPath); + task.setResolverPath(restModelResolverConf); if (isPropertyTrue(project, ENABLE_ARG_FILE)) { task.setEnableArgFile(true); @@ -1347,7 +1363,7 @@ protected void configureRestModelGeneration(Project project, SourceSet sourceSet task.dependsOn(generateRestModelTask); task.setCurrentIdlFiles(SharedFileUtils.getIdlFiles(project, destinationDirPrefix)); task.setPreviousIdlDirectory(apiIdlDir); - task.setResolverPath(restModelResolverPath); + task.setResolverPath(restModelResolverConf); task.setCodegenClasspath(project.getConfigurations().getByName(PEGASUS_PLUGIN_CONFIGURATION)); task.setIdlCompatLevel(PropertyUtil.findCompatLevel(project, FileCompatibilityType.IDL)); if (isPropertyTrue(project, ENABLE_ARG_FILE)) diff --git a/gradle.properties b/gradle.properties index e541423404..7777341688 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=29.52.0 +version=29.52.1 group=com.linkedin.pegasus org.gradle.configureondemand=true org.gradle.parallel=true