I used to be able to copy all files of a specific type from two-levels nested. This no longer works in BuildKit.
Why? To avoid cache busting. We want to restore our dependencies from all *.csproj files, and not invalidate that cache layer when a source file changes.
see https://stackoverflow.com/a/58697043 as the defacto approach most dotnet docker builds will be using.
If we just copy everything over first, that means any change triggers cache-busting and a full package restore is again required. Without wildcards, we have to manually maintain a long list of csproj file COPYs that is error-prone and unmaintainable across many solutions.
# These all worked without buildkit but now fail with buildkit
COPY src/*/*.csproj ./
COPY */*/*.csproj ./
This puts all found files into a single folder (which at least works for the goal we are trying to achieve)
I now get errors like:
error from sender: readdir: open *: The filename, directory name, or volume label syntax is incorrect.
or sometimes nothing is copied, so i get missing files errors later in the next RUN command.
As far as I an tell, COPY */*.csproj ./
still works as expected, when csproj files are only one-level nested, but doesn't work for the two-level nested case.
As a workaround, I might be able to move to a one-level nested structure, though ideally i wouldn't have to change my structure to fit docker for something that used to work?
Thanks!
YoeriVD, sehcheese, simoncowie, thoemmi, pvanbuijtene and 39 more
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4