fix: clone exports before modifying for save #357
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
While running the build or bake command, if image outputs and tags were specified and it needed to both save and load the build / target, an error from either the "fast load" or load from registry would result in a retry which would unexpectedly try to push to the specified tags even if push was not specified for those outputs.
The underlying issue was that load fallback options created from
fallbackOpts = maps.Clone(buildOpts)
is a shallow copy of buildOpts. So later whenWithDepotSave
modified the exports to have the attr "push" as "true" so that the images would be pushed to the depot registry, the fallbackOpts.Exports were also affected. During this retry the buildOptTags were still the original ones specified by the user which meant we ended up in a case where during retry, the fallback opts for the output image would have push set to true erroneously and the tag set to possibly another registry resulting in this unexpected push.