cargo-component icon indicating copy to clipboard operation
cargo-component copied to clipboard

Cannot specify world to target for package referenced from a registry

Open kate-goldenring opened this issue 8 months ago • 2 comments

I have a component that adds two numbers. It uses the adder world defined in ghcr.io/bytecodealliance/docs/adder:0.1.0. In my Cargo.toml, I get an error if I specify the world within the package i want to target. This happens to be redundant in this case as only the adder world exists in the package, but I would expect it to still be permitted.

Example app

Cargo.toml:

[package.metadata.component.target]
# The registry which contains the package
registry = "ghcr.io/bytecodealliance"
# The package name
package = "docs:adder"
# The package version
version = "0.1.0"
# Adding the following incurs an erro
world = "adder"

Error during cargo component build --release:

error: failed to create a target world for package `adder` (/Users/kagold/Programs/component-docs/component-model/examples/tutorial/adder/Cargo.toml)

Caused by:
    0: failed to select world from target package `docs:adder`
    1: no world named `adder` in package
For now, i'll leave the world out but ill file an issue with cargo-component

WIT can be fetched

wkg get --format wit docs:[email protected] --output adder.wit  --registry ghcr.io

WIT:

package docs:[email protected];

interface add {
  add: func(a: u32, b: u32) -> u32;
}

world adder {
  export add;
}

kate-goldenring avatar May 01 '25 19:05 kate-goldenring

I am using cargo-component 0.21.1

kate-goldenring avatar May 01 '25 19:05 kate-goldenring

So it looks to me like the issue might be that the wit you provided is different from the wit in the registry. When I look at the thing being fetched here, I see the following wit:

package root:component;

world root {
  export docs:adder/[email protected];
}
package docs:[email protected] {
  interface add {
    add: func(x: u32, y: u32) -> u32;
  }
}

I am able to properly scaffold out a component using that world with the following command though:

cargo component new --lib --target docs:adder/root foo

where I had to use root to specify the world I wanted to target.

After some discussion about how config should be addressed, we could probably use this when handling https://github.com/bytecodealliance/component-docs/issues/255

macovedj avatar May 08 '25 18:05 macovedj