@@ -21,8 +21,10 @@ import (
2121 "fmt"
2222 "sort"
2323 "strings"
24+ "time"
2425
2526 "github.com/docker/go-connections/nat"
27+ "github.com/xhit/go-str2duration/v2"
2628)
2729
2830// ServiceConfig is the configuration of one service
@@ -215,6 +217,8 @@ const (
215217 PullPolicyMissing = "missing"
216218 // PullPolicyBuild force building images
217219 PullPolicyBuild = "build"
220+ // PullPolicyRefresh checks if image needs to be updated
221+ PullPolicyRefresh = "refresh"
218222)
219223
220224const (
@@ -268,6 +272,27 @@ func (s ServiceConfig) GetDependents(p *Project) []string {
268272 return dependent
269273}
270274
275+ func (s ServiceConfig ) GetPullPolicy () (string , time.Duration , error ) {
276+ switch s .PullPolicy {
277+ case PullPolicyAlways , PullPolicyNever , PullPolicyIfNotPresent , PullPolicyMissing , PullPolicyBuild :
278+ return s .PullPolicy , 0 , nil
279+ case "daily" :
280+ return PullPolicyRefresh , 24 * time .Hour , nil
281+ case "weekly" :
282+ return PullPolicyRefresh , 7 * 24 * time .Hour , nil
283+ default :
284+ if strings .HasPrefix (s .PullPolicy , "every_" ) {
285+ delay := s .PullPolicy [6 :]
286+ duration , err := str2duration .ParseDuration (delay )
287+ if err != nil {
288+ return "" , 0 , err
289+ }
290+ return PullPolicyRefresh , duration , nil
291+ }
292+ return PullPolicyMissing , 0 , nil
293+ }
294+ }
295+
271296// BuildConfig is a type for build
272297type BuildConfig struct {
273298 Context string `yaml:"context,omitempty" json:"context,omitempty"`
0 commit comments