Skip to content

Commit bd07cc0

Browse files
refactor: lock integration tests by default (#5)
1 parent e742375 commit bd07cc0

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-15
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ configured only once in a `dependencySettings` extension in settings.gradle.kts.
2727
on certain
2828
configurations (
2929
default: `annotationProcessor`, `compileClasspath`, `runtimeClasspath`, `testCompileClasspath`, `testRuntimeClasspath`)
30+
- If integration tests are found, it will also add `integrationTestCompileClasspath` and
31+
`integrationTestRuntimeClasspath`
3032
- If `useDependencyLocking` is specified (default: true), adds a project
31-
task `resolveAndLockAll`which can be use in
33+
task `resolveAndLockAll`which can be used in
3234
conjunction with the `--write-locks` flag to update all project lockfiles.
3335

3436
Example usage in `settings.gradle.kts`:
Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,21 @@
11
package org.hypertrace.gradle.dependency;
22

3+
import javax.inject.Inject;
34
import org.gradle.api.model.ObjectFactory;
4-
import org.gradle.api.plugins.JavaPlugin;
55
import org.gradle.api.provider.ListProperty;
66
import org.gradle.api.provider.Property;
77

8-
import javax.inject.Inject;
9-
import java.util.List;
10-
118
public class DependencyPluginProjectExtension {
129
static final String EXTENSION_NAME = "dependencySettings";
13-
private static final List<String> DEFAULT_LOCKED_CONFIGURATIONS =
14-
List.of(
15-
JavaPlugin.ANNOTATION_PROCESSOR_CONFIGURATION_NAME,
16-
JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME,
17-
JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME,
18-
JavaPlugin.TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME,
19-
JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME);
10+
2011
public final ListProperty<String> configurationsToLock;
2112

2213
public final Property<Boolean> autoApplyBom;
2314

2415
@Inject
2516
public DependencyPluginProjectExtension(ObjectFactory objectFactory) {
2617
this.configurationsToLock =
27-
objectFactory.listProperty(String.class).convention(DEFAULT_LOCKED_CONFIGURATIONS);
18+
objectFactory.listProperty(String.class);
2819
this.autoApplyBom = objectFactory.property(Boolean.class).convention(true);
2920
}
3021
}

src/main/java/org/hypertrace/gradle/dependency/HypertraceDependencySettingsPlugin.java

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package org.hypertrace.gradle.dependency;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Optional;
36
import org.gradle.api.GradleException;
47
import org.gradle.api.Plugin;
58
import org.gradle.api.Project;
@@ -13,14 +16,20 @@
1316
import org.gradle.api.initialization.dsl.VersionCatalogBuilder;
1417
import org.gradle.api.plugins.JavaPlugin;
1518
import org.gradle.api.provider.Provider;
19+
import org.gradle.api.tasks.SourceSetContainer;
1620
import org.jetbrains.annotations.NotNull;
1721

18-
import java.util.Optional;
19-
2022
public class HypertraceDependencySettingsPlugin implements Plugin<Settings> {
2123
private static final String HYPERTRACE_REPOSITORY_URL =
2224
"https://hypertrace.jfrog.io/artifactory/maven";
2325
private static final String CONFLUENT_REPOSITORY_URL = "https://packages.confluent.io/maven";
26+
private static final List<String> DEFAULT_LOCKED_CONFIGURATIONS =
27+
List.of(
28+
JavaPlugin.ANNOTATION_PROCESSOR_CONFIGURATION_NAME,
29+
JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME,
30+
JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME,
31+
JavaPlugin.TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME,
32+
JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME);
2433

2534
@Override
2635
public void apply(@NotNull Settings settings) {
@@ -45,6 +54,7 @@ public void apply(@NotNull Settings settings) {
4554
unused -> {
4655
DependencyPluginProjectExtension projectExtension =
4756
this.addProjectExtension(project);
57+
this.assignDefaultConfigurationsToLock(project, projectExtension);
4858
this.addBomDependencyIfRequested(
4959
project, settingExtension, projectExtension);
5060
if (settingExtension.useDependencyLocking.get()) {
@@ -230,6 +240,31 @@ private void addDependencyLocking(
230240
}));
231241
}
232242

243+
private void assignDefaultConfigurationsToLock(
244+
Project targetProject, DependencyPluginProjectExtension extension) {
245+
// Default to this list
246+
extension.configurationsToLock.convention(DEFAULT_LOCKED_CONFIGURATIONS);
247+
// But if an integration test plugin is applied (now or later) reassign the default
248+
targetProject
249+
.getPluginManager()
250+
.withPlugin(
251+
"org.hypertrace.integration-test-plugin",
252+
plugin -> {
253+
targetProject
254+
.getExtensions()
255+
.getByType(SourceSetContainer.class)
256+
.named(
257+
"integrationTest",
258+
sourceSet -> {
259+
List<String> configurationsToLock =
260+
new ArrayList<>(DEFAULT_LOCKED_CONFIGURATIONS);
261+
configurationsToLock.add(sourceSet.getCompileClasspathConfigurationName());
262+
configurationsToLock.add(sourceSet.getRuntimeClasspathConfigurationName());
263+
extension.configurationsToLock.convention(configurationsToLock);
264+
});
265+
});
266+
}
267+
233268
/**
234269
* Adds a task to the target project that resolves all configurations that we've enabled for
235270
* locking for. In conjunction with the --write-locks flag, this allows an easy way to update the

0 commit comments

Comments
 (0)