1818
1919import org .gradle .api .Plugin ;
2020import org .gradle .api .Project ;
21+ import org .gradle .api .Task ;
2122import org .gradle .api .plugins .JavaPlugin ;
2223import org .gradle .api .plugins .JavaPluginExtension ;
2324import org .gradle .api .provider .Provider ;
2425import org .gradle .api .services .BuildService ;
26+ import org .gradle .api .tasks .Exec ;
2527import org .gradle .api .tasks .SourceSet ;
2628import org .gradle .api .tasks .SourceSetContainer ;
2729import org .gradle .api .tasks .testing .Test ;
@@ -43,17 +45,19 @@ public class DockerTestPlugin implements Plugin<Project> {
4345 /**
4446 * Name of the {@code dockerTest} task.
4547 */
46- public static String DOCKER_TEST_TASK_NAME = "dockerTest" ;
48+ public static final String DOCKER_TEST_TASK_NAME = "dockerTest" ;
4749
4850 /**
4951 * Name of the {@code dockerTest} source set.
5052 */
51- public static String DOCKER_TEST_SOURCE_SET_NAME = "dockerTest" ;
53+ public static final String DOCKER_TEST_SOURCE_SET_NAME = "dockerTest" ;
5254
5355 /**
5456 * Name of the {@code dockerTest} shared service.
5557 */
56- public static String DOCKER_TEST_SERVICE_NAME = "dockerTest" ;
58+ public static final String DOCKER_TEST_SERVICE_NAME = "dockerTest" ;
59+
60+ private static final String RECLAIM_DOCKER_SPACE_TASK_NAME = "reclaimDockerSpace" ;
5761
5862 @ Override
5963 public void apply (Project project ) {
@@ -73,6 +77,8 @@ private void configureDockerTesting(Project project) {
7377 });
7478 project .getDependencies ()
7579 .add (dockerTestSourceSet .getRuntimeOnlyConfigurationName (), "org.junit.platform:junit-platform-launcher" );
80+ Provider <Exec > reclaimDockerSpace = createReclaimDockerSpaceTask (project , buildService );
81+ project .getTasks ().getByName (LifecycleBasePlugin .CHECK_TASK_NAME ).dependsOn (reclaimDockerSpace );
7682 }
7783
7884 private SourceSet createSourceSet (Project project ) {
@@ -110,4 +116,28 @@ private Provider<Test> createTestTask(Project project, SourceSet dockerTestSourc
110116 });
111117 }
112118
119+ private Provider <Exec > createReclaimDockerSpaceTask (Project project ,
120+ Provider <DockerTestBuildService > buildService ) {
121+ return project .getTasks ().register (RECLAIM_DOCKER_SPACE_TASK_NAME , Exec .class , (task ) -> {
122+ task .usesService (buildService );
123+ task .setGroup (LifecycleBasePlugin .VERIFICATION_GROUP );
124+ task .setDescription ("Reclaims Docker space on CI." );
125+ task .shouldRunAfter (DOCKER_TEST_TASK_NAME );
126+ task .onlyIf (this ::shouldReclaimDockerSpace );
127+ task .executable ("bash" );
128+ task .args ("-c" ,
129+ project .getRootDir ()
130+ .toPath ()
131+ .resolve (".github/scripts/reclaim-docker-diskspace.sh" )
132+ .toAbsolutePath ());
133+ });
134+ }
135+
136+ private boolean shouldReclaimDockerSpace (Task task ) {
137+ if (System .getProperty ("os.name" ).startsWith ("Windows" )) {
138+ return false ;
139+ }
140+ return System .getenv ("GITHUB_ACTIONS" ) != null || System .getenv ("RECLAIM_DOCKER_SPACE" ) != null ;
141+ }
142+
113143}
0 commit comments