Conversation
2a722ee to
a99e8ea
Compare
Signed-off-by: Brian Hardock <brian.hardock@fermyon.com>
a99e8ea to
7708392
Compare
itowlson
left a comment
There was a problem hiding this comment.
LGTM. I like the capabilities stuff; in fact I almost wonder if I should be able to run the capabilities stuff outside of doing an add.
|
|
||
| Selecting **"All from aws:client@1.0.0"** records `aws:client@1.0.0` as the dependency name (a package-level selector). Selecting a specific interface records that interface (e.g. `aws:client/s3@1.0.0`). | ||
|
|
||
| #### Explicit `--export` flag |
There was a problem hiding this comment.
This is not surfaced interactively, right? (I would like it not to be - I just want to check we are on the same page.)
oh wait, this is the interface on the left hand side, not the export = option? That coincidence of terminology is going to be a trap
There was a problem hiding this comment.
They're equivalent when selecting interfaces. I couldnt think of a better name here that encapsulated packages and interfaces. How do you feel about --use?
There was a problem hiding this comment.
Wait once again it seems I am utterly confused about a feature we have been shipping for a gazillion years - I thought export was about remapping interfaces... sigh
I was initially going to suggest --interface, but I now realise that if you want all a package's APIs, you have to tell it the package name if you don't want it to interact. --use seems a bit open-ended but could be an option. We could try --import perhaps? It's not great though. Well maybe it's okay, I originally thought "ugh, importing exports" but well, huh, that is what importers do, so maybe it makes sense?
Or send up the BIKESHED BAT-SIGNAL and let Lann come up with something.
There was a problem hiding this comment.
I think import works. We could also keep export for the remapping scenario you mention which is the point of it. All I meant was that if the LHS is an interface, it implies that an export with that name exists with that name so its technically equivalent.
There was a problem hiding this comment.
I.e. "a:b/c" = { export = none, ... } is equivalent to "a:b/c" = { export = "a:b/c", ... }
There was a problem hiding this comment.
Aha, I think I see what you mean now. Thanks!
There was a problem hiding this comment.
We could allow add a mutually exclusive --package/-p, --interface/-i.
There was a problem hiding this comment.
Actually never mind, I forgot about plain names.
|
|
||
| ? Select capabilities to inherit from the parent component | ||
| > All | ||
| allowed_outbound_hosts |
There was a problem hiding this comment.
Presumably these will be check boxes rather than a single-select?
|
|
||
| - `--inherit true` or `--inherit all` → inherits all capabilities | ||
| - `--inherit false` or `--inherit none` → inherits nothing | ||
| - `--inherit allowed_outbound_hosts,ai_models` → inherits only those capabilities |
There was a problem hiding this comment.
Or --inherit allowed_outbound_hosts --inherit ai_models, right? (that is, as well as not instead of)
|
|
||
| #### Multiple packages — select a package first | ||
|
|
||
| If the component exports interfaces from multiple packages, the user first selects a package: |
There was a problem hiding this comment.
I worry with this that we may be asking a question the user doesn't know how to answer. I want the authentication interface, is that in client or util? If I guess wrong, is there a way back?
Possible alternative approaches:
- Show them a list of everything they could import - all the interfaces plus an "everything" for each package.
- When they come to interface selection, offer a "The interface I'm looking for isn't here. Take me back to package selection" option
Or maybe this isn't a concern and we have high confidence that users will know what they are looking for and just want to save on ye olde typing, I am not sure.
There was a problem hiding this comment.
Good call out. Ill have a tinker and see if i could smooth this out. I think listing everything with all options for each package is the way to go.
| After a package is selected (or if there is only one), the user chooses between all exports from that package or a single specific interface: | ||
|
|
||
| ``` | ||
| ? Which export should be used? |
There was a problem hiding this comment.
Nit: I would avoid saying 'export' here (because I want to import something, where is the choice for that). Consider e.g. "Which interface do you want to import?" or some better wording that avoids the whole import/export debacle altogether (a la "which interface do you want to use" although that's hardly going to set the poetry world alight either)
| | Capability | Example interfaces | | ||
| |---|---| | ||
| | `ai_models` | `fermyon:spin/llm` | | ||
| | `allowed_outbound_hosts` | `wasi:http/outgoing-handler`, `wasi:sockets/tcp`, `fermyon:spin/mqtt` | |
There was a problem hiding this comment.
wasi:http/client, spin:postgres, fermyon:spin/mysql, spin:mqtt, Redis itfs
| | `files` | `wasi:filesystem/preopens` | | ||
| | `key_value_stores` | `fermyon:spin/key-value` | | ||
| | `sqlite_databases` | `fermyon:spin/sqlite` | | ||
| | `variables` | `fermyon:spin/variables` | |
There was a problem hiding this comment.
All of these have spin:* forms as of Spin 4 (actually SQLite as of Spin 3.2 I think)
| | Form | Example | Description | | ||
| |------|---------|-------------| | ||
| | Local path | `./my-component.wasm` | A path to a Wasm component on disk | | ||
| | HTTP URL | `https://example.com/component.wasm` | A remote Wasm component (requires `--digest`) | | ||
| | Registry reference | `aws:client@1.0.0` | A package from a component registry | |
There was a problem hiding this comment.
Should we also support adding by component ID? I am imagining a case where we have a component that we already build as part of the manifest that we would like to add as dependency to another.
This SIP proposes a Dx for guiding a user into adding a dependency to a component in a Spin.toml. It builds on #3445 and the implementation #3450.