From 2b2c4ec2a4d4cdc476eb0c361c58814eb4534ebe Mon Sep 17 00:00:00 2001 From: Wouter Verlaek Date: Thu, 19 Dec 2024 15:31:44 +0100 Subject: [PATCH 1/2] Build dependencies of cached package --- pkg/leeway/build.go | 19 ++++++++++--------- pkg/leeway/version.go | 2 +- pkg/leeway/workspace.go | 8 +++++++- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/pkg/leeway/build.go b/pkg/leeway/build.go index 246e79c..acbaff4 100644 --- a/pkg/leeway/build.go +++ b/pkg/leeway/build.go @@ -605,15 +605,6 @@ func (p *Package) buildDependencies(buildctx *buildContext) (err error) { } func (p *Package) build(buildctx *buildContext) (err error) { - _, alreadyBuilt := buildctx.LocalCache.Location(p) - - if p.Ephemeral { - // ephemeral packages always require a rebuild - } else if alreadyBuilt { - log.WithField("package", p.FullName()).Debug("already built") - return nil - } - doBuild := buildctx.ObtainBuildLock(p) if !doBuild { return nil @@ -630,6 +621,16 @@ func (p *Package) build(buildctx *buildContext) (err error) { return err } + // Do this after building dependencies, to ensure all transitive dependencies are built + // even if the package itself is already built. + _, alreadyBuilt := buildctx.LocalCache.Location(p) + if p.Ephemeral { + // ephemeral packages always require a rebuild + } else if alreadyBuilt { + log.WithField("package", p.FullName()).Debug("already built") + return nil + } + pkgRep := &PackageBuildReport{ phaseEnter: make(map[PackageBuildPhase]time.Time), phaseDone: make(map[PackageBuildPhase]time.Time), diff --git a/pkg/leeway/version.go b/pkg/leeway/version.go index d9c187b..233ba34 100644 --- a/pkg/leeway/version.go +++ b/pkg/leeway/version.go @@ -1,4 +1,4 @@ package leeway // Version is the version of this leeway build -var Version string = "unkown" +var Version string = "unknown" diff --git a/pkg/leeway/workspace.go b/pkg/leeway/workspace.go index f7c3beb..1d3273d 100644 --- a/pkg/leeway/workspace.go +++ b/pkg/leeway/workspace.go @@ -230,7 +230,13 @@ func loadWorkspace(ctx context.Context, path string, args Arguments, variant str if err != nil { return Workspace{}, err } - ignores = strings.Split(string(fc), "\n") + split := strings.Split(string(fc), "\n") + for _, s := range split { + if s == "" { + continue + } + ignores = append(ignores, s) + } } otherWS, err := doublestar.Glob(workspace.Origin, "**/WORKSPACE.yaml", workspace.ShouldIgnoreSource) if err != nil { From b31a04fb17b6dc2f5c99b26a17bf11de63f2a3d1 Mon Sep 17 00:00:00 2001 From: Wouter Verlaek Date: Thu, 19 Dec 2024 16:03:53 +0100 Subject: [PATCH 2/2] Update pkg/leeway/build.go Co-authored-by: Mads Hartmann --- pkg/leeway/build.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/leeway/build.go b/pkg/leeway/build.go index acbaff4..8a0ca1a 100644 --- a/pkg/leeway/build.go +++ b/pkg/leeway/build.go @@ -621,8 +621,8 @@ func (p *Package) build(buildctx *buildContext) (err error) { return err } - // Do this after building dependencies, to ensure all transitive dependencies are built - // even if the package itself is already built. + // Return early if the package is already built. We're explicitly performing this check after having built all the dependencies. + // Previously we had it before, but that resulted in failed builds as there's no guarantee that the cache will contain transitive dependencies; in our case they were sometimes evicted from the cache due to S3 lifecycle rules _, alreadyBuilt := buildctx.LocalCache.Location(p) if p.Ephemeral { // ephemeral packages always require a rebuild