| package worker |
| |
| import ( |
| "math" |
| |
| "github.com/moby/buildkit/client" |
| ) |
| |
| const defaultCap int64 = 2e9 // 2GB |
| |
| // tempCachePercent represents the percentage ratio of the cache size in bytes to temporarily keep for a short period of time (couple of days) |
| // over the total cache size in bytes. Because there is no perfect value, a mathematically pleasing one was chosen. |
| // The value is approximately 13.8 |
| const tempCachePercent = math.E * math.Pi * math.Phi |
| |
| // DefaultGCPolicy returns a default builder GC policy |
| func DefaultGCPolicy(p string, defaultKeepBytes int64) []client.PruneInfo { |
| keep := defaultKeepBytes |
| if defaultKeepBytes == 0 { |
| keep = detectDefaultGCCap(p) |
| } |
| |
| tempCacheKeepBytes := int64(math.Round(float64(keep) / 100. * float64(tempCachePercent))) |
| const minTempCacheKeepBytes = 512 * 1e6 // 512MB |
| if tempCacheKeepBytes < minTempCacheKeepBytes { |
| tempCacheKeepBytes = minTempCacheKeepBytes |
| } |
| |
| return []client.PruneInfo{ |
| // if build cache uses more than 512MB delete the most easily reproducible data after it has not been used for 2 days |
| { |
| Filter: []string{"type==source.local,type==exec.cachemount,type==source.git.checkout"}, |
| KeepDuration: 48 * 3600, // 48h |
| KeepBytes: tempCacheKeepBytes, |
| }, |
| // remove any data not used for 60 days |
| { |
| KeepDuration: 60 * 24 * 3600, // 60d |
| KeepBytes: keep, |
| }, |
| // keep the unshared build cache under cap |
| { |
| KeepBytes: keep, |
| }, |
| // if previous policies were insufficient start deleting internal data to keep build cache under cap |
| { |
| All: true, |
| KeepBytes: keep, |
| }, |
| } |
| } |