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
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public void apply(Settings settings) {
if (settings.getGradle().getStartParameter().isBuildCacheEnabled()) {
DevelocityConfiguration dv = settings.getExtensions().getByType(DevelocityConfiguration.class);
settings.buildCache(new BuildCacheConfigureAction(conventions, dv));
configureEdge(settings, conventions);
}
if (!settings.getGradle().getStartParameter().isNoBuildScan() && !containsPropertiesTask(settings)) {
configureBuildScan(settings, conventions);
Expand All @@ -70,6 +71,11 @@ private boolean containsPropertiesTask(Settings settings) {
|| settings.getGradle().getStartParameter().getTaskNames().stream().anyMatch(it -> it.endsWith(":properties"));
}

private void configureEdge(Settings settings, DevelocityConventions conventions) {
DevelocityConfiguration dv = settings.getExtensions().getByType(DevelocityConfiguration.class);
dv.getEdgeDiscovery().set(conventions.getEdgeDiscovery());
}


private void configureBuildScan(Settings settings, DevelocityConventions conventions) {
DevelocityConfiguration dv = settings.getExtensions().getByType(DevelocityConfiguration.class);
Expand Down Expand Up @@ -117,11 +123,8 @@ private static class BuildCacheConfigureAction implements Action<BuildCacheConfi
private static final String US_CACHE_NODE = "https://us-build-cache.gradle.org";
private static final String AU_CACHE_NODE = "https://au-build-cache.gradle.org";

private static final String GRADLE_CACHE_REMOTE_SERVER_PROPERTY_NAME = "gradle.cache.remote.server";
private static final String GRADLE_CACHE_REMOTE_SERVER_ENV_NAME = "GRADLE_CACHE_REMOTE_SERVER";
private static final String DEVELOCITY_ACCESS_KEY = "DEVELOCITY_ACCESS_KEY";
private static final String GRADLE_CACHE_REMOTE_PUSH_PROPERTY_NAME = "gradle.cache.remote.push";
private static final String GRADLE_CACHE_NODE_PROPERTY_NAME = "cacheNode";
private final DevelocityConventions conventions;
private final DevelocityConfiguration dv;

Expand All @@ -143,26 +146,22 @@ public void execute(BuildCacheConfiguration buildCache) {
boolean push = (conventions.isCiServer() || remotePush) && accessKeySet;
remoteBuildCache.setPush(push);
});

buildCache.local(localBuildCache -> localBuildCache.setEnabled(!disableLocalCache));
}

private String determineRemoteCacheUrl() {
return conventions.environmentVariableProvider(GRADLE_CACHE_REMOTE_SERVER_ENV_NAME)
.orElse(conventions.systemPropertyProvider(GRADLE_CACHE_REMOTE_SERVER_PROPERTY_NAME))
.orElse(conventions.systemPropertyProvider(GRADLE_CACHE_NODE_PROPERTY_NAME)
.map(cacheNode -> {
switch (cacheNode) {
case "eu":
return EU_CACHE_NODE;
case "us":
return US_CACHE_NODE;
case "au":
return AU_CACHE_NODE;
default:
throw new IllegalArgumentException("Unrecognized cacheNode: " + cacheNode);
}
})).orElse(EU_CACHE_NODE).get();
return conventions.getRemoteCacheUrl()
.getOrElse(getRemoteCacheUrlFromNodeName());
}

private String getRemoteCacheUrlFromNodeName() {
return conventions.getRemoteCacheNodeName()
.map(cacheNode -> switch (cacheNode) {
case "eu" -> EU_CACHE_NODE;
case "us" -> US_CACHE_NODE;
case "au" -> AU_CACHE_NODE;
default -> throw new IllegalArgumentException("Unrecognized cacheNode: " + cacheNode);
}).getOrNull();
}

private boolean notNullOrEmpty(String value) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,22 +35,46 @@ public class DevelocityConventions {
private static final String AGREE_PUBLIC_BUILD_SCAN_TERM_OF_SERVICE = "agreePublicBuildScanTermOfService";

private static final String DEVELOCITY_SERVER_URL = "develocity.server.url";
private static final String DEVELOCITY_EDGE_DISCOVERY = "develocity.edge.discovery";
private static final String CI_ENV_NAME = "CI";

private static final String GRADLE_CACHE_REMOTE_SERVER_ENV_NAME = "GRADLE_CACHE_REMOTE_SERVER";
private static final String GRADLE_CACHE_REMOTE_SERVER_PROPERTY_NAME = "gradle.cache.remote.server";
private static final String GRADLE_CACHE_NODE_PROPERTY_NAME = "cacheNode";

private static final Pattern HTTPS_URL_PATTERN = Pattern.compile("https://github\\.com/([\\w-]+)/([\\w-]+)\\.git");
private static final Pattern SSH_URL_PATTERN = Pattern.compile("git@github\\.com:([\\w-]+)/([\\w-]+)\\.git");
private static final Pattern SHA_PATTERN = Pattern.compile("[0-9a-fA-F]+");

private final ProviderFactory providerFactory;
private final String develocityServerUrl;
private final boolean isCiServer;
private final boolean edgeDiscovery;

public DevelocityConventions(ProviderFactory providerFactory) {
this.providerFactory = providerFactory;
this.edgeDiscovery = determineEdgeDiscovery();
this.develocityServerUrl = determineDevelocityServerUrl();
this.isCiServer = !getEnvVariable(CI_ENV_NAME, "").isEmpty();
}

private boolean determineEdgeDiscovery() {
return Boolean.parseBoolean(getSystemProperty(DEVELOCITY_EDGE_DISCOVERY, "true"));
}

public Provider<String> getRemoteCacheUrl() {
return environmentVariableProvider(GRADLE_CACHE_REMOTE_SERVER_ENV_NAME)
.orElse(systemPropertyProvider(GRADLE_CACHE_REMOTE_SERVER_PROPERTY_NAME));
}

public Provider<String> getRemoteCacheNodeName() {
return systemPropertyProvider(GRADLE_CACHE_NODE_PROPERTY_NAME);
}

public boolean isRemoteCacheSpecified() {
return getRemoteCacheUrl().orElse(getRemoteCacheNodeName()).isPresent();
}

private String determineDevelocityServerUrl() {
String dvServerUrl = System.getProperty(DEVELOCITY_SERVER_URL);
if (dvServerUrl != null) {
Expand Down Expand Up @@ -78,6 +102,10 @@ public Optional<String> customValueSearchUrl(Map<String, String> search) {
return Optional.of(String.format("%s/scans?%s", develocityServerUrl, query));
}

public boolean getEdgeDiscovery() {
return edgeDiscovery;
}

public String getDevelocityServerUrl() {
return develocityServerUrl;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,23 @@

public class DevelocityConventionsPluginIntegrationTest extends AbstractDevelocityPluginIntegrationTest {
private static final String EU_CACHE_NODE = "https://eu-build-cache.gradle.org";
private static final String US_CACHE_NODE = "https://us-build-cache.gradle.org";
private static final String PUBLIC_DEVELOCITY_SERVER = "https://ge.gradle.org";

@Test
public void configureBuildCacheOnlyWhenBuildCacheEnabled() throws URISyntaxException {
succeeds("help", "--build-cache");

assertTrue(getConfiguredDevelocity().getEdgeDiscoveryValue());
assertNull(getConfiguredRemoteCache().getUrl());
assertFalse(getConfiguredRemoteCache().isPush());
assertTrue(getConfiguredLocalCache().isEnabled());
}

@Test
public void configureBuildCacheOnlyWhenBuildCacheEnabledAndCacheNodeIsSet() throws URISyntaxException {
succeeds("help", "--build-cache", "-DcacheNode=eu");

assertTrue(getConfiguredDevelocity().getEdgeDiscoveryValue());
assertEquals(new URI(EU_CACHE_NODE), getConfiguredRemoteCache().getUrl());
assertFalse(getConfiguredRemoteCache().isPush());
assertTrue(getConfiguredLocalCache().isEnabled());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,16 @@ public DevelocityConfigurationForTest() {

public DevelocityConfigurationForTest(ObjectFactory objectFactory) {
this.server = objectFactory == null ? null : objectFactory.property(String.class);
this.edgeDiscovery = objectFactory == null ? null : objectFactory.property(Boolean.class);
this.buildScanConfiguration = new BuildScanConfigurationForTest(objectFactory);
}


private BuildScanConfigurationForTest buildScanConfiguration;
private Property<String> server;
private String serverValue;
private Property<Boolean> edgeDiscovery;
private boolean edgeDiscoveryValue;

@Override
public BuildScanConfigurationForTest getBuildScan() {
Expand Down Expand Up @@ -65,15 +69,28 @@ public Property<String> getServer() {
}

@Override
@JsonIgnore
@JsonSerialize(using = PropertySerializer.class)
public Property<Boolean> getEdgeDiscovery() {
throw new UnsupportedOperationException();
return edgeDiscovery;
}

public void setEdgeDiscovery(boolean value) {
this.edgeDiscoveryValue = value;
}

@JsonIgnore
public boolean getEdgeDiscoveryValue() {
if (edgeDiscovery != null) {
return edgeDiscovery.getOrElse(false);
}
return edgeDiscoveryValue;
}

public void setServer(String server) {
this.serverValue = server;
}

@JsonIgnore
public String getServerValue() {
if (server != null) {
return server.getOrNull();
Expand Down
Loading