From 9e58f8b1dea90e41eb8549225a965bcc191a48ef Mon Sep 17 00:00:00 2001 From: daz Date: Mon, 24 Jul 2023 08:34:10 -0600 Subject: [PATCH] Add dependency-graph-file as step output Fixes #804 --- .../workflows/integ-test-dependency-graph.yml | 16 +++++++-------- .../github-dependency-graph.init.gradle | 20 ++++++++++++------- .../TestDependencyGraph.groovy | 10 ++++++++-- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/.github/workflows/integ-test-dependency-graph.yml b/.github/workflows/integ-test-dependency-graph.yml index ace9ba61..cc42912b 100644 --- a/.github/workflows/integ-test-dependency-graph.yml +++ b/.github/workflows/integ-test-dependency-graph.yml @@ -78,21 +78,19 @@ jobs: uses: ./ with: dependency-graph: generate - - name: Run assemble + - id: gradle-assemble run: ./gradlew assemble working-directory: .github/workflow-samples/groovy-dsl - env: - GITHUB_JOB_CORRELATOR: job-correlator - - name: Run build + - id: gradle-build run: ./gradlew build - working-directory: .github/workflow-samples/groovy-dsl - env: - GITHUB_JOB_CORRELATOR: job-correlator + working-directory: .github/workflow-samples/groovy-dsl - name: Check generated dependency graphs run: | + echo "gradle-assemble report file: ${{ steps.gradle-assemble.outputs.dependency-graph-file }}" + echo "gradle-build report file: ${{ steps.gradle-build.outputs.dependency-graph-file }}" ls -l dependency-graph-reports - if ([ ! -e dependency-graph-reports/job-correlator.json ] || [ ! -e dependency-graph-reports/job-correlator-1.json ]) + if ([ ! -e ${{ steps.gradle-assemble.outputs.dependency-graph-file }} ] || [ ! -e ${{ steps.gradle-build.outputs.dependency-graph-file }} ]) then echo "Did not find expected dependency graph files" exit 1 - fi + fi diff --git a/src/resources/init-scripts/github-dependency-graph.init.gradle b/src/resources/init-scripts/github-dependency-graph.init.gradle index 9e6bb0e0..fdc67f90 100644 --- a/src/resources/init-scripts/github-dependency-graph.init.gradle +++ b/src/resources/init-scripts/github-dependency-graph.init.gradle @@ -15,14 +15,20 @@ if (GradleVersion.current().baseVersion < GradleVersion.version("5.0")) { // This is only required for top-level builds def isTopLevelBuild = gradle.getParent() == null if (isTopLevelBuild) { - def jobCorrelator = ensureUniqueJobCorrelator(System.env.GITHUB_JOB_CORRELATOR) + def reportFile = getUniqueReportFile(System.env.GITHUB_JOB_CORRELATOR) - if (jobCorrelator == null) { - println "::warning::No dependency snapshot generated for step: report file for '${jobCorrelator}' created in earlier step. Each build invocation requires a unique job correlator: specify GITHUB_JOB_CORRELATOR var for this step." + if (reportFile == null) { + println "::warning::No dependency snapshot generated for step. Could not determine unique job correlator - specify GITHUB_JOB_CORRELATOR var for this step." return } - println "Generating dependency graph for '${jobCorrelator}'" + def githubOutput = System.getenv("GITHUB_OUTPUT") + if (githubOutput) { + new File(githubOutput) << "dependency-graph-file=${reportFile.absolutePath}\n" + } + + + println "Generating dependency graph into '${reportFile}'" } apply from: 'github-dependency-graph-gradle-plugin-apply.groovy' @@ -33,10 +39,10 @@ apply from: 'github-dependency-graph-gradle-plugin-apply.groovy' * - If so, tries to find a unique value that does not yet have a corresponding report file. * - When found, this value is set as a System property override. */ -String ensureUniqueJobCorrelator(String jobCorrelator) { +File getUniqueReportFile(String jobCorrelator) { def reportDir = System.env.DEPENDENCY_GRAPH_REPORT_DIR def reportFile = new File(reportDir, jobCorrelator + ".json") - if (!reportFile.exists()) return jobCorrelator + if (!reportFile.exists()) return reportFile // Try at most 100 suffixes for (int i = 1; i < 100; i++) { @@ -44,7 +50,7 @@ String ensureUniqueJobCorrelator(String jobCorrelator) { def candidateFile = new File(reportDir, candidateCorrelator + ".json") if (!candidateFile.exists()) { System.properties['GITHUB_JOB_CORRELATOR'] = candidateCorrelator - return candidateCorrelator + return candidateFile } } diff --git a/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDependencyGraph.groovy b/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDependencyGraph.groovy index 96b61700..b19db357 100644 --- a/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDependencyGraph.groovy +++ b/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDependencyGraph.groovy @@ -29,9 +29,10 @@ class TestDependencyGraph extends BaseInitScriptTest { then: assert reportFile.exists() + assert gitHubOutputFile.text == "dependency-graph-file=${reportFile.absolutePath}\n" where: - testGradleVersion << DEPENDENCY_GRAPH_VERSIONS + testGradleVersion << GRADLE_8_X } // Dependency-graph plugin doesn't support config-cache for 8.0 of Gradle @@ -114,7 +115,8 @@ class TestDependencyGraph extends BaseInitScriptTest { GITHUB_REF: "main", GITHUB_SHA: "123456", GITHUB_WORKSPACE: testProjectDir.absolutePath, - DEPENDENCY_GRAPH_REPORT_DIR: reportsDir.absolutePath + DEPENDENCY_GRAPH_REPORT_DIR: reportsDir.absolutePath, + GITHUB_OUTPUT: gitHubOutputFile.absolutePath ] } @@ -125,4 +127,8 @@ class TestDependencyGraph extends BaseInitScriptTest { def getReportFile() { return new File(reportsDir, "CORRELATOR.json") } + + def getGitHubOutputFile() { + return new File(testProjectDir, "GITHUB_OUTPUT") + } }