Skip to content

Commit 98df40b

Browse files
committed
feat: add builder cache prune
1 parent 2ae5d75 commit 98df40b

File tree

2 files changed

+39
-15
lines changed

2 files changed

+39
-15
lines changed

docker-host/main.go

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,17 @@ const EnvOverrideHost = "DOCKER_HOST"
2222

2323
var dockerHost = machineryvars.GetEnv("DOCKER_HOST", "docker-host")
2424
var repositoriesToUpdate = machineryvars.GetEnv("REPOSITORIES_TO_UPDATE", "uselagoon")
25-
var REGISTRY = machineryvars.GetEnv("REGISTRY", "docker-registry.default.svc:5000")
26-
var BIP = machineryvars.GetEnv("BIP", "172.16.0.1/16")
25+
var registry = machineryvars.GetEnv("REGISTRY", "docker-registry.default.svc:5000")
26+
var bip = machineryvars.GetEnv("BIP", "172.16.0.1/16")
2727
var logLevel = machineryvars.GetEnv("LOG_LEVEL", "info")
28-
var REGISTRY_MIRROR = machineryvars.GetEnv("REGISTRY_MIRROR", "")
28+
var registryMirror = machineryvars.GetEnv("REGISTRY_MIRROR", "")
2929
var pruneImagesSchedule = machineryvars.GetEnv("PRUNE_SCHEDULE", "22 1 * * *")
3030
var pruneDanglingSchedule = machineryvars.GetEnv("PRUNE_DANGLING_SCHEDULE", "22 1 * * *")
31+
var pruneBuilderCacheSchedule = machineryvars.GetEnv("PRUNE_BUILDER_CACHE_SCHEDULE", "22 1 * * *")
3132
var removeExitedSchedule = machineryvars.GetEnv("REMOVE_EXITED_SCHEDULE", "22 */4 * * *")
3233
var updateImagesSchedule = machineryvars.GetEnv("UPDATE_IMAGES_SCHEDULE", "*/15 * * * *")
3334
var pruneImagesUntil = machineryvars.GetEnv("PRUNE_IMAGES_UNTIL", "168h")
35+
var pruneBuilderCacheUntil = machineryvars.GetEnv("PRUNE_BUILDER_CACHE_UNTIL", "168h")
3436

3537
func main() {
3638
cli, err := client.NewClientWithOpts(
@@ -42,12 +44,12 @@ func main() {
4244
}
4345
defer cli.Close()
4446

45-
var command = fmt.Sprintf("/usr/local/bin/dind /usr/local/bin/dockerd --host=tcp://0.0.0.0:2375 --host=unix:///var/run/docker.sock --bip=%s --storage-driver=overlay2 --tls=false --log-level=%s", BIP, logLevel)
46-
if REGISTRY != "" {
47-
command = command + fmt.Sprintf(" --insecure-registry=%s", REGISTRY)
47+
var command = fmt.Sprintf("/usr/local/bin/dind /usr/local/bin/dockerd --host=tcp://0.0.0.0:2375 --host=unix:///var/run/docker.sock --bip=%s --storage-driver=overlay2 --tls=false --log-level=%s", bip, logLevel)
48+
if registry != "" {
49+
command = command + fmt.Sprintf(" --insecure-registry=%s", registry)
4850
}
49-
if REGISTRY_MIRROR != "" {
50-
command = command + fmt.Sprintf(" --registry-mirror=%s", REGISTRY_MIRROR)
51+
if registryMirror != "" {
52+
command = command + fmt.Sprintf(" --registry-mirror=%s", registryMirror)
5153
}
5254
var cmd = exec.Command("sh", "-c", command)
5355

@@ -57,6 +59,7 @@ func main() {
5759
c := cron.New()
5860
pruneImages(cli, c)
5961
pruneDanglingImages(cli, c)
62+
pruneBuilderCache(cli, c)
6063
removeExited(cli, c)
6164
updateImages(cli, c)
6265
c.Start()
@@ -79,11 +82,6 @@ func pruneImages(client *client.Client, c *cron.Cron) {
7982
log.Println(err)
8083
return
8184
}
82-
// prune all docker build cache images older than 7 days or what is specified in the environment variable
83-
_, buildErr := client.BuildCachePrune(context.Background(), types.BuildCachePruneOptions{Filters: ageFilter})
84-
if buildErr != nil {
85-
log.Println(buildErr)
86-
}
8785
log.Printf("Image prune complete: %d images deleted, %d bytes reclaimed\n",
8886
len(pruneReport.ImagesDeleted), pruneReport.SpaceReclaimed)
8987
})
@@ -113,6 +111,29 @@ func pruneDanglingImages(client *client.Client, c *cron.Cron) {
113111
}
114112
}
115113

114+
func pruneBuilderCache(client *client.Client, c *cron.Cron) {
115+
_, err := c.AddFunc(pruneBuilderCacheSchedule, func() {
116+
log.Println("Starting builder cache prune")
117+
ageFilter := filters.NewArgs()
118+
ageFilter.Add("until", pruneBuilderCacheUntil)
119+
builderCacheOpts := types.BuildCachePruneOptions{
120+
Filters: ageFilter,
121+
}
122+
123+
// Cleans up build cache images
124+
pruneReport, pruneErr := client.BuildCachePrune(context.Background(), builderCacheOpts)
125+
if pruneErr != nil {
126+
log.Println(pruneErr)
127+
}
128+
log.Printf("Builder Cache prune complete: %d deleted, %d bytes reclaimed\n",
129+
len(pruneReport.CachesDeleted), pruneReport.SpaceReclaimed)
130+
})
131+
132+
if err != nil {
133+
log.Printf("Error initiating pruneBuilderCache cron: %v\n", err)
134+
}
135+
}
136+
116137
func removeExited(client *client.Client, c *cron.Cron) {
117138
_, err := c.AddFunc(removeExitedSchedule, func() {
118139
log.Println("Starting removeExited")
@@ -197,7 +218,7 @@ func updateImages(client *client.Client, c *cron.Cron) {
197218
for _, img := range postUpdateImages {
198219
for _, updatedImg := range updatedImages {
199220
if img.ID == updatedImg {
200-
log.Println(fmt.Sprintf("Updated image %s", img.RepoTags))
221+
log.Printf("Updated image %s", img.RepoTags)
201222
}
202223
}
203224
}
@@ -208,7 +229,7 @@ func updateImages(client *client.Client, c *cron.Cron) {
208229
} else {
209230
imgPluralize = "images"
210231
}
211-
log.Println(fmt.Sprintf("Update images complete | %d %s updated", len(updatedImages), imgPluralize))
232+
log.Printf("Update images complete | %d %s updated", len(updatedImages), imgPluralize)
212233
})
213234

214235
if err != nil {

go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module github.com/uselagoon/lagoon-service-images
2+
3+
go 1.22

0 commit comments

Comments
 (0)