Skip to content

xtask ls-apis adoc can't handle server packages in multiple workspaces #7847

@hawkw

Description

@hawkw

On the current HEAD commit (df35ee9), the cargo xtask ls-apis adoc command fails part-way through when it tries to generate a table entry for the Dendrite dpd-client API, as it's present in multiple workspaces. We should fix this, as it means that it's not currently possible to generate the asciidoc summary.

eliza@theseus ~/Code/oxide/omicron $ cargo xtask ls-apis adoc
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.32s
     Running `target/debug/xtask ls-apis adoc`
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.52s
     Running `target/debug/ls-apis adoc`
loading metadata for workspace omicron from current workspace
loading metadata for workspace lldp from /home/eliza/.cargo/git/checkouts/lldp-d47de417041f191b/ce952e6/Cargo.toml
loading metadata for workspace maghemite from /home/eliza/.cargo/git/checkouts/maghemite-c0236f0fd3d582b6/caafd88/Cargo.toml
loading metadata for workspace crucible from /home/eliza/.cargo/git/checkouts/crucible-0a48bd218bc2bbbc/81a3528/Cargo.toml
loading metadata for workspace propolis from /home/eliza/.cargo/git/checkouts/propolis-d68c8bd1bc59c9bd/6b5f2af/Cargo.toml
loading metadata for workspace dendrite from /home/eliza/.cargo/git/checkouts/dendrite-ae9f1715c17fc765/a66561e/Cargo.toml
note: ignoring Cargo dependency from crucible-pantry -> ... -> crucible-control-client
note: ignoring Cargo dependency from omicron-sled-agent -> dns-server
// BEGIN auto-generated by Omicron's `cargo xtask ls-apis adoc`
// DO NOT EDIT.
// in the Omicron repo.
.List of OpenAPI/Progenitor-based interfaces for online upgrade.
[cols="1h,2,2,2a,2,2", options="header"]
|===
|API
|Server location (`repo:path`)
|Client packages (`repo:path`)
|Consumers (`repo:path`; excluding omdb and tests)
|Versioning
|Notes

// DO NOT EDIT.  This table is auto-generated. See above.
|Bootstrap Agent
|https://github.com/oxidecomputer/omicron/tree/main/sled-agent[omicron:sled-agent]
|https://github.com/oxidecomputer/omicron/tree/main/clients/bootstrap-agent-client[omicron:clients/bootstrap-agent-client]
|
* https://github.com/oxidecomputer/omicron/tree/main/sled-agent[omicron:sled-agent]
* https://github.com/oxidecomputer/omicron/tree/main/wicketd[omicron:wicketd]
|Client-side (depends on itself (i.e., instances call each other))
|-

// DO NOT EDIT.  This table is auto-generated. See above.
|Clickhouse Cluster Admin for Keepers
|https://github.com/oxidecomputer/omicron/tree/main/clickhouse-admin[omicron:clickhouse-admin]
|https://github.com/oxidecomputer/omicron/tree/main/clients/clickhouse-admin-keeper-client[omicron:clients/clickhouse-admin-keeper-client]
|
* https://github.com/oxidecomputer/omicron/tree/main/nexus[omicron:nexus]
|Server-side only
|This is the server running inside multi-node Clickhouse keeper zones that's responsible for local configuration and monitoring.

// DO NOT EDIT.  This table is auto-generated. See above.
|Clickhouse Cluster Admin for Servers
|https://github.com/oxidecomputer/omicron/tree/main/clickhouse-admin[omicron:clickhouse-admin]
|https://github.com/oxidecomputer/omicron/tree/main/clients/clickhouse-admin-server-client[omicron:clients/clickhouse-admin-server-client]
|
* https://github.com/oxidecomputer/omicron/tree/main/nexus[omicron:nexus]
|Server-side only
|This is the server running inside multi-node Clickhouse server zones that's responsible for local configuration and monitoring.

// DO NOT EDIT.  This table is auto-generated. See above.
|Clickhouse Single-Node Cluster Admin
|https://github.com/oxidecomputer/omicron/tree/main/clickhouse-admin[omicron:clickhouse-admin]
|https://github.com/oxidecomputer/omicron/tree/main/clients/clickhouse-admin-single-client[omicron:clients/clickhouse-admin-single-client]
|
* https://github.com/oxidecomputer/omicron/tree/main/nexus[omicron:nexus]
|Server-side only
|This is the server running inside single-node Clickhouse server zones that's responsible for local configuration and monitoring.

// DO NOT EDIT.  This table is auto-generated. See above.
|CockroachDB Cluster Admin
|https://github.com/oxidecomputer/omicron/tree/main/cockroach-admin[omicron:cockroach-admin]
|https://github.com/oxidecomputer/omicron/tree/main/clients/cockroach-admin-client[omicron:clients/cockroach-admin-client]
|
* https://github.com/oxidecomputer/omicron/tree/main/nexus[omicron:nexus]
|Server-side only
|This is the server running inside CockroachDB zones that performs configuration and monitoring that requires the `cockroach` CLI.

// DO NOT EDIT.  This table is auto-generated. See above.
|Crucible Agent
|https://github.com/oxidecomputer/crucible/tree/main/agent[crucible:agent]
|https://github.com/oxidecomputer/crucible/tree/main/agent-client[crucible:agent-client]
|
* https://github.com/oxidecomputer/omicron/tree/main/nexus[omicron:nexus]
|Server-side only
|-

