Skip to content

Commit 1643afa

Browse files
authored
complete configuration cache work fixes #109 (#120)
1 parent 8cf3874 commit 1643afa

18 files changed

+328
-204
lines changed

build.gradle.kts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ plugins {
1919
`kotlin-dsl`
2020
}
2121

22-
tasks.named<GroovyCompile>("compileGroovy", GroovyCompile::class.java) {
23-
groovyOptions.configurationScript = file("src/groovyCompile/groovycConfig.groovy")
24-
}
25-
2622
description = "Gradle plugin collect and provide information about the environment"
2723

2824
contacts {

src/groovyCompile/groovycConfig.groovy

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/main/groovy/nebula/plugin/info/ci/AbstractContinuousIntegrationProvider.groovy

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,44 +16,26 @@
1616

1717
package nebula.plugin.info.ci
1818

19-
import com.sun.jna.platform.win32.Kernel32Util
20-
import groovy.util.logging.Log
19+
import groovy.transform.CompileStatic
20+
import org.gradle.api.provider.Provider
2121
import org.gradle.api.provider.ProviderFactory
22-
import org.gradle.internal.os.OperatingSystem
22+
import org.jspecify.annotations.NullMarked
2323

24-
import java.util.logging.Level
25-
26-
@Log
24+
@NullMarked
25+
@CompileStatic
2726
abstract class AbstractContinuousIntegrationProvider implements ContinuousIntegrationInfoProvider {
2827

29-
private final ProviderFactory providerFactory
28+
protected final ProviderFactory providerFactory
3029

3130
AbstractContinuousIntegrationProvider(ProviderFactory providerFactory) {
3231
this.providerFactory = providerFactory
3332
}
3433

35-
protected String getEnvironmentVariable(String envKey) {
36-
return providerFactory.environmentVariable(envKey).getOrElse(null)
34+
protected Provider<String> environmentVariable(String envKey) {
35+
return providerFactory.environmentVariable(envKey)
3736
}
3837

39-
protected static String hostname() {
40-
OperatingSystem currentOs = OperatingSystem.current()
41-
if (currentOs.isWindows()) {
42-
try {
43-
return Kernel32Util.getComputerName()
44-
} catch (Throwable t) {
45-
// with variations in Gradle versions and JVMs, this can sometimes break
46-
log.log(Level.FINEST, "Unable to determine the host name on this Windows instance", t)
47-
}
48-
} else if (currentOs.isUnix()) {
49-
try {
50-
return POSIXUtil.getHostName()
51-
} catch (Throwable t) {
52-
log.log(Level.FINEST, "Unable to determine the host name", t)
53-
}
54-
} else {
55-
log.log(Level.FINEST, "Unknown operating system $currentOs, could not detect hostname")
56-
}
57-
return 'localhost'
38+
protected Provider<String> hostname() {
39+
return providerFactory.of(HostnameValueSource) {}
5840
}
5941
}

src/main/groovy/nebula/plugin/info/ci/CircleCIProvider.groovy

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package nebula.plugin.info.ci
1717

18-
import org.gradle.api.Project
18+
import org.gradle.api.provider.Provider
1919
import org.gradle.api.provider.ProviderFactory
2020

2121
class CircleCIProvider extends AbstractContinuousIntegrationProvider {
@@ -24,32 +24,32 @@ class CircleCIProvider extends AbstractContinuousIntegrationProvider {
2424
}
2525

2626
@Override
27-
boolean supports(Project project) {
28-
getEnvironmentVariable('CIRCLECI')
27+
boolean supports() {
28+
environmentVariable('CIRCLECI').isPresent()
2929
}
3030

3131
@Override
32-
String calculateHost(Project project) {
32+
Provider<String> host() {
3333
return hostname()
3434
}
3535

3636
@Override
37-
String calculateJob(Project project) {
38-
getEnvironmentVariable("CIRCLE_JOB")
37+
Provider<String> job() {
38+
environmentVariable("CIRCLE_JOB")
3939
}
4040

4141
@Override
42-
String calculateBuildNumber(Project project) {
43-
getEnvironmentVariable("CIRCLE_BUILD_NUM")
42+
Provider<String> buildNumber() {
43+
environmentVariable("CIRCLE_BUILD_NUM")
4444
}
4545

4646
@Override
47-
String calculateBuildId(Project project) {
48-
getEnvironmentVariable("CIRCLE_BUILD_NUM")
47+
Provider<String> buildId() {
48+
environmentVariable("CIRCLE_BUILD_NUM")
4949
}
5050

5151
@Override
52-
String calculateBuildUrl(Project project) {
53-
getEnvironmentVariable("CIRCLE_BUILD_URL")
52+
Provider<String> buildUrl() {
53+
environmentVariable("CIRCLE_BUILD_URL")
5454
}
5555
}

src/main/groovy/nebula/plugin/info/ci/CirrusCIProvider.groovy

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,41 +15,49 @@
1515
*/
1616
package nebula.plugin.info.ci
1717

18-
import org.gradle.api.Project
18+
import groovy.transform.CompileStatic
19+
import org.gradle.api.provider.Provider
1920
import org.gradle.api.provider.ProviderFactory
21+
import org.jspecify.annotations.NullMarked
2022

23+
@NullMarked
24+
@CompileStatic
2125
class CirrusCIProvider extends AbstractContinuousIntegrationProvider {
2226
CirrusCIProvider(ProviderFactory providerFactory) {
2327
super(providerFactory)
2428
}
2529

2630
@Override
27-
boolean supports(Project project) {
28-
getEnvironmentVariable("CIRRUS_CI")
31+
boolean supports() {
32+
environmentVariable("CIRRUS_CI").isPresent()
2933
}
3034

3135
@Override
32-
String calculateHost(Project project) {
36+
Provider<String> host() {
3337
return hostname()
3438
}
3539

3640
@Override
37-
String calculateJob(Project project) {
38-
getEnvironmentVariable("CIRRUS_REPO_FULL_NAME")
41+
Provider<String> job() {
42+
environmentVariable("CIRRUS_REPO_FULL_NAME")
3943
}
4044

4145
@Override
42-
String calculateBuildNumber(Project project) {
43-
getEnvironmentVariable("CIRRUS_CHANGE_IN_REPO")
46+
Provider<String> buildNumber() {
47+
environmentVariable("CIRRUS_CHANGE_IN_REPO")
4448
}
4549

4650
@Override
47-
String calculateBuildId(Project project) {
48-
getEnvironmentVariable("CIRRUS_BUILD_ID")
51+
Provider<String> buildId() {
52+
environmentVariable("CIRRUS_BUILD_ID")
4953
}
5054

5155
@Override
52-
String calculateBuildUrl(Project project) {
53-
"${hostname()}/build/${getEnvironmentVariable("CIRRUS_BUILD_ID")}"
56+
Provider<String> buildUrl() {
57+
return host().flatMap { host ->
58+
buildId().map { id ->
59+
"${host}/build/${id}".toString()
60+
}
61+
}
5462
}
5563
}

src/main/groovy/nebula/plugin/info/ci/ContinuousIntegrationInfoPlugin.groovy

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ class ContinuousIntegrationInfoPlugin implements Plugin<Project>, InfoCollectorP
6161
}
6262

6363
private void configureExtMapping(Project project, ContinuousIntegrationInfoExtension extension) {
64-
extension.host.convention(providerFactory.provider { selectedProvider.calculateHost(project) })
65-
extension.job.convention(providerFactory.provider { selectedProvider.calculateJob(project) })
66-
extension.buildNumber.convention(providerFactory.provider { selectedProvider.calculateBuildNumber(project) })
67-
extension.buildId.convention(providerFactory.provider { selectedProvider.calculateBuildId(project) })
68-
extension.buildUrl.convention(providerFactory.provider { selectedProvider.calculateBuildUrl(project) })
64+
extension.host.convention(selectedProvider.host())
65+
extension.job.convention(selectedProvider.job())
66+
extension.buildNumber.convention(selectedProvider.buildNumber())
67+
extension.buildId.convention(selectedProvider.buildId())
68+
extension.buildUrl.convention(selectedProvider.buildUrl())
6969
}
7070

7171
ContinuousIntegrationInfoProvider findProvider(Project project) {

src/main/groovy/nebula/plugin/info/ci/ContinuousIntegrationInfoProvider.java

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,65 @@
1717
package nebula.plugin.info.ci;
1818

1919
import org.gradle.api.Project;
20+
import org.gradle.api.provider.Provider;
21+
import org.jspecify.annotations.NullMarked;
22+
import org.jspecify.annotations.Nullable;
2023

2124
/**
2225
* Could contribute to idea plugin, once we know the right SCM
2326
*/
27+
@NullMarked
2428
public interface ContinuousIntegrationInfoProvider {
2529
/**
2630
* Determine support. Attempt to not use a library, to reduce impact and side effect of calling
31+
*
2732
* @param project project to validate support against
2833
* @return boolean of the provider's availibility to support the current environment.
2934
*/
30-
boolean supports(Project project);
31-
String calculateHost(Project project);
32-
String calculateJob(Project project);
33-
String calculateBuildNumber(Project project);
34-
String calculateBuildId(Project project);
35-
String calculateBuildUrl(Project project);
35+
@Deprecated
36+
default boolean supports(Project project) {
37+
return supports();
38+
}
39+
40+
boolean supports();
41+
42+
@Deprecated
43+
@Nullable
44+
default String calculateHost(Project project) {
45+
return host().getOrNull();
46+
}
47+
48+
@Deprecated
49+
@Nullable
50+
default String calculateJob(Project project) {
51+
return job().getOrNull();
52+
}
53+
54+
@Deprecated
55+
@Nullable
56+
default String calculateBuildNumber(Project project) {
57+
return buildNumber().getOrNull();
58+
}
59+
60+
@Deprecated
61+
@Nullable
62+
default String calculateBuildId(Project project) {
63+
return buildId().getOrNull();
64+
}
65+
66+
@Deprecated
67+
@Nullable
68+
default String calculateBuildUrl(Project project) {
69+
return buildUrl().getOrNull();
70+
}
71+
72+
Provider<String> host();
73+
74+
Provider<String> job();
75+
76+
Provider<String> buildNumber();
77+
78+
Provider<String> buildId();
79+
80+
Provider<String> buildUrl();
3681
}

src/main/groovy/nebula/plugin/info/ci/DroneProvider.groovy

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,43 +15,46 @@
1515
*/
1616
package nebula.plugin.info.ci
1717

18-
import org.gradle.api.Project
18+
import org.gradle.api.provider.Provider
1919
import org.gradle.api.provider.ProviderFactory
2020

21-
2221
class DroneProvider extends AbstractContinuousIntegrationProvider {
2322

2423
DroneProvider(ProviderFactory providerFactory) {
2524
super(providerFactory)
2625
}
2726

2827
@Override
29-
boolean supports(Project project) {
30-
getEnvironmentVariable('DRONE')
28+
boolean supports() {
29+
environmentVariable('DRONE').isPresent()
3130
}
3231

3332
@Override
34-
String calculateHost(Project project) {
33+
Provider<String> host() {
3534
return hostname()
3635
}
3736

3837
@Override
39-
String calculateJob(Project project) {
40-
getEnvironmentVariable("DRONE_REPO")
38+
Provider<String> job() {
39+
environmentVariable("DRONE_REPO")
4140
}
4241

4342
@Override
44-
String calculateBuildNumber(Project project) {
45-
getEnvironmentVariable("DRONE_BUILD_NUMBER")
43+
Provider<String> buildNumber() {
44+
environmentVariable("DRONE_BUILD_NUMBER")
4645
}
4746

4847
@Override
49-
String calculateBuildId(Project project) {
50-
getEnvironmentVariable("DRONE_BUILD_NUMBER")
48+
Provider<String> buildId() {
49+
environmentVariable("DRONE_BUILD_NUMBER")
5150
}
5251

5352
@Override
54-
String calculateBuildUrl(Project project) {
55-
return "http://${hostname()}/build/${getEnvironmentVariable("DRONE_BUILD_NUMBER")}"
53+
Provider<String> buildUrl() {
54+
return host().flatMap { host ->
55+
buildNumber().map { number ->
56+
"http://${host}/build/${number}".toString()
57+
}
58+
}
5659
}
5760
}

0 commit comments

Comments
 (0)