feat: build rover-fed as separate binary #887
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR does a bunch of things in service of future fun times. We want to distribute composition separately from Rover, this PR lays the groundwork.
Add rover-fed as a --bin target, keep rover as the default. This binary is solely responsible for performing composition.
Create new supergraph-config crate to be used by rover (resolve sdl from introspection, file or registry) and rover-fed to compose a supergraph from all of the resolved subgraphs provided to it by rover
Create new fed-types crate that is used across harmonizer, rover, and rover-fed. this will likely need to be published either to crates.io or to an internal crates registry as it's impossible to work with it locally since rustc thinks they're different types since we're referring to the crate by a path which is outside of the workspace
Use the
fed-types
workspace crate for existingsupergraph compose
types (harmonizer pr here: feat(harmonizer): idiomatic types federation#1082)Extend rovers installer to be used like so: rover install --plugin rover-fed which downloads a tarball from a gh releases url and moves it to the rover install directory. this won't work with npm installs out of the box but folks who installed with npm can run
rover install && npm u -g @apollo/rover
to "eject" their global install if they so chooseproduce separate tarballs for rover-fed via
cargo xtask package
which are versioned exactly the same as rover, these will automatically be included as artifacts in each rover releasetodo: license stuff/warnings, QA, figure out orbiter changes (if even necessary)