Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,6 @@ plugins {
`kotlin-dsl`
}

tasks.named<GroovyCompile>("compileGroovy", GroovyCompile::class.java) {
groovyOptions.configurationScript = file("src/groovyCompile/groovycConfig.groovy")

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this wasn't working anyway

}

description = "Gradle plugin collect and provide information about the environment"

contacts {
Expand Down
6 changes: 0 additions & 6 deletions src/groovyCompile/groovycConfig.groovy

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,44 +16,26 @@

package nebula.plugin.info.ci

import com.sun.jna.platform.win32.Kernel32Util
import groovy.util.logging.Log
import groovy.transform.CompileStatic
import org.gradle.api.provider.Provider
import org.gradle.api.provider.ProviderFactory
import org.gradle.internal.os.OperatingSystem
import org.jspecify.annotations.NullMarked

import java.util.logging.Level

@Log
@NullMarked
@CompileStatic
abstract class AbstractContinuousIntegrationProvider implements ContinuousIntegrationInfoProvider {

private final ProviderFactory providerFactory
protected final ProviderFactory providerFactory

AbstractContinuousIntegrationProvider(ProviderFactory providerFactory) {
this.providerFactory = providerFactory
}

protected String getEnvironmentVariable(String envKey) {
return providerFactory.environmentVariable(envKey).getOrElse(null)
protected Provider<String> environmentVariable(String envKey) {
return providerFactory.environmentVariable(envKey)
}

protected static String hostname() {
OperatingSystem currentOs = OperatingSystem.current()
if (currentOs.isWindows()) {
try {
return Kernel32Util.getComputerName()
} catch (Throwable t) {
// with variations in Gradle versions and JVMs, this can sometimes break
log.log(Level.FINEST, "Unable to determine the host name on this Windows instance", t)
}
} else if (currentOs.isUnix()) {
try {
return POSIXUtil.getHostName()
} catch (Throwable t) {
log.log(Level.FINEST, "Unable to determine the host name", t)
}
} else {
log.log(Level.FINEST, "Unknown operating system $currentOs, could not detect hostname")
}
return 'localhost'
protected Provider<String> hostname() {
return providerFactory.of(HostnameValueSource) {}
}
}
24 changes: 12 additions & 12 deletions src/main/groovy/nebula/plugin/info/ci/CircleCIProvider.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/
package nebula.plugin.info.ci

import org.gradle.api.Project
import org.gradle.api.provider.Provider
import org.gradle.api.provider.ProviderFactory

class CircleCIProvider extends AbstractContinuousIntegrationProvider {
Expand All @@ -24,32 +24,32 @@ class CircleCIProvider extends AbstractContinuousIntegrationProvider {
}

@Override
boolean supports(Project project) {
getEnvironmentVariable('CIRCLECI')
boolean supports() {
environmentVariable('CIRCLECI').isPresent()
}

@Override
String calculateHost(Project project) {
Provider<String> host() {
return hostname()
}

@Override
String calculateJob(Project project) {
getEnvironmentVariable("CIRCLE_JOB")
Provider<String> job() {
environmentVariable("CIRCLE_JOB")
}

@Override
String calculateBuildNumber(Project project) {
getEnvironmentVariable("CIRCLE_BUILD_NUM")
Provider<String> buildNumber() {
environmentVariable("CIRCLE_BUILD_NUM")
}

@Override
String calculateBuildId(Project project) {
getEnvironmentVariable("CIRCLE_BUILD_NUM")
Provider<String> buildId() {
environmentVariable("CIRCLE_BUILD_NUM")
}

@Override
String calculateBuildUrl(Project project) {
getEnvironmentVariable("CIRCLE_BUILD_URL")
Provider<String> buildUrl() {
environmentVariable("CIRCLE_BUILD_URL")
}
}
32 changes: 20 additions & 12 deletions src/main/groovy/nebula/plugin/info/ci/CirrusCIProvider.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -15,41 +15,49 @@
*/
package nebula.plugin.info.ci

import org.gradle.api.Project
import groovy.transform.CompileStatic
import org.gradle.api.provider.Provider
import org.gradle.api.provider.ProviderFactory
import org.jspecify.annotations.NullMarked

@NullMarked
@CompileStatic
class CirrusCIProvider extends AbstractContinuousIntegrationProvider {
CirrusCIProvider(ProviderFactory providerFactory) {
super(providerFactory)
}

@Override
boolean supports(Project project) {
getEnvironmentVariable("CIRRUS_CI")
boolean supports() {
environmentVariable("CIRRUS_CI").isPresent()
}

@Override
String calculateHost(Project project) {
Provider<String> host() {
return hostname()
}

@Override
String calculateJob(Project project) {
getEnvironmentVariable("CIRRUS_REPO_FULL_NAME")
Provider<String> job() {
environmentVariable("CIRRUS_REPO_FULL_NAME")
}

@Override
String calculateBuildNumber(Project project) {
getEnvironmentVariable("CIRRUS_CHANGE_IN_REPO")
Provider<String> buildNumber() {
environmentVariable("CIRRUS_CHANGE_IN_REPO")
}

@Override
String calculateBuildId(Project project) {
getEnvironmentVariable("CIRRUS_BUILD_ID")
Provider<String> buildId() {
environmentVariable("CIRRUS_BUILD_ID")
}

@Override
String calculateBuildUrl(Project project) {
"${hostname()}/build/${getEnvironmentVariable("CIRRUS_BUILD_ID")}"
Provider<String> buildUrl() {
return host().flatMap { host ->
buildId().map { id ->
"${host}/build/${id}".toString()
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,11 @@ class ContinuousIntegrationInfoPlugin implements Plugin<Project>, InfoCollectorP
}

private void configureExtMapping(Project project, ContinuousIntegrationInfoExtension extension) {
extension.host.convention(providerFactory.provider { selectedProvider.calculateHost(project) })
extension.job.convention(providerFactory.provider { selectedProvider.calculateJob(project) })
extension.buildNumber.convention(providerFactory.provider { selectedProvider.calculateBuildNumber(project) })
extension.buildId.convention(providerFactory.provider { selectedProvider.calculateBuildId(project) })
extension.buildUrl.convention(providerFactory.provider { selectedProvider.calculateBuildUrl(project) })
extension.host.convention(selectedProvider.host())
extension.job.convention(selectedProvider.job())
extension.buildNumber.convention(selectedProvider.buildNumber())
extension.buildId.convention(selectedProvider.buildId())
extension.buildUrl.convention(selectedProvider.buildUrl())
}

ContinuousIntegrationInfoProvider findProvider(Project project) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,65 @@
package nebula.plugin.info.ci;

import org.gradle.api.Project;
import org.gradle.api.provider.Provider;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;

/**
* Could contribute to idea plugin, once we know the right SCM
*/
@NullMarked
public interface ContinuousIntegrationInfoProvider {
/**
* Determine support. Attempt to not use a library, to reduce impact and side effect of calling
*
* @param project project to validate support against
* @return boolean of the provider's availibility to support the current environment.
*/
boolean supports(Project project);
String calculateHost(Project project);
String calculateJob(Project project);
String calculateBuildNumber(Project project);
String calculateBuildId(Project project);
String calculateBuildUrl(Project project);
@Deprecated
default boolean supports(Project project) {
return supports();
}

boolean supports();

@Deprecated
@Nullable
default String calculateHost(Project project) {
return host().getOrNull();
}

@Deprecated
@Nullable
default String calculateJob(Project project) {
return job().getOrNull();
}

@Deprecated
@Nullable
default String calculateBuildNumber(Project project) {
return buildNumber().getOrNull();
}

@Deprecated
@Nullable
default String calculateBuildId(Project project) {
return buildId().getOrNull();
}

@Deprecated
@Nullable
default String calculateBuildUrl(Project project) {
return buildUrl().getOrNull();
}

Provider<String> host();

Provider<String> job();

Provider<String> buildNumber();

Provider<String> buildId();

Provider<String> buildUrl();
}
29 changes: 16 additions & 13 deletions src/main/groovy/nebula/plugin/info/ci/DroneProvider.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -15,43 +15,46 @@
*/
package nebula.plugin.info.ci

import org.gradle.api.Project
import org.gradle.api.provider.Provider
import org.gradle.api.provider.ProviderFactory


class DroneProvider extends AbstractContinuousIntegrationProvider {

DroneProvider(ProviderFactory providerFactory) {
super(providerFactory)
}

@Override
boolean supports(Project project) {
getEnvironmentVariable('DRONE')
boolean supports() {
environmentVariable('DRONE').isPresent()
}

@Override
String calculateHost(Project project) {
Provider<String> host() {
return hostname()
}

@Override
String calculateJob(Project project) {
getEnvironmentVariable("DRONE_REPO")
Provider<String> job() {
environmentVariable("DRONE_REPO")
}

@Override
String calculateBuildNumber(Project project) {
getEnvironmentVariable("DRONE_BUILD_NUMBER")
Provider<String> buildNumber() {
environmentVariable("DRONE_BUILD_NUMBER")
}

@Override
String calculateBuildId(Project project) {
getEnvironmentVariable("DRONE_BUILD_NUMBER")
Provider<String> buildId() {
environmentVariable("DRONE_BUILD_NUMBER")
}

@Override
String calculateBuildUrl(Project project) {
return "http://${hostname()}/build/${getEnvironmentVariable("DRONE_BUILD_NUMBER")}"
Provider<String> buildUrl() {
return host().flatMap { host ->
buildNumber().map { number ->
"http://${host}/build/${number}".toString()
}
}
}
}
Loading