Smarter copies/sharedvolume/default behavior

Authored by dduvall on Sep 6 2017, 12:33 AM.


Smarter copies/sharedvolume/default behavior

Defined new abstract build.Volume and corresponding
docker.DockerVolume instructions.

Refactored compilation of main COPY or VOLUME instruction for
application files to use the new instructions and moved injection of
these instructions out of the compiler and into VariantConfig. The
latter can be smarter about the following cases:

  1. When copies is set, simply depend on artifacts for the application files and do not copy anything from the build host.
  2. When sharedvolume is true, inject a build.Volume instruction for the application working directory.
  3. When neither of the above are set, copy application files from the host.

Fixes T174623
Depends on D768

Test Plan:
Run go test ./.... Run blubber blubber.example.yaml production and ensure:

  1. The prep stage has a COPY . . instruction.
  2. The final stage has no COPY . . instruction, only COPY --from=prep instructions.

Reviewers: thcipriani, mobrovac, hashar, mmodell, Release-Engineering-Team

Reviewed By: thcipriani, mobrovac, Release-Engineering-Team

Tags: Release-Engineering-Team

Maniphest Tasks: T174623

Differential Revision: https://phabricator.wikimedia.org/D769