@@ -11,6 +11,7 @@ import (
11
11
"log"
12
12
"net/http"
13
13
"os"
14
+ "os/exec"
14
15
"path/filepath"
15
16
"strings"
16
17
"time"
@@ -135,6 +136,7 @@ func main() {
135
136
}
136
137
}
137
138
139
+ clearTempCaches ()
138
140
clearStorageBackgroundJob ()
139
141
StartServer (portFlag )
140
142
}
@@ -400,3 +402,50 @@ func constructArtifactName(bin *build.Binary) string {
400
402
artifactName .Write ([]byte (bin .Arch ))
401
403
return artifactName .String ()
402
404
}
405
+
406
+ func CleanupGoCache () {
407
+ log .Println ("Cleaning up go caches" )
408
+ cmd := exec .Command ("go" , "clean" , "-cache" )
409
+ err := cmd .Run ()
410
+ if err != nil {
411
+ log .Printf ("Failed to run go clean -cache with error: %v" , err )
412
+ }
413
+
414
+ cmd = exec .Command ("go" , "clean" , "-modcache" )
415
+ err = cmd .Run ()
416
+ if err != nil {
417
+ log .Printf ("Failed to run go clean -modcache with error: %v" , err )
418
+ }
419
+ }
420
+
421
+ func CleanupFailedBuildCaches () {
422
+ log .Println ("Cleaning up fail build directories" )
423
+ base := os .TempDir ()
424
+ entries , err := os .ReadDir (base )
425
+ if err != nil {
426
+ log .Println ("failed to read temp directory" )
427
+ return
428
+ }
429
+ for _ , ent := range entries {
430
+ if ent .IsDir () {
431
+ if strings .HasPrefix (ent .Name (), "goblin" ) {
432
+ err := os .RemoveAll (ent .Name ())
433
+ if err != nil {
434
+ log .Printf ("failed to remove dir: %v" , err )
435
+ }
436
+ }
437
+ }
438
+ }
439
+ }
440
+
441
+ func clearTempCaches () {
442
+ tickerDur , _ := time .ParseDuration ("30s" )
443
+ ticker := time .NewTicker (tickerDur )
444
+
445
+ go func () {
446
+ for range ticker .C {
447
+ CleanupFailedBuildCaches ()
448
+ CleanupGoCache ()
449
+ }
450
+ }()
451
+ }
0 commit comments