Description
Currently the test runner intentionally removes each layer unconditionally in a docker file.
This prevents using the layers for caching build output of deps. E.g. in a Rust docker container you can do something like:
COPY Cargo.toml Cargo.lock ./
RUN mkdir src && echo "fn main() {}" > src/main.rs && cargo build --release && rm -rf src
COPY . .
RUN RUSTFLAGS="-C target-cpu=native" cargo install --path . --locked
This will only build the dependencies once and then cache that for all future builds. This allows faster experimentation (cutting out 30s-minutes of each build test cycle depending on the tree / CPU speed). Cache busting is fairly simple (update the toml / lock file, or more generally just touch
them so they're detected as newer), and the same technique applies to other languages not just Rust.
There was a unanswered question about this in 2018 about whether to remove it. #3574 (comment) by @msmith-techempower. I'm curious if there's any known blockers to doing so?