Skip to content

Commit 8d028aa

Browse files
committed
Merge branch '3.2.x' into 3.3.x
Closes gh-42793
2 parents 223886f + a45844e commit 8d028aa

File tree

2 files changed

+62
-3
lines changed

2 files changed

+62
-3
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/bin/bash
2+
3+
echo "Reclaiming Docker Disk Space"
4+
echo
5+
6+
docker image ls --format "{{.Size}} {{.ID}} {{.Repository}} {{.Tag}}" | LANG=en_US sort -rh | while read line; do
7+
size=$( echo "$line" | cut -d' ' -f1 | sed -e 's/\.[0-9]*//' | sed -e 's/MB/000000/' | sed -e 's/GB/000000000/' )
8+
image=$( echo "$line" | cut -d' ' -f2 )
9+
repository=$( echo "$line" | cut -d' ' -f3 )
10+
tag=$( echo "$line" | cut -d' ' -f4 )
11+
echo "Considering $image $repository:$tag $size"
12+
if [[ "$tag" =~ ^[a-f0-9]{32}$ ]]; then
13+
echo "Ignoring GitHub action image $image $repository:$tag"
14+
elif [[ "$tag" == "<none>" ]]; then
15+
echo "Ignoring untagged image $image $repository:$tag"
16+
elif [[ "$size" -lt 200000000 ]]; then
17+
echo "Ignoring small image $image $repository:$tag"
18+
else
19+
echo "Cleaning $image $repository:$tag"
20+
docker image rm $image
21+
fi
22+
done
23+
24+
echo "Finished cleanup, leaving the following containers:"
25+
echo
26+
docker image ls --format "{{.Size}} {{.ID}} {{.Repository}}:{{.Tag}}" | LANG=en_US sort -rh
27+
echo
28+
df -h
29+
echo

buildSrc/src/main/java/org/springframework/boot/build/test/DockerTestPlugin.java

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818

1919
import org.gradle.api.Plugin;
2020
import org.gradle.api.Project;
21+
import org.gradle.api.Task;
2122
import org.gradle.api.plugins.JavaPlugin;
2223
import org.gradle.api.plugins.JavaPluginExtension;
2324
import org.gradle.api.provider.Provider;
2425
import org.gradle.api.services.BuildService;
26+
import org.gradle.api.tasks.Exec;
2527
import org.gradle.api.tasks.SourceSet;
2628
import org.gradle.api.tasks.SourceSetContainer;
2729
import 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

Comments
 (0)