| package config |
| |
| import ( |
| "encoding/json" |
| "fmt" |
| "sort" |
| "strings" |
| |
| "github.com/docker/docker/api/types/filters" |
| ) |
| |
| // BuilderGCRule represents a GC rule for buildkit cache |
| type BuilderGCRule struct { |
| All bool `json:",omitempty"` |
| Filter BuilderGCFilter `json:",omitempty"` |
| KeepStorage string `json:",omitempty"` |
| } |
| |
| // BuilderGCFilter contains garbage-collection filter rules for a BuildKit builder |
| type BuilderGCFilter filters.Args |
| |
| // MarshalJSON returns a JSON byte representation of the BuilderGCFilter |
| func (x *BuilderGCFilter) MarshalJSON() ([]byte, error) { |
| f := filters.Args(*x) |
| keys := f.Keys() |
| sort.Strings(keys) |
| arr := make([]string, 0, len(keys)) |
| for _, k := range keys { |
| values := f.Get(k) |
| for _, v := range values { |
| arr = append(arr, fmt.Sprintf("%s=%s", k, v)) |
| } |
| } |
| return json.Marshal(arr) |
| } |
| |
| // UnmarshalJSON fills the BuilderGCFilter values structure from JSON input |
| func (x *BuilderGCFilter) UnmarshalJSON(data []byte) error { |
| var arr []string |
| f := filters.NewArgs() |
| if err := json.Unmarshal(data, &arr); err != nil { |
| // backwards compat for deprecated buggy form |
| err := json.Unmarshal(data, &f) |
| *x = BuilderGCFilter(f) |
| return err |
| } |
| for _, s := range arr { |
| fields := strings.SplitN(s, "=", 2) |
| name := strings.ToLower(strings.TrimSpace(fields[0])) |
| value := strings.TrimSpace(fields[1]) |
| f.Add(name, value) |
| } |
| *x = BuilderGCFilter(f) |
| return nil |
| } |
| |
| // BuilderGCConfig contains GC config for a buildkit builder |
| type BuilderGCConfig struct { |
| Enabled bool `json:",omitempty"` |
| Policy []BuilderGCRule `json:",omitempty"` |
| DefaultKeepStorage string `json:",omitempty"` |
| } |
| |
| // BuilderEntitlements contains settings to enable/disable entitlements |
| type BuilderEntitlements struct { |
| NetworkHost *bool `json:"network-host,omitempty"` |
| SecurityInsecure *bool `json:"security-insecure,omitempty"` |
| } |
| |
| // BuilderConfig contains config for the builder |
| type BuilderConfig struct { |
| GC BuilderGCConfig `json:",omitempty"` |
| Entitlements BuilderEntitlements `json:",omitempty"` |
| } |