From d40470b91ad5bf23aef59ade12453f550c37e705 Mon Sep 17 00:00:00 2001 From: daz Date: Mon, 28 Aug 2023 14:15:33 -0600 Subject: [PATCH 1/5] Refactor: Detangle GitHub rendering from extraction - Extracted `DependencyGraphRenderer` interface with single GitHub implementation - Abstract plugin allows renderer classname to be specified This should make it possible to implement support for other output formats. --- .../AbstractDependencyExtractorPlugin.kt | 127 ++++++++++++++++++ .../GitHubDependencyExtractorPlugin.kt | 119 +--------------- .../internal/DependencyExtractor.kt | 24 ++-- .../DependencyExtractorBuildService.kt | 13 +- .../internal/DependencyGraphRenderer.kt | 14 ++ .../internal/LegacyDependencyExtractor.kt | 6 +- ...ut.kt => GitHubDependencyGraphRenderer.kt} | 24 +++- .../github/GitHubRepositorySnapshotBuilder.kt | 4 +- .../internal/model/BuildLayout.kt | 14 +- 9 files changed, 202 insertions(+), 143 deletions(-) create mode 100644 plugin/src/main/kotlin/org/gradle/github/dependencygraph/AbstractDependencyExtractorPlugin.kt create mode 100644 plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyGraphRenderer.kt rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/{GitHubDependencyGraphOutput.kt => GitHubDependencyGraphRenderer.kt} (54%) diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/AbstractDependencyExtractorPlugin.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/AbstractDependencyExtractorPlugin.kt new file mode 100644 index 00000000..6ce31807 --- /dev/null +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/AbstractDependencyExtractorPlugin.kt @@ -0,0 +1,127 @@ +package org.gradle.github.dependencygraph + +import org.gradle.api.Plugin +import org.gradle.api.invocation.Gradle +import org.gradle.api.provider.Provider +import org.gradle.github.dependencygraph.internal.DependencyExtractor +import org.gradle.github.dependencygraph.internal.DependencyExtractorBuildService +import org.gradle.github.dependencygraph.internal.LegacyDependencyExtractor +import org.gradle.github.dependencygraph.internal.util.GradleExtensions +import org.gradle.github.dependencygraph.internal.util.service +import org.gradle.internal.build.event.BuildEventListenerRegistryInternal +import org.gradle.util.GradleVersion + +abstract class AbstractDependencyExtractorPlugin : Plugin { + // Register extension functions on `Gradle` type + private companion object : GradleExtensions() + + abstract fun getRendererClassName(): String + + internal lateinit var dependencyExtractorProvider: Provider + + override fun apply(gradle: Gradle) { + val gradleVersion = GradleVersion.current() + // Create the adapter based upon the version of Gradle + val applicatorStrategy = when { + gradleVersion < GradleVersion.version("8.0") -> PluginApplicatorStrategy.LegacyPluginApplicatorStrategy + else -> PluginApplicatorStrategy.DefaultPluginApplicatorStrategy + } + + // Create the service + dependencyExtractorProvider = applicatorStrategy.createExtractorService(gradle, getRendererClassName()) + + gradle.rootProject { project -> + dependencyExtractorProvider + .get() + .rootProjectBuildDirectory = project.buildDir + } + + // Register the service to listen for Build Events + applicatorStrategy.registerExtractorListener(gradle, dependencyExtractorProvider) + + // Register the shutdown hook that should execute at the completion of the Gradle build. + applicatorStrategy.registerExtractorServiceShutdown(gradle, dependencyExtractorProvider) + } + + /** + * Adapters for creating the [DependencyExtractor] and installing it into [Gradle] based upon the Gradle version. + */ + private interface PluginApplicatorStrategy { + + fun createExtractorService( + gradle: Gradle, + rendererClassName: String + ): Provider + + fun registerExtractorListener( + gradle: Gradle, + extractorServiceProvider: Provider + ) + + fun registerExtractorServiceShutdown( + gradle: Gradle, + extractorServiceProvider: Provider + ) + + object LegacyPluginApplicatorStrategy : PluginApplicatorStrategy { + + override fun createExtractorService( + gradle: Gradle, + rendererClassName: String + ): Provider { + val dependencyExtractor = LegacyDependencyExtractor(rendererClassName) + return gradle.providerFactory.provider { dependencyExtractor } + } + + override fun registerExtractorListener( + gradle: Gradle, + extractorServiceProvider: Provider + ) { + gradle.buildOperationListenerManager + .addListener(extractorServiceProvider.get()) + } + + override fun registerExtractorServiceShutdown( + gradle: Gradle, + extractorServiceProvider: Provider + ) { + gradle.buildFinished { + extractorServiceProvider.get().close() + gradle.buildOperationListenerManager + .removeListener(extractorServiceProvider.get()) + } + } + } + + object DefaultPluginApplicatorStrategy : PluginApplicatorStrategy { + private const val SERVICE_NAME = "gitHubDependencyExtractorService" + + override fun createExtractorService( + gradle: Gradle, + rendererClassName: String + ): Provider { + return gradle.sharedServices.registerIfAbsent( + SERVICE_NAME, + DependencyExtractorBuildService::class.java + ) { + it.parameters.rendererClassName.set(rendererClassName) + } + } + + override fun registerExtractorListener( + gradle: Gradle, + extractorServiceProvider: Provider + ) { + gradle.service() + .onOperationCompletion(extractorServiceProvider) + } + + override fun registerExtractorServiceShutdown( + gradle: Gradle, + extractorServiceProvider: Provider + ) { + // No-op as DependencyExtractorService is Auto-Closable + } + } + } +} diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyExtractorPlugin.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyExtractorPlugin.kt index 95f09713..e6532da9 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyExtractorPlugin.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyExtractorPlugin.kt @@ -1,123 +1,12 @@ package org.gradle.github.dependencygraph -import org.gradle.api.Plugin -import org.gradle.api.invocation.Gradle -import org.gradle.api.provider.Provider -import org.gradle.github.dependencygraph.internal.DependencyExtractor -import org.gradle.github.dependencygraph.internal.DependencyExtractorBuildService -import org.gradle.github.dependencygraph.internal.LegacyDependencyExtractor -import org.gradle.github.dependencygraph.internal.util.GradleExtensions -import org.gradle.github.dependencygraph.internal.util.service -import org.gradle.internal.build.event.BuildEventListenerRegistryInternal -import org.gradle.util.GradleVersion +import org.gradle.github.dependencygraph.internal.github.GitHubDependencyGraphRenderer /** * A plugin that collects all resolved dependencies in a Gradle build and exports it using the GitHub API format. */ -class GitHubDependencyExtractorPlugin : Plugin { - // Register extension functions on `Gradle` type - private companion object : GradleExtensions() - - internal lateinit var dependencyExtractorProvider: Provider - - override fun apply(gradle: Gradle) { - val gradleVersion = GradleVersion.current() - // Create the adapter based upon the version of Gradle - val applicatorStrategy = when { - gradleVersion < GradleVersion.version("8.0") -> PluginApplicatorStrategy.LegacyPluginApplicatorStrategy - else -> PluginApplicatorStrategy.DefaultPluginApplicatorStrategy - } - - // Create the service - dependencyExtractorProvider = applicatorStrategy.createExtractorService(gradle) - - gradle.rootProject { project -> - dependencyExtractorProvider - .get() - .rootProjectBuildDirectory = project.buildDir - } - - // Register the service to listen for Build Events - applicatorStrategy.registerExtractorListener(gradle, dependencyExtractorProvider) - - // Register the shutdown hook that should execute at the completion of the Gradle build. - applicatorStrategy.registerExtractorServiceShutdown(gradle, dependencyExtractorProvider) - } - - /** - * Adapters for creating the [DependencyExtractor] and installing it into [Gradle] based upon the Gradle version. - */ - private interface PluginApplicatorStrategy { - - fun createExtractorService( - gradle: Gradle - ): Provider - - fun registerExtractorListener( - gradle: Gradle, - extractorServiceProvider: Provider - ) - - fun registerExtractorServiceShutdown( - gradle: Gradle, - extractorServiceProvider: Provider - ) - - object LegacyPluginApplicatorStrategy : PluginApplicatorStrategy { - - override fun createExtractorService( - gradle: Gradle - ): Provider { - val dependencyExtractor = LegacyDependencyExtractor() - return gradle.providerFactory.provider { dependencyExtractor } - } - - override fun registerExtractorListener( - gradle: Gradle, - extractorServiceProvider: Provider - ) { - gradle.buildOperationListenerManager - .addListener(extractorServiceProvider.get()) - } - - override fun registerExtractorServiceShutdown( - gradle: Gradle, - extractorServiceProvider: Provider - ) { - gradle.buildFinished { - extractorServiceProvider.get().close() - gradle.buildOperationListenerManager - .removeListener(extractorServiceProvider.get()) - } - } - } - - object DefaultPluginApplicatorStrategy : PluginApplicatorStrategy { - private const val SERVICE_NAME = "gitHubDependencyExtractorService" - - override fun createExtractorService( - gradle: Gradle - ): Provider { - return gradle.sharedServices.registerIfAbsent( - SERVICE_NAME, - DependencyExtractorBuildService::class.java - ) {} - } - - override fun registerExtractorListener( - gradle: Gradle, - extractorServiceProvider: Provider - ) { - gradle.service() - .onOperationCompletion(extractorServiceProvider) - } - - override fun registerExtractorServiceShutdown( - gradle: Gradle, - extractorServiceProvider: Provider - ) { - // No-op as DependencyExtractorService is Auto-Closable - } - } +class GitHubDependencyExtractorPlugin : AbstractDependencyExtractorPlugin() { + override fun getRendererClassName(): String { + return GitHubDependencyGraphRenderer::class.java.name } } diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt index 3e55ad5b..a60b9fa2 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt @@ -5,9 +5,8 @@ import org.gradle.api.artifacts.result.ResolvedComponentResult import org.gradle.api.artifacts.result.ResolvedDependencyResult import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier import org.gradle.api.internal.artifacts.configurations.ResolveConfigurationDependenciesBuildOperationType +import org.gradle.api.logging.Logging import org.gradle.github.GitHubDependencyGraphPlugin -import org.gradle.github.dependencygraph.internal.github.GitHubDependencyGraphOutput -import org.gradle.github.dependencygraph.internal.github.GitHubSnapshotParams import org.gradle.github.dependencygraph.internal.model.* import org.gradle.github.dependencygraph.internal.util.* import org.gradle.initialization.EvaluateSettingsBuildOperationType @@ -50,14 +49,7 @@ abstract class DependencyExtractor : pluginParameters.loadOptional(PARAM_REPORT_DIR) } - private val gitHubSnapshotParams by lazy { - GitHubSnapshotParams( - pluginParameters.load(PARAM_JOB_CORRELATOR), - pluginParameters.load(PARAM_JOB_ID), - pluginParameters.load(PARAM_GITHUB_SHA), - pluginParameters.load(PARAM_GITHUB_REF) - ) - } + abstract fun getRendererClassName(): String override fun started(buildOperation: BuildOperationDescriptor, startEvent: OperationStartEvent) { // This method will never be called when registered in a `BuildServiceRegistry` (ie. Gradle 6.1 & higher) @@ -239,8 +231,12 @@ abstract class DependencyExtractor : } private fun writeDependencyGraph() { - val builder = GitHubDependencyGraphOutput(gitHubSnapshotParams, getOutputDir()) - builder.outputDependencyGraph(resolvedConfigurations, buildLayout) + createRenderer().outputDependencyGraph(pluginParameters, buildLayout, resolvedConfigurations, getOutputDir()) + } + + private fun createRenderer(): DependencyGraphRenderer { + LOGGER.lifecycle("Constructing renderer: ${getRendererClassName()}") + return Class.forName(getRendererClassName()).getDeclaredConstructor().newInstance() as DependencyGraphRenderer } private fun getOutputDir(): File { @@ -275,6 +271,10 @@ abstract class DependencyExtractor : ) } } + + companion object { + private val LOGGER = Logging.getLogger(DependencyExtractor::class.java) + } } private inline fun handleBuildOperationTypeRaw( diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractorBuildService.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractorBuildService.kt index 25fae7fe..dd31087b 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractorBuildService.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractorBuildService.kt @@ -1,8 +1,19 @@ package org.gradle.github.dependencygraph.internal +import org.gradle.api.provider.Property import org.gradle.api.services.BuildService import org.gradle.api.services.BuildServiceParameters abstract class DependencyExtractorBuildService : DependencyExtractor(), - BuildService + BuildService +{ + // Some parameters for the web server + internal interface Params : BuildServiceParameters { + val rendererClassName: Property + } + + override fun getRendererClassName(): String { + return parameters.rendererClassName.get() + } +} \ No newline at end of file diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyGraphRenderer.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyGraphRenderer.kt new file mode 100644 index 00000000..9bf409eb --- /dev/null +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyGraphRenderer.kt @@ -0,0 +1,14 @@ +package org.gradle.github.dependencygraph.internal + +import org.gradle.github.dependencygraph.internal.model.BuildLayout +import org.gradle.github.dependencygraph.internal.model.ResolvedConfiguration +import org.gradle.github.dependencygraph.internal.util.PluginParameters +import java.io.File + +interface DependencyGraphRenderer { + fun outputDependencyGraph(pluginParameters: PluginParameters, + buildLayout: BuildLayout, + resolvedConfigurations: MutableList, + outputDirectory: File + ) +} \ No newline at end of file diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/LegacyDependencyExtractor.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/LegacyDependencyExtractor.kt index c73621d5..e71c1aca 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/LegacyDependencyExtractor.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/LegacyDependencyExtractor.kt @@ -2,7 +2,11 @@ package org.gradle.github.dependencygraph.internal import org.gradle.initialization.EvaluateSettingsBuildOperationType -class LegacyDependencyExtractor : DependencyExtractor() { +class LegacyDependencyExtractor(private val rendererClassName: String) : DependencyExtractor() { + override fun getRendererClassName(): String { + return rendererClassName + } + override fun extractSettings(details: EvaluateSettingsBuildOperationType.Details) { // Extraction fails for included builds on Gradle 5.x. // It's OK to ignore these events since we only care about the root build settings file at this stage. diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubDependencyGraphOutput.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubDependencyGraphRenderer.kt similarity index 54% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubDependencyGraphOutput.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubDependencyGraphRenderer.kt index 62101a84..0e5b6cfd 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubDependencyGraphOutput.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubDependencyGraphRenderer.kt @@ -1,21 +1,35 @@ package org.gradle.github.dependencygraph.internal.github import org.gradle.api.logging.Logging +import org.gradle.github.dependencygraph.internal.DependencyGraphRenderer import org.gradle.github.dependencygraph.internal.github.json.GitHubRepositorySnapshot import org.gradle.github.dependencygraph.internal.model.BuildLayout import org.gradle.github.dependencygraph.internal.model.ResolvedConfiguration +import org.gradle.github.dependencygraph.internal.util.* import java.io.File -class GitHubDependencyGraphOutput(private val snapshotParams: GitHubSnapshotParams, private val outputDir: File) { +class GitHubDependencyGraphRenderer() : DependencyGraphRenderer { + + override fun outputDependencyGraph( + pluginParameters: PluginParameters, + buildLayout: BuildLayout, + resolvedConfigurations: MutableList, + outputDirectory: File + ) { + val snapshotParams = GitHubSnapshotParams( + pluginParameters.load(PARAM_JOB_CORRELATOR), + pluginParameters.load(PARAM_JOB_ID), + pluginParameters.load(PARAM_GITHUB_SHA), + pluginParameters.load(PARAM_GITHUB_REF) + ) - fun outputDependencyGraph(resolvedConfigurations: MutableList, buildLayout: BuildLayout) { val gitHubRepositorySnapshotBuilder = GitHubRepositorySnapshotBuilder(snapshotParams) // Use the job correlator as the manifest name val manifestName = snapshotParams.dependencyGraphJobCorrelator val manifest = gitHubRepositorySnapshotBuilder.buildManifest(manifestName, resolvedConfigurations, buildLayout) val snapshot = gitHubRepositorySnapshotBuilder.buildSnapshot(manifest) - val outputFile = File(outputDir, "${snapshotParams.dependencyGraphJobCorrelator}.json") + val outputFile = File(outputDirectory, "${snapshotParams.dependencyGraphJobCorrelator}.json") writeDependencySnapshot(snapshot, outputFile) } @@ -23,10 +37,10 @@ class GitHubDependencyGraphOutput(private val snapshotParams: GitHubSnapshotPara private fun writeDependencySnapshot(graph: GitHubRepositorySnapshot, manifestFile: File) { manifestFile.parentFile.mkdirs() manifestFile.writeText(JacksonJsonSerializer.serializeToJson(graph)) - LOGGER.lifecycle("\nGitHubDependencyGraphPlugin: Wrote dependency snapshot to \n${manifestFile.canonicalPath}") + LOGGER.lifecycle("\nGitHubDependencyGraphRenderer: Wrote dependency snapshot to \n${manifestFile.canonicalPath}") } companion object { - private val LOGGER = Logging.getLogger(GitHubDependencyGraphOutput::class.java) + private val LOGGER = Logging.getLogger(GitHubDependencyGraphRenderer::class.java) } } \ No newline at end of file diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubRepositorySnapshotBuilder.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubRepositorySnapshotBuilder.kt index c41102b0..7bc591c7 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubRepositorySnapshotBuilder.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubRepositorySnapshotBuilder.kt @@ -31,11 +31,11 @@ class GitHubRepositorySnapshotBuilder( } // Use the root build as the Manifest file location - val manifestFile = buildLayout.getManifestFile() + val manifestFile = buildLayout.getRootBuildFileRelativePath() return GitHubManifest( manifestName, dependencyCollector.getDependencies(), - manifestFile + manifestFile?.let { GitHubManifestFile(sourceLocation = it) } ) } diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/BuildLayout.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/BuildLayout.kt index d4e4ae08..34c40879 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/BuildLayout.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/BuildLayout.kt @@ -1,6 +1,5 @@ package org.gradle.github.dependencygraph.internal.model -import org.gradle.github.dependencygraph.internal.github.json.GitHubManifestFile import java.io.File import java.nio.file.Path import java.nio.file.Paths @@ -18,12 +17,13 @@ class BuildLayout(private val gitWorkspaceDirectory: Path) { projectPathToBuildFile[identityPath] = buildFileAbsolutePath } - fun getManifestFile(): GitHubManifestFile? { - return getManifestFileRelativePath(":")?.let { filePath -> - // Clean up path for Windows systems - val sourceLocation = filePath.toString().replace('\\', '/') - GitHubManifestFile(sourceLocation = sourceLocation) - } + /** + * Returns the relative path to the root build settings file if it exists, or the root build file if not. + */ + fun getRootBuildFileRelativePath(): String? { + val filePath = getManifestFileRelativePath(":") + // Clean up path for Windows systems + return filePath?.toString()?.replace('\\', '/') } private fun getManifestFileRelativePath(identityPath: String): Path? { From 314a0f7e11a2b68e76abd111b7b02da5fb43e122 Mon Sep 17 00:00:00 2001 From: daz Date: Wed, 30 Aug 2023 11:38:20 -0600 Subject: [PATCH 2/5] Restructure package layout (Mostly) detangle GitHub-specific code from generic dependency graph implementation. --- .../AbstractDependencyExtractorPlugin.kt | 15 ++- .../DependencyGraphRenderer.kt | 8 +- .../extractor}/DependencyExtractor.kt | 115 +++++++++++------- .../DependencyExtractorBuildService.kt | 2 +- .../extractor}/LegacyDependencyExtractor.kt | 2 +- .../extractor}/ResolvedConfigurationFilter.kt | 2 +- .../model/BuildLayout.kt | 2 +- .../model/DependencyCoordinates.kt | 2 +- .../model/DependencySource.kt | 2 +- .../model/ResolvedConfiguration.kt | 2 +- .../model/ResolvedDependency.kt | 2 +- .../util/GradleExtensions.kt | 2 +- .../dependencygraph/util/PluginParameters.kt | 21 ++++ .../ForceDependencyResolutionPlugin.kt | 3 +- .../LegacyResolveProjectDependenciesTask.kt | 2 +- .../ResolveProjectDependenciesTask.kt | 2 +- .../GitHubDependencyExtractorPlugin.kt | 5 +- .../github/GitHubDependencyGraphPlugin.kt | 9 +- .../GitHubDependencyGraphRenderer.kt | 18 ++- .../GitHubRepositorySnapshotBuilder.kt | 10 +- .../github => }/GitHubSnapshotParams.kt | 2 +- .../github => }/JacksonJsonSerializer.kt | 4 +- .../internal/util/PluginParameters.kt | 37 ------ .../github/json => model}/GitHubDependency.kt | 2 +- .../github/json => model}/GitHubDetector.kt | 2 +- .../github/json => model}/GitHubJob.kt | 2 +- .../github/json => model}/GitHubManifest.kt | 2 +- .../json => model}/GitHubManifestFile.kt | 2 +- .../GitHubRepositorySnapshot.kt | 2 +- .../internal/ResolvedConfigurationTest.groovy | 1 + 30 files changed, 147 insertions(+), 135 deletions(-) rename plugin/src/main/kotlin/org/gradle/{github => }/dependencygraph/AbstractDependencyExtractorPlugin.kt (90%) rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph/internal => dependencygraph}/DependencyGraphRenderer.kt (55%) rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph/internal => dependencygraph/extractor}/DependencyExtractor.kt (75%) rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph/internal => dependencygraph/extractor}/DependencyExtractorBuildService.kt (91%) rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph/internal => dependencygraph/extractor}/LegacyDependencyExtractor.kt (93%) rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph/internal => dependencygraph/extractor}/ResolvedConfigurationFilter.kt (91%) rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph/internal => dependencygraph}/model/BuildLayout.kt (96%) rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph/internal => dependencygraph}/model/DependencyCoordinates.kt (62%) rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph/internal => dependencygraph}/model/DependencySource.kt (89%) rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph/internal => dependencygraph}/model/ResolvedConfiguration.kt (87%) rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph/internal => dependencygraph}/model/ResolvedDependency.kt (94%) rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph/internal => dependencygraph}/util/GradleExtensions.kt (92%) create mode 100644 plugin/src/main/kotlin/org/gradle/dependencygraph/util/PluginParameters.kt rename plugin/src/main/kotlin/org/gradle/{github => }/forceresolve/ForceDependencyResolutionPlugin.kt (97%) rename plugin/src/main/kotlin/org/gradle/{github => }/forceresolve/LegacyResolveProjectDependenciesTask.kt (93%) rename plugin/src/main/kotlin/org/gradle/{github => }/forceresolve/ResolveProjectDependenciesTask.kt (96%) rename plugin/src/main/kotlin/org/gradle/github/{dependencygraph => }/GitHubDependencyExtractorPlugin.kt (66%) rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/{internal/github => }/GitHubDependencyGraphRenderer.kt (74%) rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/{internal/github => }/GitHubRepositorySnapshotBuilder.kt (91%) rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/{internal/github => }/GitHubSnapshotParams.kt (73%) rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/{internal/github => }/JacksonJsonSerializer.kt (77%) delete mode 100644 plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/util/PluginParameters.kt rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/{internal/github/json => model}/GitHubDependency.kt (75%) rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/{internal/github/json => model}/GitHubDetector.kt (81%) rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/{internal/github/json => model}/GitHubJob.kt (53%) rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/{internal/github/json => model}/GitHubManifest.kt (68%) rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/{internal/github/json => model}/GitHubManifestFile.kt (71%) rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/{internal/github/json => model}/GitHubRepositorySnapshot.kt (90%) diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/AbstractDependencyExtractorPlugin.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/AbstractDependencyExtractorPlugin.kt similarity index 90% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/AbstractDependencyExtractorPlugin.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/AbstractDependencyExtractorPlugin.kt index 6ce31807..34895623 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/AbstractDependencyExtractorPlugin.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/AbstractDependencyExtractorPlugin.kt @@ -1,13 +1,13 @@ -package org.gradle.github.dependencygraph +package org.gradle.dependencygraph import org.gradle.api.Plugin import org.gradle.api.invocation.Gradle import org.gradle.api.provider.Provider -import org.gradle.github.dependencygraph.internal.DependencyExtractor -import org.gradle.github.dependencygraph.internal.DependencyExtractorBuildService -import org.gradle.github.dependencygraph.internal.LegacyDependencyExtractor -import org.gradle.github.dependencygraph.internal.util.GradleExtensions -import org.gradle.github.dependencygraph.internal.util.service +import org.gradle.dependencygraph.extractor.DependencyExtractor +import org.gradle.dependencygraph.extractor.DependencyExtractorBuildService +import org.gradle.dependencygraph.extractor.LegacyDependencyExtractor +import org.gradle.dependencygraph.util.GradleExtensions +import org.gradle.dependencygraph.util.service import org.gradle.internal.build.event.BuildEventListenerRegistryInternal import org.gradle.util.GradleVersion @@ -15,6 +15,9 @@ abstract class AbstractDependencyExtractorPlugin : Plugin { // Register extension functions on `Gradle` type private companion object : GradleExtensions() + /** + * The name of an accessible class that implements `org.gradle.dependencygraph.DependencyGraphRenderer`. + */ abstract fun getRendererClassName(): String internal lateinit var dependencyExtractorProvider: Provider diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyGraphRenderer.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/DependencyGraphRenderer.kt similarity index 55% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyGraphRenderer.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/DependencyGraphRenderer.kt index 9bf409eb..d3bde949 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyGraphRenderer.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/DependencyGraphRenderer.kt @@ -1,8 +1,8 @@ -package org.gradle.github.dependencygraph.internal +package org.gradle.dependencygraph -import org.gradle.github.dependencygraph.internal.model.BuildLayout -import org.gradle.github.dependencygraph.internal.model.ResolvedConfiguration -import org.gradle.github.dependencygraph.internal.util.PluginParameters +import org.gradle.dependencygraph.model.BuildLayout +import org.gradle.dependencygraph.model.ResolvedConfiguration +import org.gradle.dependencygraph.util.PluginParameters import java.io.File interface DependencyGraphRenderer { diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt similarity index 75% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt index a60b9fa2..b04270e6 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal +package org.gradle.dependencygraph.extractor import org.gradle.api.GradleException import org.gradle.api.artifacts.result.ResolvedComponentResult @@ -6,18 +6,30 @@ import org.gradle.api.artifacts.result.ResolvedDependencyResult import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier import org.gradle.api.internal.artifacts.configurations.ResolveConfigurationDependenciesBuildOperationType import org.gradle.api.logging.Logging +import org.gradle.dependencygraph.DependencyGraphRenderer +import org.gradle.dependencygraph.model.* +import org.gradle.dependencygraph.util.* import org.gradle.github.GitHubDependencyGraphPlugin -import org.gradle.github.dependencygraph.internal.model.* -import org.gradle.github.dependencygraph.internal.util.* import org.gradle.initialization.EvaluateSettingsBuildOperationType +import org.gradle.initialization.LoadProjectsBuildOperationType import org.gradle.internal.exceptions.DefaultMultiCauseException import org.gradle.internal.operations.* import java.io.File import java.net.URI import java.nio.file.Paths import java.util.* -import org.gradle.api.internal.artifacts.configurations.ResolveConfigurationDependenciesBuildOperationType as ResolveConfigurationDependenciesBOT -import org.gradle.initialization.LoadProjectsBuildOperationType as LoadProjectsBOT + +const val PARAM_INCLUDE_PROJECTS = "DEPENDENCY_GRAPH_INCLUDE_PROJECTS" +const val PARAM_INCLUDE_CONFIGURATIONS = "DEPENDENCY_GRAPH_INCLUDE_CONFIGURATIONS" + +const val PARAM_REPORT_DIR = "DEPENDENCY_GRAPH_REPORT_DIR" + +// TODO: Move this to the GitHub-specific code +/** + * Environment variable should be set to the workspace directory that the Git repository is checked out in. + * This is used to determine relative path to build files referenced in the dependency graph. + */ +const val PARAM_GITHUB_WORKSPACE = "GITHUB_WORKSPACE" abstract class DependencyExtractor : BuildOperationListener, @@ -63,23 +75,23 @@ abstract class DependencyExtractor : override fun finished(buildOperation: BuildOperationDescriptor, finishEvent: OperationFinishEvent) { handleBuildOperationType< - ResolveConfigurationDependenciesBOT.Details, - ResolveConfigurationDependenciesBOT.Result + ResolveConfigurationDependenciesBuildOperationType.Details, + ResolveConfigurationDependenciesBuildOperationType.Result >(buildOperation, finishEvent) { details, result -> extractConfigurationDependencies(details, result) } handleBuildOperationType< - LoadProjectsBOT.Details, - LoadProjectsBOT.Result>(buildOperation, finishEvent) { _, result -> extractProjects(result) } + LoadProjectsBuildOperationType.Details, + LoadProjectsBuildOperationType.Result>(buildOperation, finishEvent) { _, result -> extractProjects(result) } handleBuildOperationType< - EvaluateSettingsBuildOperationType.Details, - EvaluateSettingsBuildOperationType.Result>(buildOperation, finishEvent) { details, _ -> extractSettings(details) } + EvaluateSettingsBuildOperationType.Details, + EvaluateSettingsBuildOperationType.Result>(buildOperation, finishEvent) { details, _ -> extractSettings(details) } } private inline fun handleBuildOperationType( - buildOperation: BuildOperationDescriptor, - finishEvent: OperationFinishEvent, - handler: (details: D, result: R) -> Unit + buildOperation: BuildOperationDescriptor, + finishEvent: OperationFinishEvent, + handler: (details: D, result: R) -> Unit ) { try { handleBuildOperationTypeRaw(buildOperation, finishEvent, handler) @@ -89,6 +101,25 @@ abstract class DependencyExtractor : } } + private inline fun handleBuildOperationTypeRaw( + buildOperation: BuildOperationDescriptor, + finishEvent: OperationFinishEvent, + handler: (details: D, result: R) -> Unit + ) { + val details: D? = buildOperation.details.let { + if (it is D) it else null + } + val result: R? = finishEvent.result.let { + if (it is R) it else null + } + if (details == null && result == null) { + return + } else if (details == null || result == null) { + throw IllegalStateException("buildOperation.details & finishedEvent.result were unexpected types") + } + handler(details, result) + } + open fun extractSettings( details: EvaluateSettingsBuildOperationType.Details ) { @@ -99,9 +130,9 @@ abstract class DependencyExtractor : } private fun extractProjects( - result: LoadProjectsBOT.Result + result: LoadProjectsBuildOperationType.Result ) { - tailrec fun recursivelyExtractProjects(projects: Set) { + tailrec fun recursivelyExtractProjects(projects: Set) { if (projects.isEmpty()) return projects.forEach { project -> buildLayout.addProject(project.identityPath, project.buildFile) @@ -192,7 +223,14 @@ abstract class DependencyExtractor : private fun createComponentNode(componentId: String, source: DependencySource, direct: Boolean, component: ResolvedComponentResult, repositoryLookup: RepositoryUrlLookup): ResolvedDependency { val componentDependencies = component.dependencies.filterIsInstance().map { componentId(it.selected) } val repositoryUrl = repositoryLookup.doLookup(component) - return ResolvedDependency(componentId, source, direct, coordinates(component), repositoryUrl, componentDependencies) + return ResolvedDependency( + componentId, + source, + direct, + coordinates(component), + repositoryUrl, + componentDependencies + ) } private fun componentId(component: ResolvedComponentResult): String { @@ -202,12 +240,16 @@ abstract class DependencyExtractor : private fun coordinates(component: ResolvedComponentResult): DependencyCoordinates { // TODO: Consider and handle null moduleVersion val moduleVersionIdentifier = component.moduleVersion!! - return DependencyCoordinates(moduleVersionIdentifier.group, moduleVersionIdentifier.name, moduleVersionIdentifier.version) + return DependencyCoordinates( + moduleVersionIdentifier.group, + moduleVersionIdentifier.name, + moduleVersionIdentifier.version + ) } private class RepositoryUrlLookup( - private val details: ResolveConfigurationDependenciesBOT.Details, - private val result: ResolveConfigurationDependenciesBOT.Result + private val details: ResolveConfigurationDependenciesBuildOperationType.Details, + private val result: ResolveConfigurationDependenciesBuildOperationType.Result ) { private fun getRepositoryUrlForId(id: String): String? { @@ -256,18 +298,18 @@ abstract class DependencyExtractor : override fun close() { if (thrownExceptions.isNotEmpty()) { throw DefaultMultiCauseException( - "The ${GitHubDependencyGraphPlugin::class.simpleName} plugin encountered errors while extracting dependencies. " + - "Please report this issue at: https://github.com/gradle/github-dependency-graph-gradle-plugin/issues", - thrownExceptions + "The ${GitHubDependencyGraphPlugin::class.simpleName} plugin encountered errors while extracting dependencies. " + + "Please report this issue at: https://github.com/gradle/github-dependency-graph-gradle-plugin/issues", + thrownExceptions ) } try { writeDependencyGraph() } catch (e: RuntimeException) { throw GradleException( - "The ${GitHubDependencyGraphPlugin::class.simpleName} plugin encountered errors while writing the dependency snapshot json file. " + - "Please report this issue at: https://github.com/gradle/github-dependency-graph-gradle-plugin/issues", - e + "The ${GitHubDependencyGraphPlugin::class.simpleName} plugin encountered errors while writing the dependency snapshot json file. " + + "Please report this issue at: https://github.com/gradle/github-dependency-graph-gradle-plugin/issues", + e ) } } @@ -275,23 +317,4 @@ abstract class DependencyExtractor : companion object { private val LOGGER = Logging.getLogger(DependencyExtractor::class.java) } -} - -private inline fun handleBuildOperationTypeRaw( - buildOperation: BuildOperationDescriptor, - finishEvent: OperationFinishEvent, - handler: (details: D, result: R) -> Unit -) { - val details: D? = buildOperation.details.let { - if (it is D) it else null - } - val result: R? = finishEvent.result.let { - if (it is R) it else null - } - if (details == null && result == null) { - return - } else if (details == null || result == null) { - throw IllegalStateException("buildOperation.details & finishedEvent.result were unexpected types") - } - handler(details, result) -} +} \ No newline at end of file diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractorBuildService.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractorBuildService.kt similarity index 91% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractorBuildService.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractorBuildService.kt index dd31087b..d0448c17 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractorBuildService.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractorBuildService.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal +package org.gradle.dependencygraph.extractor import org.gradle.api.provider.Property import org.gradle.api.services.BuildService diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/LegacyDependencyExtractor.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/LegacyDependencyExtractor.kt similarity index 93% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/LegacyDependencyExtractor.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/LegacyDependencyExtractor.kt index e71c1aca..ab7ffd0a 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/LegacyDependencyExtractor.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/LegacyDependencyExtractor.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal +package org.gradle.dependencygraph.extractor import org.gradle.initialization.EvaluateSettingsBuildOperationType diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/ResolvedConfigurationFilter.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/ResolvedConfigurationFilter.kt similarity index 91% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/ResolvedConfigurationFilter.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/ResolvedConfigurationFilter.kt index 7b325e41..4c9d7af2 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/ResolvedConfigurationFilter.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/ResolvedConfigurationFilter.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal +package org.gradle.dependencygraph.extractor class ResolvedConfigurationFilter(projectFilter: String?, configurationFilter: String?) { val projectRegex = projectFilter?.toRegex() diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/BuildLayout.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/BuildLayout.kt similarity index 96% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/BuildLayout.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/model/BuildLayout.kt index 34c40879..7abc432f 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/BuildLayout.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/BuildLayout.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.model +package org.gradle.dependencygraph.model import java.io.File import java.nio.file.Path diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencyCoordinates.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/DependencyCoordinates.kt similarity index 62% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencyCoordinates.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/model/DependencyCoordinates.kt index 75744cad..f0e3dace 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencyCoordinates.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/DependencyCoordinates.kt @@ -1,3 +1,3 @@ -package org.gradle.github.dependencygraph.internal.model +package org.gradle.dependencygraph.model data class DependencyCoordinates(val group: String, val module: String, val version: String) diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencySource.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/DependencySource.kt similarity index 89% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencySource.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/model/DependencySource.kt index 2355c1c4..feda3100 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencySource.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/DependencySource.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.model +package org.gradle.dependencygraph.model /** * The source of a dependency declaration, representing where the direct dependency is declared, diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedConfiguration.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/ResolvedConfiguration.kt similarity index 87% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedConfiguration.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/model/ResolvedConfiguration.kt index 4075fafa..d0e00548 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedConfiguration.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/ResolvedConfiguration.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.model +package org.gradle.dependencygraph.model data class ResolvedConfiguration( val rootSource: DependencySource, diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedDependency.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/ResolvedDependency.kt similarity index 94% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedDependency.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/model/ResolvedDependency.kt index 699cc473..12d55ce7 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedDependency.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/ResolvedDependency.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.model +package org.gradle.dependencygraph.model import com.github.packageurl.PackageURLBuilder diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/util/GradleExtensions.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/util/GradleExtensions.kt similarity index 92% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/util/GradleExtensions.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/util/GradleExtensions.kt index a9821745..450bd2c8 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/util/GradleExtensions.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/util/GradleExtensions.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.util +package org.gradle.dependencygraph.util import org.gradle.api.internal.GradleInternal import org.gradle.api.invocation.Gradle diff --git a/plugin/src/main/kotlin/org/gradle/dependencygraph/util/PluginParameters.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/util/PluginParameters.kt new file mode 100644 index 00000000..e4f9b1c1 --- /dev/null +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/util/PluginParameters.kt @@ -0,0 +1,21 @@ +package org.gradle.dependencygraph.util + + +class PluginParameters { + fun load(envName: String, default: String? = null): String { + return System.getProperty(envName) + ?: System.getenv()[envName] + ?: default + ?: throwEnvironmentVariableMissingException(envName) + } + + fun loadOptional(envName: String): String? { + return System.getProperty(envName) + ?: System.getenv()[envName] + } + + private fun throwEnvironmentVariableMissingException(variable: String): Nothing { + throw IllegalStateException("The configuration parameter '$variable' must be set: " + + "set an environment variable, or use '-D${variable}=value' on the command-line.") + } +} \ No newline at end of file diff --git a/plugin/src/main/kotlin/org/gradle/github/forceresolve/ForceDependencyResolutionPlugin.kt b/plugin/src/main/kotlin/org/gradle/forceresolve/ForceDependencyResolutionPlugin.kt similarity index 97% rename from plugin/src/main/kotlin/org/gradle/github/forceresolve/ForceDependencyResolutionPlugin.kt rename to plugin/src/main/kotlin/org/gradle/forceresolve/ForceDependencyResolutionPlugin.kt index 6510bdcf..82ade01e 100644 --- a/plugin/src/main/kotlin/org/gradle/github/forceresolve/ForceDependencyResolutionPlugin.kt +++ b/plugin/src/main/kotlin/org/gradle/forceresolve/ForceDependencyResolutionPlugin.kt @@ -1,4 +1,4 @@ -package org.gradle.github.forceresolve +package org.gradle.forceresolve import org.gradle.api.Plugin import org.gradle.api.Project @@ -7,6 +7,7 @@ import org.gradle.api.invocation.Gradle import org.gradle.api.tasks.TaskProvider import org.gradle.util.GradleVersion +// TODO: Rename these private const val RESOLVE_TASK = "GitHubDependencyGraphPlugin_resolveProjectDependencies" private const val GENERATE_TASK = "GitHubDependencyGraphPlugin_generateDependencyGraph" diff --git a/plugin/src/main/kotlin/org/gradle/github/forceresolve/LegacyResolveProjectDependenciesTask.kt b/plugin/src/main/kotlin/org/gradle/forceresolve/LegacyResolveProjectDependenciesTask.kt similarity index 93% rename from plugin/src/main/kotlin/org/gradle/github/forceresolve/LegacyResolveProjectDependenciesTask.kt rename to plugin/src/main/kotlin/org/gradle/forceresolve/LegacyResolveProjectDependenciesTask.kt index 35e36f43..af6c45a8 100644 --- a/plugin/src/main/kotlin/org/gradle/github/forceresolve/LegacyResolveProjectDependenciesTask.kt +++ b/plugin/src/main/kotlin/org/gradle/forceresolve/LegacyResolveProjectDependenciesTask.kt @@ -1,4 +1,4 @@ -package org.gradle.github.forceresolve +package org.gradle.forceresolve import org.gradle.api.DefaultTask import org.gradle.api.artifacts.Configuration diff --git a/plugin/src/main/kotlin/org/gradle/github/forceresolve/ResolveProjectDependenciesTask.kt b/plugin/src/main/kotlin/org/gradle/forceresolve/ResolveProjectDependenciesTask.kt similarity index 96% rename from plugin/src/main/kotlin/org/gradle/github/forceresolve/ResolveProjectDependenciesTask.kt rename to plugin/src/main/kotlin/org/gradle/forceresolve/ResolveProjectDependenciesTask.kt index 9a204c43..4fc06619 100644 --- a/plugin/src/main/kotlin/org/gradle/github/forceresolve/ResolveProjectDependenciesTask.kt +++ b/plugin/src/main/kotlin/org/gradle/forceresolve/ResolveProjectDependenciesTask.kt @@ -1,4 +1,4 @@ -package org.gradle.github.forceresolve +package org.gradle.forceresolve import org.gradle.api.DefaultTask import org.gradle.api.artifacts.Configuration diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyExtractorPlugin.kt b/plugin/src/main/kotlin/org/gradle/github/GitHubDependencyExtractorPlugin.kt similarity index 66% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyExtractorPlugin.kt rename to plugin/src/main/kotlin/org/gradle/github/GitHubDependencyExtractorPlugin.kt index e6532da9..1a9b3b38 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyExtractorPlugin.kt +++ b/plugin/src/main/kotlin/org/gradle/github/GitHubDependencyExtractorPlugin.kt @@ -1,6 +1,7 @@ -package org.gradle.github.dependencygraph +package org.gradle.github -import org.gradle.github.dependencygraph.internal.github.GitHubDependencyGraphRenderer +import org.gradle.dependencygraph.AbstractDependencyExtractorPlugin +import org.gradle.github.dependencygraph.GitHubDependencyGraphRenderer /** * A plugin that collects all resolved dependencies in a Gradle build and exports it using the GitHub API format. diff --git a/plugin/src/main/kotlin/org/gradle/github/GitHubDependencyGraphPlugin.kt b/plugin/src/main/kotlin/org/gradle/github/GitHubDependencyGraphPlugin.kt index 7a5f1ac0..ff1962d1 100644 --- a/plugin/src/main/kotlin/org/gradle/github/GitHubDependencyGraphPlugin.kt +++ b/plugin/src/main/kotlin/org/gradle/github/GitHubDependencyGraphPlugin.kt @@ -2,10 +2,7 @@ package org.gradle.github import org.gradle.api.Plugin import org.gradle.api.invocation.Gradle -import org.gradle.api.logging.Logging -import org.gradle.github.forceresolve.ForceDependencyResolutionPlugin -import org.gradle.github.dependencygraph.GitHubDependencyExtractorPlugin -import org.gradle.github.dependencygraph.internal.util.GradleExtensions +import org.gradle.forceresolve.ForceDependencyResolutionPlugin /** * A plugin that collects all resolved dependencies in a Gradle build for submission to the @@ -13,10 +10,6 @@ import org.gradle.github.dependencygraph.internal.util.GradleExtensions */ @Suppress("unused") class GitHubDependencyGraphPlugin : Plugin { - private companion object : GradleExtensions() { - private val LOGGER = Logging.getLogger(GitHubDependencyGraphPlugin::class.java) - } - override fun apply(gradle: Gradle) { // Only apply the dependency extractor to the root build if (gradle.parent == null) { diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubDependencyGraphRenderer.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyGraphRenderer.kt similarity index 74% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubDependencyGraphRenderer.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyGraphRenderer.kt index 0e5b6cfd..2b73542f 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubDependencyGraphRenderer.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyGraphRenderer.kt @@ -1,13 +1,19 @@ -package org.gradle.github.dependencygraph.internal.github +package org.gradle.github.dependencygraph import org.gradle.api.logging.Logging -import org.gradle.github.dependencygraph.internal.DependencyGraphRenderer -import org.gradle.github.dependencygraph.internal.github.json.GitHubRepositorySnapshot -import org.gradle.github.dependencygraph.internal.model.BuildLayout -import org.gradle.github.dependencygraph.internal.model.ResolvedConfiguration -import org.gradle.github.dependencygraph.internal.util.* +import org.gradle.dependencygraph.DependencyGraphRenderer +import org.gradle.github.dependencygraph.model.GitHubRepositorySnapshot +import org.gradle.dependencygraph.model.BuildLayout +import org.gradle.dependencygraph.model.ResolvedConfiguration +import org.gradle.dependencygraph.util.* import java.io.File +// TODO work out the best place for different constants +const val PARAM_JOB_ID = "GITHUB_JOB_ID" +const val PARAM_JOB_CORRELATOR = "GITHUB_JOB_CORRELATOR" +const val PARAM_GITHUB_REF = "GITHUB_REF" +const val PARAM_GITHUB_SHA = "GITHUB_SHA" + class GitHubDependencyGraphRenderer() : DependencyGraphRenderer { override fun outputDependencyGraph( diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubRepositorySnapshotBuilder.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubRepositorySnapshotBuilder.kt similarity index 91% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubRepositorySnapshotBuilder.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubRepositorySnapshotBuilder.kt index 7bc591c7..ea63321c 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubRepositorySnapshotBuilder.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubRepositorySnapshotBuilder.kt @@ -1,9 +1,9 @@ -package org.gradle.github.dependencygraph.internal.github +package org.gradle.github.dependencygraph -import org.gradle.github.dependencygraph.internal.github.json.* -import org.gradle.github.dependencygraph.internal.model.ResolvedDependency -import org.gradle.github.dependencygraph.internal.model.ResolvedConfiguration -import org.gradle.github.dependencygraph.internal.model.BuildLayout +import org.gradle.dependencygraph.model.ResolvedDependency +import org.gradle.dependencygraph.model.ResolvedConfiguration +import org.gradle.dependencygraph.model.BuildLayout +import org.gradle.github.dependencygraph.model.* class GitHubRepositorySnapshotBuilder( private val snapshotParams: GitHubSnapshotParams diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubSnapshotParams.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubSnapshotParams.kt similarity index 73% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubSnapshotParams.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubSnapshotParams.kt index a85142dc..9f5b442e 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/GitHubSnapshotParams.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubSnapshotParams.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.github +package org.gradle.github.dependencygraph class GitHubSnapshotParams( val dependencyGraphJobCorrelator: String, diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/JacksonJsonSerializer.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/JacksonJsonSerializer.kt similarity index 77% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/JacksonJsonSerializer.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/JacksonJsonSerializer.kt index ea24f614..44dcc679 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/JacksonJsonSerializer.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/JacksonJsonSerializer.kt @@ -1,8 +1,8 @@ -package org.gradle.github.dependencygraph.internal.github +package org.gradle.github.dependencygraph import com.fasterxml.jackson.module.kotlin.jsonMapper import com.fasterxml.jackson.module.kotlin.kotlinModule -import org.gradle.github.dependencygraph.internal.github.json.GitHubRepositorySnapshot +import org.gradle.github.dependencygraph.model.GitHubRepositorySnapshot object JacksonJsonSerializer { diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/util/PluginParameters.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/util/PluginParameters.kt deleted file mode 100644 index 033dd863..00000000 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/util/PluginParameters.kt +++ /dev/null @@ -1,37 +0,0 @@ -package org.gradle.github.dependencygraph.internal.util - -// TODO work out the best place for different constants -const val PARAM_JOB_ID = "GITHUB_JOB_ID" -const val PARAM_JOB_CORRELATOR = "GITHUB_JOB_CORRELATOR" -const val PARAM_GITHUB_REF = "GITHUB_REF" -const val PARAM_GITHUB_SHA = "GITHUB_SHA" - -const val PARAM_INCLUDE_PROJECTS = "DEPENDENCY_GRAPH_INCLUDE_PROJECTS" -const val PARAM_INCLUDE_CONFIGURATIONS = "DEPENDENCY_GRAPH_INCLUDE_CONFIGURATIONS" - -const val PARAM_REPORT_DIR = "DEPENDENCY_GRAPH_REPORT_DIR" - -/** - * Environment variable should be set to the workspace directory that the Git repository is checked out in. - * This is used to determine relative path to build files referenced in the dependency graph. - */ -const val PARAM_GITHUB_WORKSPACE = "GITHUB_WORKSPACE" - -class PluginParameters { - fun load(envName: String, default: String? = null): String { - return System.getProperty(envName) - ?: System.getenv()[envName] - ?: default - ?: throwEnvironmentVariableMissingException(envName) - } - - fun loadOptional(envName: String): String? { - return System.getProperty(envName) - ?: System.getenv()[envName] - } - - private fun throwEnvironmentVariableMissingException(variable: String): Nothing { - throw IllegalStateException("The configuration parameter '$variable' must be set: " + - "set an environment variable, or use '-D${variable}=value' on the command-line.") - } -} \ No newline at end of file diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubDependency.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubDependency.kt similarity index 75% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubDependency.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubDependency.kt index 214f4bb8..419de316 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubDependency.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubDependency.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.github.json +package org.gradle.github.dependencygraph.model data class GitHubDependency( val package_url: String, diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubDetector.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubDetector.kt similarity index 81% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubDetector.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubDetector.kt index b92fd49e..f5e256cf 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubDetector.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubDetector.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.github.json +package org.gradle.github.dependencygraph.model data class GitHubDetector( val name: String = GitHubDetector::class.java.`package`.implementationTitle, diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubJob.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubJob.kt similarity index 53% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubJob.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubJob.kt index 5ba4cc62..40bc6345 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubJob.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubJob.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.github.json +package org.gradle.github.dependencygraph.model data class GitHubJob( val id: String, diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubManifest.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubManifest.kt similarity index 68% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubManifest.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubManifest.kt index 803e833d..50da17f5 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubManifest.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubManifest.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.github.json +package org.gradle.github.dependencygraph.model data class GitHubManifest( val name: String, diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubManifestFile.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubManifestFile.kt similarity index 71% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubManifestFile.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubManifestFile.kt index 17ac3e3a..93ce20ff 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubManifestFile.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubManifestFile.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.github.json +package org.gradle.github.dependencygraph.model import com.fasterxml.jackson.annotation.JsonProperty diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubRepositorySnapshot.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubRepositorySnapshot.kt similarity index 90% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubRepositorySnapshot.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubRepositorySnapshot.kt index 1e8ba1fb..1b025e97 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/github/json/GitHubRepositorySnapshot.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/model/GitHubRepositorySnapshot.kt @@ -1,4 +1,4 @@ -package org.gradle.github.dependencygraph.internal.github.json +package org.gradle.github.dependencygraph.model import java.text.DateFormat import java.text.SimpleDateFormat diff --git a/plugin/src/test/groovy/org/gradle/github/dependencygraph/internal/ResolvedConfigurationTest.groovy b/plugin/src/test/groovy/org/gradle/github/dependencygraph/internal/ResolvedConfigurationTest.groovy index a6ecba60..a2db614e 100644 --- a/plugin/src/test/groovy/org/gradle/github/dependencygraph/internal/ResolvedConfigurationTest.groovy +++ b/plugin/src/test/groovy/org/gradle/github/dependencygraph/internal/ResolvedConfigurationTest.groovy @@ -1,5 +1,6 @@ package org.gradle.github.dependencygraph.internal +import org.gradle.dependencygraph.extractor.ResolvedConfigurationFilter import spock.lang.Specification class ResolvedConfigurationTest extends Specification { From d2a89d1540a19492d56f2bc6ec948492f6b81734 Mon Sep 17 00:00:00 2001 From: daz Date: Wed, 30 Aug 2023 11:48:24 -0600 Subject: [PATCH 3/5] Update docs and names to avoid GitHub references --- .github/workflows/gradle.yml | 4 ++-- README.md | 2 +- plugin-self-test | 4 ++-- .../github/dependencygraph/BaseExtractorTest.groovy | 2 +- .../MultiProjectDependencyExtractorTest.groovy | 6 +++--- .../AbstractDependencyExtractorPlugin.kt | 2 +- .../dependencygraph/extractor/DependencyExtractor.kt | 7 +++---- .../forceresolve/ForceDependencyResolutionPlugin.kt | 12 ++++++------ 8 files changed, 19 insertions(+), 20 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 000d754f..17165ba2 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -69,7 +69,7 @@ jobs: uses: gradle/gradle-build-action@v2 - name: Self Test :plugin - run: ./plugin-self-test GitHubDependencyGraphPlugin_generateDependencyGraph + run: ./plugin-self-test ForceDependencyResolutionPlugin_resolveAllDependencies env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_JOB_ID: ${{ github.run_id }} @@ -79,6 +79,6 @@ jobs: uses: actions/upload-artifact@v3 with: name: plugin-json - path: build/reports/github-dependency-graph-snapshots/plugin-self-test.json + path: build/reports/dependency-graph-snapshots/plugin-self-test.json if-no-files-found: error diff --git a/README.md b/README.md index 10babfbf..27a3fc95 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ apply plugin: GitHubDependencyGraphPlugin This causes 2 separate plugins to be applied, that can be used independently: - `GitHubDependencyExtractorPlugin` collects all dependencies that are resolved during a build execution and writes these to a file. The output file can be found at `/build/reports/github-depenency-graph-snapshots/.json`. -- `ForceDependencyResolutionPlugin` creates a `GitHubDependencyGraphPlugin_generateDependencyGraph` task that will attempt to resolve all dependencies for a Gradle build, by simply invoking `dependencies` on all projects. +- `ForceDependencyResolutionPlugin` creates a `ForceDependencyResolutionPlugin_resolveAllDependencies` task that will attempt to resolve all dependencies for a Gradle build, by simply invoking `dependencies` on all projects. ### Required environment variables diff --git a/plugin-self-test b/plugin-self-test index 98d6dcac..8ccf15ec 100755 --- a/plugin-self-test +++ b/plugin-self-test @@ -15,6 +15,6 @@ else -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer $GITHUB_TOKEN"\ -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/gradle/github-dependency-graph-gradle-plugin/dependency-graph/snapshots \ - -d @build/reports/github-dependency-graph-snapshots/plugin-self-test.json + https://api.github.com/repos/gradle/dependency-graph-gradle-plugin/dependency-graph/snapshots \ + -d @build/reports/dependency-graph-snapshots/plugin-self-test.json fi diff --git a/plugin-test/src/test/groovy/org/gradle/github/dependencygraph/BaseExtractorTest.groovy b/plugin-test/src/test/groovy/org/gradle/github/dependencygraph/BaseExtractorTest.groovy index 55cc679c..a6b69037 100644 --- a/plugin-test/src/test/groovy/org/gradle/github/dependencygraph/BaseExtractorTest.groovy +++ b/plugin-test/src/test/groovy/org/gradle/github/dependencygraph/BaseExtractorTest.groovy @@ -88,7 +88,7 @@ abstract class BaseExtractorTest extends Specification { } protected BuildResult run() { - return run("GitHubDependencyGraphPlugin_generateDependencyGraph") + return run("ForceDependencyResolutionPlugin_resolveAllDependencies") } protected BuildResult run(String... names) { diff --git a/plugin-test/src/test/groovy/org/gradle/github/dependencygraph/MultiProjectDependencyExtractorTest.groovy b/plugin-test/src/test/groovy/org/gradle/github/dependencygraph/MultiProjectDependencyExtractorTest.groovy index f32acd8f..2f6f3b2d 100644 --- a/plugin-test/src/test/groovy/org/gradle/github/dependencygraph/MultiProjectDependencyExtractorTest.groovy +++ b/plugin-test/src/test/groovy/org/gradle/github/dependencygraph/MultiProjectDependencyExtractorTest.groovy @@ -103,9 +103,9 @@ class MultiProjectDependencyExtractorTest extends BaseExtractorTest { ]) where: - task | description - "GitHubDependencyGraphPlugin_generateDependencyGraph" | "All dependencies resolved" - ":c:dependencies" | "One project resolved" + task | description + "ForceDependencyResolutionPlugin_resolveAllDependencies" | "All dependencies resolved" + ":c:dependencies" | "One project resolved" } def "extracts direct dependency for transitive dependency updated by constraint"() { diff --git a/plugin/src/main/kotlin/org/gradle/dependencygraph/AbstractDependencyExtractorPlugin.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/AbstractDependencyExtractorPlugin.kt index 34895623..616b9746 100644 --- a/plugin/src/main/kotlin/org/gradle/dependencygraph/AbstractDependencyExtractorPlugin.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/AbstractDependencyExtractorPlugin.kt @@ -97,7 +97,7 @@ abstract class AbstractDependencyExtractorPlugin : Plugin { } object DefaultPluginApplicatorStrategy : PluginApplicatorStrategy { - private const val SERVICE_NAME = "gitHubDependencyExtractorService" + private const val SERVICE_NAME = "dependencyExtractorService" override fun createExtractorService( gradle: Gradle, diff --git a/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt index b04270e6..7a35bf03 100644 --- a/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt @@ -9,7 +9,6 @@ import org.gradle.api.logging.Logging import org.gradle.dependencygraph.DependencyGraphRenderer import org.gradle.dependencygraph.model.* import org.gradle.dependencygraph.util.* -import org.gradle.github.GitHubDependencyGraphPlugin import org.gradle.initialization.EvaluateSettingsBuildOperationType import org.gradle.initialization.LoadProjectsBuildOperationType import org.gradle.internal.exceptions.DefaultMultiCauseException @@ -291,14 +290,14 @@ abstract class DependencyExtractor : } return File( rootProjectBuildDirectory, - "reports/github-dependency-graph-snapshots" + "reports/dependency-graph-snapshots" ) } override fun close() { if (thrownExceptions.isNotEmpty()) { throw DefaultMultiCauseException( - "The ${GitHubDependencyGraphPlugin::class.simpleName} plugin encountered errors while extracting dependencies. " + + "The dependency-graph extractor plugin encountered errors while extracting dependencies. " + "Please report this issue at: https://github.com/gradle/github-dependency-graph-gradle-plugin/issues", thrownExceptions ) @@ -307,7 +306,7 @@ abstract class DependencyExtractor : writeDependencyGraph() } catch (e: RuntimeException) { throw GradleException( - "The ${GitHubDependencyGraphPlugin::class.simpleName} plugin encountered errors while writing the dependency snapshot json file. " + + "The dependency-graph extractor plugin encountered errors while writing the dependency snapshot json file. " + "Please report this issue at: https://github.com/gradle/github-dependency-graph-gradle-plugin/issues", e ) diff --git a/plugin/src/main/kotlin/org/gradle/forceresolve/ForceDependencyResolutionPlugin.kt b/plugin/src/main/kotlin/org/gradle/forceresolve/ForceDependencyResolutionPlugin.kt index 82ade01e..f78a337a 100644 --- a/plugin/src/main/kotlin/org/gradle/forceresolve/ForceDependencyResolutionPlugin.kt +++ b/plugin/src/main/kotlin/org/gradle/forceresolve/ForceDependencyResolutionPlugin.kt @@ -8,8 +8,8 @@ import org.gradle.api.tasks.TaskProvider import org.gradle.util.GradleVersion // TODO: Rename these -private const val RESOLVE_TASK = "GitHubDependencyGraphPlugin_resolveProjectDependencies" -private const val GENERATE_TASK = "GitHubDependencyGraphPlugin_generateDependencyGraph" +private const val RESOLVE_PROJECT_TASK = "ForceDependencyResolutionPlugin_resolveProjectDependencies" +private const val RESOLVE_ALL_TASK = "ForceDependencyResolutionPlugin_resolveAllDependencies" /** * Adds a task to resolve all dependencies in a Gradle build tree. @@ -17,7 +17,7 @@ private const val GENERATE_TASK = "GitHubDependencyGraphPlugin_generateDependenc class ForceDependencyResolutionPlugin : Plugin { override fun apply(gradle: Gradle) { gradle.projectsEvaluated { - val resolveAllDeps = gradle.rootProject.tasks.register(GENERATE_TASK) + val resolveAllDeps = gradle.rootProject.tasks.register(RESOLVE_ALL_TASK) // Depend on "dependencies" task in all projects gradle.allprojects { project -> @@ -31,7 +31,7 @@ class ForceDependencyResolutionPlugin : Plugin { // Depend on all 'resolveBuildDependencies' task in each included build gradle.includedBuilds.forEach { includedBuild -> resolveAllDeps.configure { - it.dependsOn(includedBuild.task(":$GENERATE_TASK")) + it.dependsOn(includedBuild.task(":$RESOLVE_ALL_TASK")) } } } @@ -52,13 +52,13 @@ class ForceDependencyResolutionPlugin : Plugin { object Current : ResolveProjectDependenciesTaskFactory { override fun create(project: Project): TaskProvider { - return project.tasks.register(RESOLVE_TASK, ResolveProjectDependenciesTask::class.java) + return project.tasks.register(RESOLVE_PROJECT_TASK, ResolveProjectDependenciesTask::class.java) } } object Legacy : ResolveProjectDependenciesTaskFactory { override fun create(project: Project): TaskProvider { - return project.tasks.register(RESOLVE_TASK, LegacyResolveProjectDependenciesTask::class.java) + return project.tasks.register(RESOLVE_PROJECT_TASK, LegacyResolveProjectDependenciesTask::class.java) } } } From 97160dbcad048bbc3b596a8eaaf0623cad96efca Mon Sep 17 00:00:00 2001 From: daz Date: Wed, 30 Aug 2023 12:31:43 -0600 Subject: [PATCH 4/5] Move the `GITHUB_WORKSPACE` param requirement to GitHub renderer --- .../extractor/DependencyExtractor.kt | 15 ++--------- .../dependencygraph/model/BuildLayout.kt | 26 +++++++----------- .../GitHubDependencyGraphRenderer.kt | 14 +--------- .../GitHubRepositorySnapshotBuilder.kt | 18 ++++++++++--- .../dependencygraph/GitHubSnapshotParams.kt | 27 +++++++++++++++---- 5 files changed, 49 insertions(+), 51 deletions(-) diff --git a/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt index 7a35bf03..99183d74 100644 --- a/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt @@ -15,7 +15,6 @@ import org.gradle.internal.exceptions.DefaultMultiCauseException import org.gradle.internal.operations.* import java.io.File import java.net.URI -import java.nio.file.Paths import java.util.* const val PARAM_INCLUDE_PROJECTS = "DEPENDENCY_GRAPH_INCLUDE_PROJECTS" @@ -23,13 +22,6 @@ const val PARAM_INCLUDE_CONFIGURATIONS = "DEPENDENCY_GRAPH_INCLUDE_CONFIGURATION const val PARAM_REPORT_DIR = "DEPENDENCY_GRAPH_REPORT_DIR" -// TODO: Move this to the GitHub-specific code -/** - * Environment variable should be set to the workspace directory that the Git repository is checked out in. - * This is used to determine relative path to build files referenced in the dependency graph. - */ -const val PARAM_GITHUB_WORKSPACE = "GITHUB_WORKSPACE" - abstract class DependencyExtractor : BuildOperationListener, AutoCloseable { @@ -42,13 +34,10 @@ abstract class DependencyExtractor : var rootProjectBuildDirectory: File? = null + private val buildLayout = BuildLayout() + // Properties are lazily initialized so that System Properties are initialized by the time // the values are used. This is required due to a bug in older Gradle versions. (https://github.com/gradle/gradle/issues/6825) - private val buildLayout by lazy { - val gitWorkspaceDirectory = Paths.get(pluginParameters.load(PARAM_GITHUB_WORKSPACE)) - BuildLayout(gitWorkspaceDirectory) - } - private val configurationFilter by lazy { ResolvedConfigurationFilter( pluginParameters.loadOptional(PARAM_INCLUDE_PROJECTS), diff --git a/plugin/src/main/kotlin/org/gradle/dependencygraph/model/BuildLayout.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/BuildLayout.kt index 7abc432f..0f526f37 100644 --- a/plugin/src/main/kotlin/org/gradle/dependencygraph/model/BuildLayout.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/BuildLayout.kt @@ -5,7 +5,7 @@ import java.nio.file.Path import java.nio.file.Paths import java.util.concurrent.ConcurrentHashMap -class BuildLayout(private val gitWorkspaceDirectory: Path) { +class BuildLayout { private val buildPathToSettingsFile = ConcurrentHashMap() private val projectPathToBuildFile = ConcurrentHashMap() @@ -18,26 +18,18 @@ class BuildLayout(private val gitWorkspaceDirectory: Path) { } /** - * Returns the relative path to the root build settings file if it exists, or the root build file if not. + * Returns the absolute path to the root build settings file if it exists, or the root build file if not. */ - fun getRootBuildFileRelativePath(): String? { - val filePath = getManifestFileRelativePath(":") - // Clean up path for Windows systems - return filePath?.toString()?.replace('\\', '/') + fun getRootBuildPath(): Path? { + return getRootBuildAbsoluteFile()?.let { Paths.get(it) } } - private fun getManifestFileRelativePath(identityPath: String): Path? { - val settingsFile = buildPathToSettingsFile[identityPath] + private fun getRootBuildAbsoluteFile(): String? { + val rootPath = ":" + val settingsFile = buildPathToSettingsFile[rootPath] if (settingsFile != null && File(settingsFile).exists()) { - return toRelativePath(settingsFile) - } - val buildFile = projectPathToBuildFile[identityPath] - return toRelativePath(buildFile) - } - - private fun toRelativePath(fileAbsolutePath: String?): Path? { - return fileAbsolutePath?.let { - gitWorkspaceDirectory.relativize(Paths.get(fileAbsolutePath)) + return settingsFile } + return projectPathToBuildFile[rootPath] } } \ No newline at end of file diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyGraphRenderer.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyGraphRenderer.kt index 2b73542f..71497173 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyGraphRenderer.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyGraphRenderer.kt @@ -8,12 +8,6 @@ import org.gradle.dependencygraph.model.ResolvedConfiguration import org.gradle.dependencygraph.util.* import java.io.File -// TODO work out the best place for different constants -const val PARAM_JOB_ID = "GITHUB_JOB_ID" -const val PARAM_JOB_CORRELATOR = "GITHUB_JOB_CORRELATOR" -const val PARAM_GITHUB_REF = "GITHUB_REF" -const val PARAM_GITHUB_SHA = "GITHUB_SHA" - class GitHubDependencyGraphRenderer() : DependencyGraphRenderer { override fun outputDependencyGraph( @@ -22,13 +16,7 @@ class GitHubDependencyGraphRenderer() : DependencyGraphRenderer { resolvedConfigurations: MutableList, outputDirectory: File ) { - val snapshotParams = GitHubSnapshotParams( - pluginParameters.load(PARAM_JOB_CORRELATOR), - pluginParameters.load(PARAM_JOB_ID), - pluginParameters.load(PARAM_GITHUB_SHA), - pluginParameters.load(PARAM_GITHUB_REF) - ) - + val snapshotParams = GitHubSnapshotParams(pluginParameters) val gitHubRepositorySnapshotBuilder = GitHubRepositorySnapshotBuilder(snapshotParams) // Use the job correlator as the manifest name val manifestName = snapshotParams.dependencyGraphJobCorrelator diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubRepositorySnapshotBuilder.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubRepositorySnapshotBuilder.kt index ea63321c..5181db60 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubRepositorySnapshotBuilder.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubRepositorySnapshotBuilder.kt @@ -30,15 +30,27 @@ class GitHubRepositorySnapshotBuilder( } } - // Use the root build as the Manifest file location - val manifestFile = buildLayout.getRootBuildFileRelativePath() return GitHubManifest( manifestName, dependencyCollector.getDependencies(), - manifestFile?.let { GitHubManifestFile(sourceLocation = it) } + getManifestFile(buildLayout) ) } + /** + * Manifest file is the root build settings file if it exists, or the root build file if not. + */ + private fun getManifestFile(buildLayout: BuildLayout): GitHubManifestFile? { + val path = buildLayout.getRootBuildPath() + return path?.let { + val filePath = snapshotParams.gitHubWorkspace + .relativize(path) + .toString() + .replace('\\', '/') // Clean up path for Windows systems + GitHubManifestFile(sourceLocation = filePath) + } + } + // TODO:DAZ Model this better private fun isProject(dependency: ResolvedDependency): Boolean { return dependency.id.startsWith("project ") diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubSnapshotParams.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubSnapshotParams.kt index 9f5b442e..ff09a3bb 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubSnapshotParams.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubSnapshotParams.kt @@ -1,7 +1,24 @@ package org.gradle.github.dependencygraph -class GitHubSnapshotParams( - val dependencyGraphJobCorrelator: String, - val dependencyGraphJobId: String, - val gitSha: String, - val gitRef: String) \ No newline at end of file +import org.gradle.dependencygraph.util.PluginParameters +import java.nio.file.Path +import java.nio.file.Paths + +const val PARAM_JOB_ID = "GITHUB_JOB_ID" +const val PARAM_JOB_CORRELATOR = "GITHUB_JOB_CORRELATOR" +const val PARAM_GITHUB_REF = "GITHUB_REF" +const val PARAM_GITHUB_SHA = "GITHUB_SHA" +/** + * Environment variable should be set to the workspace directory that the Git repository is checked out in. + * This is used to determine relative path to build files referenced in the dependency graph. + */ +const val PARAM_GITHUB_WORKSPACE = "GITHUB_WORKSPACE" + +class GitHubSnapshotParams(private val pluginParameters: PluginParameters) { + val dependencyGraphJobCorrelator: String = pluginParameters.load(PARAM_JOB_CORRELATOR) + val dependencyGraphJobId: String =pluginParameters.load(PARAM_JOB_ID) + val gitSha: String = pluginParameters.load(PARAM_GITHUB_SHA) + val gitRef: String = pluginParameters.load(PARAM_GITHUB_REF) + val gitHubWorkspace: Path = Paths.get(pluginParameters.load(PARAM_GITHUB_WORKSPACE)) +} + From 2e262364c0f4d4353d8d3959dd81e702ec88bd79 Mon Sep 17 00:00:00 2001 From: daz Date: Wed, 30 Aug 2023 13:12:03 -0600 Subject: [PATCH 5/5] Add example plugin with simple renderer --- .../DependencyGraphRenderer.kt | 9 +++-- .../extractor/DependencyExtractor.kt | 6 ++- .../model/ResolvedConfiguration.kt | 1 + .../simple/SimpleDependencyGraphPlugin.kt | 26 +++++++++++++ .../simple/SimpleDependencyGraphRenderer.kt | 38 +++++++++++++++++++ .../util}/JacksonJsonSerializer.kt | 8 ++-- .../GitHubDependencyGraphRenderer.kt | 3 +- .../GitHubRepositorySnapshotBuilder.kt | 2 +- 8 files changed, 79 insertions(+), 14 deletions(-) create mode 100644 plugin/src/main/kotlin/org/gradle/dependencygraph/simple/SimpleDependencyGraphPlugin.kt create mode 100644 plugin/src/main/kotlin/org/gradle/dependencygraph/simple/SimpleDependencyGraphRenderer.kt rename plugin/src/main/kotlin/org/gradle/{github/dependencygraph => dependencygraph/util}/JacksonJsonSerializer.kt (63%) diff --git a/plugin/src/main/kotlin/org/gradle/dependencygraph/DependencyGraphRenderer.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/DependencyGraphRenderer.kt index d3bde949..0abe1a05 100644 --- a/plugin/src/main/kotlin/org/gradle/dependencygraph/DependencyGraphRenderer.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/DependencyGraphRenderer.kt @@ -6,9 +6,10 @@ import org.gradle.dependencygraph.util.PluginParameters import java.io.File interface DependencyGraphRenderer { - fun outputDependencyGraph(pluginParameters: PluginParameters, - buildLayout: BuildLayout, - resolvedConfigurations: MutableList, - outputDirectory: File + fun outputDependencyGraph( + pluginParameters: PluginParameters, + buildLayout: BuildLayout, + resolvedConfigurations: List, + outputDirectory: File ) } \ No newline at end of file diff --git a/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt index 99183d74..be284800 100644 --- a/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/extractor/DependencyExtractor.kt @@ -157,7 +157,7 @@ abstract class DependencyExtractor : val rootId = if (projectIdentityPath == null) "build $rootPath" else componentId(rootComponent) val rootSource = DependencySource(rootId, rootPath) - val resolvedConfiguration = ResolvedConfiguration(rootSource) + val resolvedConfiguration = ResolvedConfiguration(rootSource, details.configurationName) for (directDependency in getResolvedDependencies(rootComponent)) { val directDep = createComponentNode( @@ -261,7 +261,9 @@ abstract class DependencyExtractor : } private fun writeDependencyGraph() { - createRenderer().outputDependencyGraph(pluginParameters, buildLayout, resolvedConfigurations, getOutputDir()) + val outputDirectory = getOutputDir() + outputDirectory.mkdirs() + createRenderer().outputDependencyGraph(pluginParameters, buildLayout, resolvedConfigurations, outputDirectory) } private fun createRenderer(): DependencyGraphRenderer { diff --git a/plugin/src/main/kotlin/org/gradle/dependencygraph/model/ResolvedConfiguration.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/ResolvedConfiguration.kt index d0e00548..c0206d7b 100644 --- a/plugin/src/main/kotlin/org/gradle/dependencygraph/model/ResolvedConfiguration.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/model/ResolvedConfiguration.kt @@ -2,6 +2,7 @@ package org.gradle.dependencygraph.model data class ResolvedConfiguration( val rootSource: DependencySource, + val configurationName: String, val allDependencies: MutableList = mutableListOf() ) { fun addDependency(component: ResolvedDependency) { diff --git a/plugin/src/main/kotlin/org/gradle/dependencygraph/simple/SimpleDependencyGraphPlugin.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/simple/SimpleDependencyGraphPlugin.kt new file mode 100644 index 00000000..940d6c00 --- /dev/null +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/simple/SimpleDependencyGraphPlugin.kt @@ -0,0 +1,26 @@ +package org.gradle.dependencygraph.simple + +import org.gradle.api.Plugin +import org.gradle.api.invocation.Gradle +import org.gradle.dependencygraph.AbstractDependencyExtractorPlugin +import org.gradle.forceresolve.ForceDependencyResolutionPlugin +import org.gradle.github.GitHubDependencyExtractorPlugin + +@Suppress("unused") +class SimpleDependencyGraphPlugin : Plugin { + override fun apply(gradle: Gradle) { + // Only apply the dependency extractor to the root build + if (gradle.parent == null) { + gradle.pluginManager.apply(SimpleDependencyExtractorPlugin::class.java) + } + + // Apply the dependency resolver to each build + gradle.pluginManager.apply(ForceDependencyResolutionPlugin::class.java) + } + + class SimpleDependencyExtractorPlugin : AbstractDependencyExtractorPlugin() { + override fun getRendererClassName(): String { + return SimpleDependencyGraphRenderer::class.java.name + } + } +} \ No newline at end of file diff --git a/plugin/src/main/kotlin/org/gradle/dependencygraph/simple/SimpleDependencyGraphRenderer.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/simple/SimpleDependencyGraphRenderer.kt new file mode 100644 index 00000000..858de70d --- /dev/null +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/simple/SimpleDependencyGraphRenderer.kt @@ -0,0 +1,38 @@ +package org.gradle.dependencygraph.simple + +import org.gradle.dependencygraph.DependencyGraphRenderer +import org.gradle.dependencygraph.model.BuildLayout +import org.gradle.dependencygraph.model.ResolvedConfiguration +import org.gradle.dependencygraph.util.JacksonJsonSerializer +import org.gradle.dependencygraph.util.PluginParameters +import java.io.File + +/** + * An example `DependencyGraphRenderer` that outputs the dependency graph in 2 files: + * - `dependency-graph.json` contains the raw structure of the extracted `ResolvedConfiguration` instances. + * - `dependency-list.txt` contains a list of coordinates of all resolved dependencies. + * + * Note that the structure of `ResolvedConfiguration` is not stable and is subject to change. + */ +class SimpleDependencyGraphRenderer : DependencyGraphRenderer { + override fun outputDependencyGraph( + pluginParameters: PluginParameters, + buildLayout: BuildLayout, + resolvedConfigurations: List, + outputDirectory: File + ) { + val graphOutputFile = File(outputDirectory, "dependency-graph.json") + val graphJson = JacksonJsonSerializer.serializeToJson(resolvedConfigurations) + graphOutputFile.writeText(graphJson) + + val listOutputFile = File(outputDirectory, "dependency-list.txt") + val dependencyList = resolvedConfigurations.flatMap { it -> + it.allDependencies.map { + "${it.coordinates.group}:${it.coordinates.module}:${it.coordinates.version}" + } + }.distinct().sorted() + + val listTxt = dependencyList.joinToString(separator = "\n") + listOutputFile.writeText(listTxt) + } +} \ No newline at end of file diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/JacksonJsonSerializer.kt b/plugin/src/main/kotlin/org/gradle/dependencygraph/util/JacksonJsonSerializer.kt similarity index 63% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/JacksonJsonSerializer.kt rename to plugin/src/main/kotlin/org/gradle/dependencygraph/util/JacksonJsonSerializer.kt index 44dcc679..d9e6be3b 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/JacksonJsonSerializer.kt +++ b/plugin/src/main/kotlin/org/gradle/dependencygraph/util/JacksonJsonSerializer.kt @@ -1,17 +1,15 @@ -package org.gradle.github.dependencygraph +package org.gradle.dependencygraph.util import com.fasterxml.jackson.module.kotlin.jsonMapper import com.fasterxml.jackson.module.kotlin.kotlinModule -import org.gradle.github.dependencygraph.model.GitHubRepositorySnapshot object JacksonJsonSerializer { - private val mapper = jsonMapper { serializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) addModule(kotlinModule()) } - fun serializeToJson(ghDependencyGraph: GitHubRepositorySnapshot): String { - return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(ghDependencyGraph) + fun serializeToJson(dependencyGraph: Any): String { + return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(dependencyGraph) } } diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyGraphRenderer.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyGraphRenderer.kt index 71497173..966642c7 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyGraphRenderer.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyGraphRenderer.kt @@ -13,7 +13,7 @@ class GitHubDependencyGraphRenderer() : DependencyGraphRenderer { override fun outputDependencyGraph( pluginParameters: PluginParameters, buildLayout: BuildLayout, - resolvedConfigurations: MutableList, + resolvedConfigurations: List, outputDirectory: File ) { val snapshotParams = GitHubSnapshotParams(pluginParameters) @@ -29,7 +29,6 @@ class GitHubDependencyGraphRenderer() : DependencyGraphRenderer { } private fun writeDependencySnapshot(graph: GitHubRepositorySnapshot, manifestFile: File) { - manifestFile.parentFile.mkdirs() manifestFile.writeText(JacksonJsonSerializer.serializeToJson(graph)) LOGGER.lifecycle("\nGitHubDependencyGraphRenderer: Wrote dependency snapshot to \n${manifestFile.canonicalPath}") } diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubRepositorySnapshotBuilder.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubRepositorySnapshotBuilder.kt index 5181db60..756cf606 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubRepositorySnapshotBuilder.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubRepositorySnapshotBuilder.kt @@ -18,7 +18,7 @@ class GitHubRepositorySnapshotBuilder( ) } - fun buildManifest(manifestName: String, resolvedConfigurations: MutableList, buildLayout: BuildLayout): GitHubManifest { + fun buildManifest(manifestName: String, resolvedConfigurations: List, buildLayout: BuildLayout): GitHubManifest { val dependencyCollector = DependencyCollector() for (resolutionRoot in resolvedConfigurations) {