Skip to content

Commit 61b94dd

Browse files
committed
Allow job.correlator to be explicitly specified
Previously the plugin was inferring the values of job.id and job.correlator from core GITHUB environment variables. While this may be useful in some cases, there are many cases where it is insufficient. With this change, the user of this plugin will directly provide these values via custom environment variables. The job.correlator value provided is now included in the generated file name.
1 parent cccf5a0 commit 61b94dd

File tree

10 files changed

+49
-68
lines changed

10 files changed

+49
-68
lines changed

.github/workflows/gradle.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,16 @@ jobs:
6969
uses: gradle/gradle-build-action@v2
7070

7171
- name: Self Test :plugin
72-
run: ./plugin-self-test
72+
run: ./plugin-self-test GitHubDependencyGraphPlugin_generateDependencyGraph
7373
env:
7474
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
75+
GITHUB_DEPENDENCY_GRAPH_JOB_ID: ${{ github.run_id }}
76+
GITHUB_DEPENDENCY_GRAPH_JOB_CORRELATOR: "plugin-self-test"
7577

7678
- name: Save plugin JSON report
7779
uses: actions/upload-artifact@v3
7880
with:
7981
name: plugin-json
80-
path: build/reports/github-dependency-graph-plugin/github-dependency-snapshot.json
82+
path: build/reports/github-dependency-graph-snapshots/plugin-self-test.json
8183
if-no-files-found: error
8284

plugin-self-test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ else
1616
-H "Authorization: Bearer $GITHUB_TOKEN"\
1717
-H "X-GitHub-Api-Version: 2022-11-28" \
1818
https://api.github.com/repos/gradle/github-dependency-graph-gradle-plugin/dependency-graph/snapshots \
19-
-d @build/reports/github-dependency-graph-plugin/github-dependency-snapshot.json
19+
-d @build/reports/github-dependency-graph-snapshots/plugin-self-test.json
2020
fi

plugin-self-test-local

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/sh
22

3-
export GITHUB_JOB="Build"
4-
export GITHUB_RUN_NUMBER="42"
3+
export GITHUB_DEPENDENCY_GRAPH_JOB_ID="42"
4+
export GITHUB_DEPENDENCY_GRAPH_JOB_CORRELATOR="plugin-self-test"
55
export GITHUB_REF="refs/heads/main"
66
export GITHUB_SHA=$( git rev-parse HEAD )
77
export GITHUB_WORKSPACE=$( pwd )

