From 890119d119e7becf9f39f392aa053ae1e70c77c0 Mon Sep 17 00:00:00 2001 From: nullday Date: Wed, 20 Jul 2022 09:13:10 +0800 Subject: [PATCH] fix: check manifest and image update in new gateway buildfunc (#624) Signed-off-by: Qi Chen --- pkg/builder/build.go | 14 -------- pkg/builder/builder.go | 80 ++++++++++++++++++++++++++---------------- 2 files changed, 50 insertions(+), 44 deletions(-) diff --git a/pkg/builder/build.go b/pkg/builder/build.go index 815e2eca9..fe32de509 100644 --- a/pkg/builder/build.go +++ b/pkg/builder/build.go @@ -23,20 +23,6 @@ import ( func (b generalBuilder) BuildFunc() func(ctx context.Context, c client.Client) (*client.Result, error) { return func(ctx context.Context, c client.Client) (*client.Result, error) { - depsFiles := []string{ - b.PubKeyPath, - b.ConfigFilePath, - b.ManifestFilePath, - } - isUpdated, err := b.CheckDepsFileUpdate(ctx, b.Tag, depsFiles) - if err != nil { - b.logger.Debugf("failed to check manifest update: %s", err) - } - if !isUpdated { - b.logger.Infof("manifest is not updated, skip building") - return nil, nil - } - def, err := b.compile(ctx) if err != nil { return nil, errors.Wrap(err, "failed to compile") diff --git a/pkg/builder/builder.go b/pkg/builder/builder.go index c959af6c5..909e8ef76 100644 --- a/pkg/builder/builder.go +++ b/pkg/builder/builder.go @@ -122,37 +122,10 @@ func (b generalBuilder) NumGPUs() int { return ir.NumGPUs() } -// Always return updated when met error -func (b generalBuilder) CheckDepsFileUpdate(ctx context.Context, tag string, deps []string) (bool, error) { - dockerClient, err := docker.NewClient(ctx) - if err != nil { - return true, err - } - image, err := dockerClient.GetImage(ctx, tag) - if err != nil { - return true, err - } - imageCreatedTime := image.Created - - latestTimestamp := int64(0) - for _, dep := range deps { - file, err := os.Stat(dep) - if err != nil { - return true, err - } - modifiedtime := file.ModTime().Unix() - // Only needt o use the latest modified time - if modifiedtime > latestTimestamp { - latestTimestamp = modifiedtime - } - } - if latestTimestamp > imageCreatedTime { - return true, nil - } - return false, nil -} - func (b generalBuilder) Build(ctx context.Context) error { + if !b.checkIfNeedBuild(ctx) { + return nil + } pw, err := progresswriter.NewPrinter(ctx, os.Stdout, b.ProgressMode) if err != nil { return errors.Wrap(err, "failed to create progress writer") @@ -325,3 +298,50 @@ func (b generalBuilder) build(ctx context.Context, pw progresswriter.Writer) err } return nil } + +func (b generalBuilder) checkIfNeedBuild(ctx context.Context) bool { + depsFiles := []string{ + b.PubKeyPath, + b.ConfigFilePath, + b.ManifestFilePath, + } + isUpdated, err := b.checkDepsFileUpdate(ctx, b.Tag, depsFiles) + if err != nil { + b.logger.Debugf("failed to check manifest update: %s", err) + } + if !isUpdated { + b.logger.Infof("manifest is not updated, skip building") + return false + } + return true +} + +// Always return updated when met error +func (b generalBuilder) checkDepsFileUpdate(ctx context.Context, tag string, deps []string) (bool, error) { + dockerClient, err := docker.NewClient(ctx) + if err != nil { + return true, err + } + image, err := dockerClient.GetImage(ctx, tag) + if err != nil { + return true, err + } + imageCreatedTime := image.Created + + latestTimestamp := int64(0) + for _, dep := range deps { + file, err := os.Stat(dep) + if err != nil { + return true, err + } + modifiedtime := file.ModTime().Unix() + // Only needt o use the latest modified time + if modifiedtime > latestTimestamp { + latestTimestamp = modifiedtime + } + } + if latestTimestamp > imageCreatedTime { + return true, nil + } + return false, nil +}