hundreds-father-404
10/07/2020, 10:21 PMbinary
dependency, you mean something like a python_binary
to build a .pex
file for it, right?
For 5 with leveraging Docker’s cache, depending on how Docker’s caching works, there’s a mechanism you can use to leverage it. If Docker’s caching is append-only, rather than mutating the cache, there’s a way to hook into that, which we can help with as an optimization. (We’re still working on a mechanism to use tool’s caches when they are mutable.)
I think I’d recommend this workflow:
1. Add a docker
target type. At first, you might want to only have DockerSources
as a field, and we can add other fields like dependencies
later. This target is what you use to give metadata about your Dockerfile
2. Hook into the package
goal to run docker build
on your docker
target. See https://www.pantsbuild.org/docs/plugins-package-goal for a guide. At this point, all you are doing is running Docker. You’ll use BinaryPaths
to find Docker
, use Get(SourceFiles, SourceFilesRequest)
to get the dockerfile present, and then use Process
to run your subprocess.
3. Augment your target type to allow dependencies on binary targets. When those are used, your plugin will run the equivalent of ./pants package
(formerly ./pants binary
), and then you can use the result and include it in your Docker subprocess. This is how the new archive
target type works; you’ll be able to copy and paste most of pants/core/target_types.py
4. Augment your target type to also allow depending on loose files/resources. This will also be very similar to the archive
target type.
How does that sound?