plugin-test/src/test/groovy/org/gradle/github/dependencygraph/BaseExtractorTest.groovy

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ abstract class BaseExtractorTest extends Specification {
5050
SimpleGradleExecuter createExecuter() {
5151
// Create a new JsonManifestLoader for each invocation of the executer
5252
File manifestFile =
53-
testDirectory.file("build/reports/github-dependency-graph-plugin/github-dependency-snapshot.json")
53+
testDirectory.file("build/reports/github-dependency-graph-plugin/github-dependency-snapshot-Build.json")
5454
loader = new JsonRepositorySnapshotLoader(manifestFile)
5555
return createExecuter(testGradleVersion)
5656
}
@@ -134,8 +134,8 @@ abstract class BaseExtractorTest extends Specification {
134134
assert json.sha == environmentVars.sha
135135
assert json.ref == environmentVars.ref
136136
def job = json.job as Map
137-
assert job.correlator == environmentVars.job
138-
assert job.id == environmentVars.runNumber
137+
assert job.correlator == environmentVars.jobCorrelator
138+
assert job.id == environmentVars.jobId
139139
def detector = json.detector as Map
140140
assert detector.name.contains("Gradle")
141141
assert detector.version != null
@@ -255,8 +255,8 @@ abstract class BaseExtractorTest extends Specification {
255255
}
256256

257257
static class TestEnvironmentVars {
258-
final String job = "Build_" + System.currentTimeMillis()
259-
final String runNumber = UUID.randomUUID().toString()
258+
final String jobId = UUID.randomUUID().toString()
259+
final String jobCorrelator = "Build"
260260
final String ref = "refs/head/feature/test" + UUID.randomUUID().toString()
261261
final String sha = fakeSha()
262262
final String workspace
@@ -268,12 +268,12 @@ abstract class BaseExtractorTest extends Specification {
268268

269269
Map<String, String> asEnvironmentMap() {
270270
return [
271-
"GITHUB_JOB" : job,
272-
"GITHUB_RUN_NUMBER": runNumber,
273-
"GITHUB_REF" : ref,
274-
"GITHUB_SHA" : sha,
275-
"GITHUB_WORKSPACE" : workspace,
276-
"GITHUB_TOKEN" : gitHubToken
271+
"GITHUB_DEPENDENCY_GRAPH_JOB_ID" : jobId,
272+
"GITHUB_DEPENDENCY_GRAPH_JOB_CORRELATOR": jobCorrelator,
273+
"GITHUB_REF" : ref,
274+
"GITHUB_SHA" : sha,
275+
"GITHUB_WORKSPACE" : workspace,
276+
"GITHUB_TOKEN" : gitHubToken
277277
]
278278
}
279279

plugin-test/src/test/groovy/org/gradle/github/dependencygraph/SingleProjectDependencyExtractorTest.groovy

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,6 @@ class SingleProjectDependencyExtractorTest extends BaseExtractorTest {
3232
"""
3333
}
3434

35-
def "includes build path in job correlator"() {
36-
when:
37-
executer.withArgument("-Dorg.gradle.github.env.GRADLE_BUILD_PATH=foo/bar")
38-
run()
39-
40-
then:
41-
def json = jsonRepositorySnapshot()
42-
def job = json.job as Map
43-
job.correlator == environmentVars.job + ":foo/bar"
44-
}
45-
4635
def "extracts implementation and test dependencies for a java project"() {
4736
given:
4837
buildFile << """

plugin/src/main/kotlin/org/gradle/github/dependencygraph/GitHubDependencyExtractorPlugin.kt

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ import java.nio.file.Paths
2222
*/
2323
class GitHubDependencyExtractorPlugin : Plugin<Gradle> {
2424
private companion object : PluginCompanionUtils() {
25-
const val ENV_GITHUB_JOB = "GITHUB_JOB"
26-
const val ENV_GITHUB_RUN_NUMBER = "GITHUB_RUN_NUMBER"
25+
const val ENV_DEPENDENCY_GRAPH_JOB_ID = "GITHUB_DEPENDENCY_GRAPH_JOB_ID"
26+
const val ENV_DEPENDENCY_GRAPH_JOB_CORRELATOR = "GITHUB_DEPENDENCY_GRAPH_JOB_CORRELATOR"
2727
const val ENV_GITHUB_REF = "GITHUB_REF"
2828
const val ENV_GITHUB_SHA = "GITHUB_SHA"
29-
const val ENV_GRADLE_BUILD_PATH = "GRADLE_BUILD_PATH"
3029

3130
/**
3231
* Environment variable should be set to the workspace directory that the Git repository is checked out in.
32+
* This is used to determine relative path to build files referenced in the dependency graph.
3333
*/
3434
const val ENV_GITHUB_WORKSPACE = "GITHUB_WORKSPACE"
3535
}
@@ -92,18 +92,16 @@ class GitHubDependencyExtractorPlugin : Plugin<Gradle> {
9292
// Create a constant value that the provider will always return.
9393
// IE. Memoize the value
9494
val constantDependencyExtractor = object : DependencyExtractor() {
95-
override val gitHubJobName: String
96-
get() = gradle.loadEnvironmentVariable(ENV_GITHUB_JOB)
97-
override val gitHubRunNumber: String
98-
get() = gradle.loadEnvironmentVariable(ENV_GITHUB_RUN_NUMBER)
95+
override val dependencyGraphJobCorrelator: String
96+
get() = gradle.loadEnvironmentVariable(ENV_DEPENDENCY_GRAPH_JOB_CORRELATOR)
97+
override val dependencyGraphJobId: String
98+
get() = gradle.loadEnvironmentVariable(ENV_DEPENDENCY_GRAPH_JOB_ID)
9999
override val gitSha: String
100100
get() = gradle.loadEnvironmentVariable(ENV_GITHUB_SHA)
101101
override val gitRef: String
102102
get() = gradle.loadEnvironmentVariable(ENV_GITHUB_REF)
103103
override val gitWorkspaceDirectory: Path
104104
get() = gitWorkspaceDirectory
105-
override val gradleBuildPath: String
106-
get() = gradle.loadEnvironmentVariable(ENV_GRADLE_BUILD_PATH, "")
107105
}
108106
return providerFactory.provider { constantDependencyExtractor }
109107
}
@@ -154,12 +152,11 @@ class GitHubDependencyExtractorPlugin : Plugin<Gradle> {
154152
DependencyExtractorBuildService::class.java
155153
) { spec ->
156154
spec.parameters {
157-
it.gitHubJobName.convention(gradle.loadEnvironmentVariable(ENV_GITHUB_JOB))
158-
it.gitHubRunNumber.convention(gradle.loadEnvironmentVariable(ENV_GITHUB_RUN_NUMBER))
155+
it.dependencyGraphJobCorrelator.convention(gradle.loadEnvironmentVariable(ENV_DEPENDENCY_GRAPH_JOB_CORRELATOR))
156+
it.dependencyGraphJobId.convention(gradle.loadEnvironmentVariable(ENV_DEPENDENCY_GRAPH_JOB_ID))
159157
it.gitSha.convention(gradle.loadEnvironmentVariable(ENV_GITHUB_SHA))
160158
it.gitRef.convention(gradle.loadEnvironmentVariable(ENV_GITHUB_REF))
161159
it.gitWorkspaceDirectory.convention(gitWorkspaceDirectory)
162-
it.gradleBuildPath.convention(gradle.loadEnvironmentVariable(ENV_GRADLE_BUILD_PATH, ""))
163160
}
164161
}
165162
}

plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import org.gradle.api.artifacts.result.ResolvedDependencyResult
66
import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier
77
import org.gradle.api.internal.artifacts.configurations.ResolveConfigurationDependenciesBuildOperationType
88
import org.gradle.github.GitHubDependencyGraphPlugin
9-
import org.gradle.github.dependencygraph.GitHubDependencyExtractorPlugin
109
import org.gradle.github.dependencygraph.internal.model.ComponentCoordinates
1110
import org.gradle.github.dependencygraph.internal.model.ResolvedComponent
1211
import org.gradle.github.dependencygraph.internal.model.ResolvedConfiguration
@@ -23,12 +22,11 @@ abstract class DependencyExtractor :
2322
BuildOperationListener,
2423
AutoCloseable {
2524

26-
protected abstract val gitHubJobName: String
27-
protected abstract val gitHubRunNumber: String
25+
protected abstract val dependencyGraphJobCorrelator: String
26+
protected abstract val dependencyGraphJobId: String
2827
protected abstract val gitSha: String
2928
protected abstract val gitRef: String
3029
protected abstract val gitWorkspaceDirectory: Path
31-
protected abstract val gradleBuildPath: String
3230

3331
/**
3432
* Can't use this as a proper input:
@@ -38,12 +36,11 @@ abstract class DependencyExtractor :
3836

3937
private val gitHubRepositorySnapshotBuilder by lazy {
4038
GitHubRepositorySnapshotBuilder(
41-
gitHubJobName = gitHubJobName,
42-
gitHubRunNumber = gitHubRunNumber,
39+
dependencyGraphJobCorrelator = dependencyGraphJobCorrelator,
40+
dependencyGraphJobId = dependencyGraphJobId,
4341
gitSha = gitSha,
4442
gitRef = gitRef,
45-
gitWorkspaceDirectory = gitWorkspaceDirectory,
46-
gradleBuildPath = gradleBuildPath
43+
gitWorkspaceDirectory = gitWorkspaceDirectory
4744
)
4845
}
4946

@@ -54,7 +51,7 @@ abstract class DependencyExtractor :
5451
}
5552

5653
internal fun setRootProjectBuildDirectory(rootProjectBuildDirectory: File) {
57-
fileWriter = DependencyFileWriter.create(rootProjectBuildDirectory)
54+
fileWriter = DependencyFileWriter.create(rootProjectBuildDirectory, dependencyGraphJobCorrelator)
5855
}
5956

6057
override fun started(buildOperation: BuildOperationDescriptor, startEvent: OperationStartEvent) {

plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractorBuildService.kt

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,21 @@ abstract class DependencyExtractorBuildService :
1111
BuildService<DependencyExtractorBuildService.Parameters> {
1212

1313
interface Parameters : BuildServiceParameters {
14-
val gitHubJobName: Property<String>
15-
val gitHubRunNumber: Property<String>
14+
val dependencyGraphJobId: Property<String>
15+
val dependencyGraphJobCorrelator: Property<String>
1616
val gitSha: Property<String>
1717
val gitRef: Property<String>
1818
val gitWorkspaceDirectory: DirectoryProperty
19-
val gradleBuildPath: Property<String>
2019
}
2120

22-
override val gitHubJobName: String
23-
get() = parameters.gitHubJobName.get()
24-
override val gitHubRunNumber: String
25-
get() = parameters.gitHubRunNumber.get()
21+
override val dependencyGraphJobId: String
22+
get() = parameters.dependencyGraphJobId.get()
23+
override val dependencyGraphJobCorrelator: String
24+
get() = parameters.dependencyGraphJobCorrelator.get()
2625
override val gitSha: String
2726
get() = parameters.gitSha.get()
2827
override val gitRef: String
2928
get() = parameters.gitRef.get()
3029
override val gitWorkspaceDirectory: Path
3130
get() = parameters.gitWorkspaceDirectory.get().asFile.toPath()
32-
override val gradleBuildPath: String
33-
get() = parameters.gradleBuildPath.get()
3431
}

plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyFileWriter.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,24 @@ private constructor(
2727
companion object {
2828
private val LOGGER = Logging.getLogger(DependencyFileWriter::class.java)
2929

30-
fun create(buildDirectory: File): DependencyFileWriter =
31-
create(buildDirectory) {
30+
fun create(buildDirectory: File, jobCorrelator:String): DependencyFileWriter =
31+
create(buildDirectory, jobCorrelator) {
3232
// No-op
3333
}
3434

3535
fun create(): DependencyFileWriter =
36-
create(File(".")) {
36+
create(File("."), "UNKNOWN") {
3737
LOGGER.warn(
3838
"[WARNING] Something went wrong configuring the GithubDependencyExtractorPlugin. " +
3939
"Using JVM working directory as root of build"
4040
)
4141
}
4242

43-
private fun create(buildDirectory: File, loggerWarning: () -> Unit): DependencyFileWriter {
43+
private fun create(buildDirectory: File, jobCorrelator: String, loggerWarning: () -> Unit): DependencyFileWriter {
4444
return DependencyFileWriter(
4545
File(
4646
buildDirectory,
47-
"reports/github-dependency-graph-plugin/github-dependency-snapshot.json"
47+
"reports/github-dependency-graph-plugin/github-dependency-snapshot-${jobCorrelator}.json"
4848
),
4949
loggerWarning
5050
)

plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/GitHubRepositorySnapshotBuilder.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,19 @@ import java.nio.file.Paths
99
import java.util.concurrent.ConcurrentHashMap
1010

1111
class GitHubRepositorySnapshotBuilder(
12-
private val gitHubJobName: String,
13-
private val gitHubRunNumber: String,
12+
private val dependencyGraphJobCorrelator: String,
13+
private val dependencyGraphJobId: String,
1414
private val gitSha: String,
1515
private val gitRef: String,
16-
private val gitWorkspaceDirectory: Path,
17-
private val gradleBuildPath: String
16+
private val gitWorkspaceDirectory: Path
1817
) {
1918

2019
private val detector by lazy { GitHubDetector() }
2120

2221
private val job by lazy {
2322
GitHubJob(
24-
id = gitHubRunNumber,
25-
correlator = if (gradleBuildPath.isEmpty()) gitHubJobName else "$gitHubJobName:$gradleBuildPath"
23+
id = dependencyGraphJobId,
24+
correlator = dependencyGraphJobCorrelator
2625
)
2726
}
2827

0 commit comments

Comments
 (0)