// DO NOT EDIT.  This table is auto-generated. See above.
|Crucible Control (for testing only)
|https://github.com/oxidecomputer/propolis/tree/main/bin/propolis-server[propolis:bin/propolis-server]
|https://github.com/oxidecomputer/crucible/tree/main/control-client[crucible:control-client]
|
|Server-side only
|Exposed by Crucible upstairs for debugging via the `cmon` debugging tool.

// DO NOT EDIT.  This table is auto-generated. See above.
|Crucible Pantry
|https://github.com/oxidecomputer/crucible/tree/main/pantry[crucible:pantry]
|https://github.com/oxidecomputer/crucible/tree/main/pantry-client[crucible:pantry-client]
|
* https://github.com/oxidecomputer/omicron/tree/main/nexus[omicron:nexus]
|Server-side only
|-

// DO NOT EDIT.  This table is auto-generated. See above.
|Maghemite DDM Admin
|https://github.com/oxidecomputer/maghemite/tree/main/ddmd[maghemite:ddmd]
|https://github.com/oxidecomputer/maghemite/tree/main/ddm-admin-client[maghemite:ddm-admin-client]
|
* https://github.com/oxidecomputer/omicron/tree/main/installinator[omicron:installinator]
* https://github.com/oxidecomputer/maghemite/tree/main/mgd[maghemite:mgd]
* https://github.com/oxidecomputer/omicron/tree/main/sled-agent[omicron:sled-agent]
* https://github.com/oxidecomputer/omicron/tree/main/wicketd[omicron:wicketd]
|Server-side only
|The `ddmd` server runs in each sled GZ and each switch zone. These daemons provide an interface for advertising network prefixes, and observing what prefixes have been received from other DDM daemons in the rack. Sled agent uses this interface to announce bootstrap and underlay network prefixes, as well as learn about routes to other sleds and services in the rack. This interface is required in early-networking before a rack is fully up with Nexus running. Nexus does not consume this interface today, but will for observability APIs in the future.

// DO NOT EDIT.  This table is auto-generated. See above.
|DNS Server
|https://github.com/oxidecomputer/omicron/tree/main/dns-server[omicron:dns-server]
|https://github.com/oxidecomputer/omicron/tree/main/clients/dns-service-client[omicron:clients/dns-service-client]
|
* https://github.com/oxidecomputer/omicron/tree/main/nexus[omicron:nexus]
* https://github.com/oxidecomputer/omicron/tree/main/sled-agent[omicron:sled-agent]
|Server-side only
|-

// DO NOT EDIT.  This table is auto-generated. See above.
|Dendrite DPD
|https://github.com/oxidecomputer/dendrite/tree/main/dpd[dendrite:dpd]
Error: server package "dpd-client" was found in more than one workspace: dendrite, lldp, omicron

Stack backtrace:
   0: anyhow::error::<impl anyhow::Error>::msg
             at /home/eliza/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/anyhow-1.0.97/src/backtrace.rs:27:14
   1: find_package_workspace
             at ./dev-tools/ls-apis/src/workspaces.rs:227:9
   2: adoc_label
             at ./dev-tools/ls-apis/src/system_apis.rs:323:30
   3: ls_apis::run_adoc
             at ./dev-tools/ls-apis/src/bin/ls-apis.rs:119:25
   4: ls_apis::main
             at ./dev-tools/ls-apis/src/bin/ls-apis.rs:84:23
   5: core::ops::function::FnOnce::call_once
             at /nix/store/cx6zh5dyv805dgjb4j1qza531dvb6msc-rust-default-1.85.0/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
   6: __rust_begin_short_backtrace<fn() -> core::result::Result<(), anyhow::Error>, core::result::Result<(), anyhow::Error>>
             at /nix/store/cx6zh5dyv805dgjb4j1qza531dvb6msc-rust-default-1.85.0/lib/rustlib/src/rust/library/std/src/sys/backtrace.rs:152:18
   7: {closure#0}<core::result::Result<(), anyhow::Error>>
             at /nix/store/cx6zh5dyv805dgjb4j1qza531dvb6msc-rust-default-1.85.0/lib/rustlib/src/rust/library/std/src/rt.rs:195:18
   8: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
             at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/core/src/ops/function.rs:284:13
   9: std::panicking::try::do_call
             at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/std/src/panicking.rs:584:40
  10: std::panicking::try
             at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/std/src/panicking.rs:547:19
  11: std::panic::catch_unwind
             at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/std/src/panic.rs:358:14
  12: std::rt::lang_start_internal::{{closure}}
             at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/std/src/rt.rs:174:48
  13: std::panicking::try::do_call
             at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/std/src/panicking.rs:584:40
  14: std::panicking::try
             at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/std/src/panicking.rs:547:19
  15: std::panic::catch_unwind
             at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/std/src/panic.rs:358:14
  16: std::rt::lang_start_internal
             at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/std/src/rt.rs:174:20
  17: std::rt::lang_start
             at /nix/store/cx6zh5dyv805dgjb4j1qza531dvb6msc-rust-default-1.85.0/lib/rustlib/src/rust/library/std/src/rt.rs:194:17
  18: main
  19: __libc_start_call_main
  20: __libc_start_main_alias_2
  21: _start

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions