diff --git a/internal/arduino/builder/core.go b/internal/arduino/builder/core.go index a21dca94032..c53a1b4a0da 100644 --- a/internal/arduino/builder/core.go +++ b/internal/arduino/builder/core.go @@ -108,12 +108,13 @@ func (b *Builder) compileCore() (*paths.Path, paths.PathList, error) { return true } - // If there is an archived core in the current build cache, use it - if _, err := buildcache.New(b.coreBuildCachePath).GetOrCreate(archivedCoreName); errors.Is(err, buildcache.CreateDirErr) { - return nil, nil, errors.New(i18n.Tr("creating core cache folder: %s", err)) - } targetArchivedCore = b.coreBuildCachePath.Join(archivedCoreName, "core.a") if canUseArchivedCore(targetArchivedCore) { + // Update timestamp of the cache folder to extend expire time + if _, err := buildcache.New(b.coreBuildCachePath).GetOrCreate(archivedCoreName); errors.Is(err, buildcache.CreateDirErr) { + return nil, nil, errors.New(i18n.Tr("creating core cache folder: %s", err)) + } + // use archived core if b.logger.Verbose() { b.logger.Info(i18n.Tr("Using precompiled core: %[1]s", targetArchivedCore)) @@ -151,17 +152,23 @@ func (b *Builder) compileCore() (*paths.Path, paths.PathList, error) { // archive core.a if targetArchivedCore != nil && !b.onlyUpdateCompilationDatabase { - err := archiveFile.CopyTo(targetArchivedCore) - if b.logger.Verbose() { - if err == nil { - b.logger.Info(i18n.Tr("Archiving built core (caching) in: %[1]s", targetArchivedCore)) - } else if os.IsNotExist(err) { - b.logger.Info(i18n.Tr("Unable to cache built core, please tell %[1]s maintainers to follow %[2]s", - b.actualPlatform, - "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-build-the-corea-archive-file")) - } else { + if err := targetArchivedCore.Parent().MkdirAll(); err != nil { + if b.logger.Verbose() { b.logger.Info(i18n.Tr("Error archiving built core (caching) in %[1]s: %[2]s", targetArchivedCore, err)) } + } else { + err := archiveFile.CopyTo(targetArchivedCore) + if b.logger.Verbose() { + if err == nil { + b.logger.Info(i18n.Tr("Archiving built core (caching) in: %[1]s", targetArchivedCore)) + } else if os.IsNotExist(err) { + b.logger.Info(i18n.Tr("Unable to cache built core, please tell %[1]s maintainers to follow %[2]s", + b.actualPlatform, + "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-build-the-corea-archive-file")) + } else { + b.logger.Info(i18n.Tr("Error archiving built core (caching) in %[1]s: %[2]s", targetArchivedCore, err)) + } + } } }