Open kilpatty opened 4 years ago
I wonder if the quick workaround works in your case:
docker build -f inner-crate-path/Cargo.toml .
In this case, the frontend will build only binary(-es) defined in a crate at inner-crate-path
of the workspace.
There is a major drawback with this - unfortunately, you'll need to duplicate [package.metadata.wharf]
annotations per each subcrate. The approach is also used by the cargo-wharf
itself to produce 2 images out of a single workspace:
https://hub.docker.com/r/denzp/cargo-wharf-frontend
https://hub.docker.com/r/denzp/cargo-container-tools
On the long run, I've been thinking about something similar to Cargo cfg(...)
. Eventually, it might be possible to specify base and "overridden" settings:
[package.metadata.wharf.builder]
image = "rust"
[package.metadata.wharf.output]
image = "debian:stable-slim"
[workspace.metadata.'cfg(name = binary-2)'.wharf.output] # <--
image = "ubuntu:latest"
[[package.metadata.wharf.binary]]
name = "binary-1"
destination = "/usr/local/bin/binary-1"
[[package.metadata.wharf.'cfg(name = binary-2)'.binary]] # <--
name = "binary-2"
destination = "/usr/local/bin/binary-2"
[[package.metadata.wharf.'cfg(name = binary-3)'.binary]] # <--
name = "binary-3"
destination = "/usr/local/bin/binary-3"
This suppose to always output binary binary-1
, and optionally binary-2
and binary-3
depending on --build-arg cfg=name=binary-2
or --build-arg cfg=name=binary-3
.
Additionally when --build-arg cfg=name=binary-2
is set, the output image should be overridden to ubuntu:latest
.
What do you think about this proposal? Would this help for your use case?
Is there a way to allow this to output multiple images?
I'm using a workspace, but rather than output 2 binaries in the same image, I'd love to have this output 2 images each with one of the binaries.
If there is somewhere you can point me to implement this please do, I'm happy to spend the time!