diff --git a/cmd/buildkitd/config/gcpolicy.go b/cmd/buildkitd/config/gcpolicy.go index 021d8b5d5..62cd824f0 100644 --- a/cmd/buildkitd/config/gcpolicy.go +++ b/cmd/buildkitd/config/gcpolicy.go @@ -78,7 +78,7 @@ func DefaultGCPolicy(cfg GCConfig, dstat disk.DiskStat) []GCPolicy { return []GCPolicy{ // if build cache uses more than 512MB delete the most easily reproducible data after it has not been used for 2 days { - Filters: []string{"type==source.local,type==exec.cachemount,type==source.git.checkout"}, + Filters: []string{"type==source.local", "type==exec.cachemount", "type==source.git.checkout"}, KeepDuration: Duration{Duration: time.Duration(48) * time.Hour}, // 48h MaxUsedSpace: DiskSpace{Bytes: 512 * 1e6}, // 512MB }, diff --git a/cmd/buildkitd/config/gcpolicy_test.go b/cmd/buildkitd/config/gcpolicy_test.go new file mode 100644 index 000000000..0cd4409ef --- /dev/null +++ b/cmd/buildkitd/config/gcpolicy_test.go @@ -0,0 +1,43 @@ +package config + +import ( + "testing" + + "github.com/containerd/containerd/v2/pkg/filters" + "github.com/moby/buildkit/client" + "github.com/moby/buildkit/util/disk" + "github.com/stretchr/testify/require" +) + +func TestDefaultGCPolicyFiltersMatch(t *testing.T) { + policies := DefaultGCPolicy(GCConfig{}, disk.DiskStat{Total: 1e12}) + require.NotEmpty(t, policies) + + rule := policies[0] + require.NotEmpty(t, rule.Filters) + + f, err := filters.ParseAll(rule.Filters...) + require.NoError(t, err) + + adapt := func(rt client.UsageRecordType) filters.Adaptor { + return filters.AdapterFunc(func(fieldpath []string) (string, bool) { + if len(fieldpath) == 1 && fieldpath[0] == "type" { + return string(rt), rt != "" + } + return "", false + }) + } + + for _, rt := range []client.UsageRecordType{ + client.UsageRecordTypeLocalSource, + client.UsageRecordTypeCacheMount, + client.UsageRecordTypeGitCheckout, + } { + require.Truef(t, f.Match(adapt(rt)), + "first default GC policy should match record type %q", rt) + } + + // It must not match unrelated records such as regular build cache. + require.Falsef(t, f.Match(adapt(client.UsageRecordTypeRegular)), + "first default GC policy should not match record type %q", client.UsageRecordTypeRegular) +}