Consumer CLI for the autoware-index registry
Project description
aw-index-cli
aw-index-cli is the consumer CLI for the autoware-index registry. It
reads a distribution manifest (distributions/<rosdistro>.yaml,
schema_version: "2") and composes a vcstool .repos file that you
can vcs import into a workspace.
The registry is repository-keyed: each entry is a repository (identified by
a registry-unique key) carrying exactly one ref and one or more
registered packages. Ref skew between packages of the same repository is
unrepresentable by construction. The registry does not track Autoware
versions — those are resolved at sweep time, not stored. compose therefore
never selects a ref by Autoware version; the --autoware flag is recorded in
the header for provenance only.
Install
With pipx (recommended for an isolated CLI):
pipx install aw-index-cli
Editable, from a checkout:
python3 -m pip install -e ".[dev]"
compose
Render a .repos file from a distribution.
Select what you need — by package name or by repository entry. The distribution is fetched from GitHub by default, so no registry checkout is required.
# Recommended: compose just the packages you want.
aw-index-cli compose --rosdistro jazzy \
--packages autoware_livox_tag_filter
# …or pull in whole repository entries by their registry key.
aw-index-cli compose --rosdistro jazzy \
--repository autoware_livox_tag_filter
# Narrow by tag (filters can be combined; they are ANDed).
aw-index-cli compose --rosdistro jazzy --tags sensing perception
# Print to stdout instead of writing a file.
aw-index-cli compose --rosdistro jazzy \
--packages autoware_livox_tag_filter --stdout
Omitting all of
--packages,--repository, and--tagscomposes the entire distribution into one.repos. That is supported but rarely what you want — prefer naming the packages or repositories you actually consume.
Less common sources — a local registry checkout, or a fork / specific git ref:
# Read from a local registry checkout instead of GitHub.
aw-index-cli compose --rosdistro jazzy \
--packages autoware_livox_tag_filter \
--registry-path /path/to/autoware-index
# Fetch the distribution from a fork at a specific branch/tag/sha.
aw-index-cli compose --rosdistro jazzy \
--packages autoware_livox_tag_filter \
--registry-repo me/autoware-index-fork --registry-ref dev
Example output for compose --rosdistro jazzy --repository livox-tools
(a monorepo entry hosting two registered packages):
# aw-index-cli 0.1.0
# source: autowarefoundation/autoware-index@main
# rosdistro: jazzy
# tags: all
# repository: livox-tools
# generated_at: 2026-06-11T12:00:00+00:00
# selected packages by repository:
# livox-tools: autoware_livox_decoder, autoware_livox_tag_filter
# Generated file — re-run 'aw-index-cli compose …' to update; do not edit by hand.
repositories:
livox-tools:
type: git
url: https://github.com/autowarefoundation/autoware_livox_tag_filter
version: main
Each entry is a pure vcstool entry — only type, url, and version. The
selected registered package names live in the # selected packages by repository: header comment, not in the YAML body.
How entries are composed
-
Entry keys are registry repository keys (the keys under
repositories:in the distribution YAML), not URL basenames. The key is also the checkout directoryvcs importclones into. -
Selection is by package, repository, or tag — ANDed. A package survives when it passes every filter you give:
--packages(name in the list),--repository(its entry's key in the list), and--tags(its tags intersect the list). Omit a filter to not constrain on it; omit all three to take the whole distribution. A--packagesname or--repositorykey that does not exist anywhere in the distribution is a hard error, never a silent empty result. -
A monorepo collapses to one clone. A repository is selected when at least one of its packages survives the filters. However many of its packages match, it yields exactly one
.reposentry at the repository's singleref. -
Entries are pure vcstool —
type/url/versiononly. The.reposformat defines no other per-entry fields, so the selected registered package names are recorded in the# selected packages by repository:header comment (sorted by name), not in the YAML body. With a tag filter, that comment may name only a subset of a monorepo's registered packages. vcstool ignores comments, sovcs importworks unchanged. -
The clone may contain unregistered sibling packages the index makes no claims about — registration is per package, but cloning is per repository. For a build scoped to what you actually asked for, pass the names from the header comment (or the registry) to colcon:
colcon build --packages-up-to autoware_livox_tag_filter # names from the header comment
-
version:is the registry ref'svalueas-is; vcstool checks out tags, shas, and branches alike without needing to know the kind.
schema_version gate
compose only accepts distribution documents with schema_version: "2".
Anything else — older "1" documents, a missing field, or a future version —
aborts with a non-zero exit and a clear error naming the found version
("… not supported by this aw-index-cli (supports: '2')"). It never emits
silently empty output for a document it does not understand.
Key options
--rosdistro(required): ROS distribution, e.g.jazzy.--packages ...: keep only these registered package names. Unknown names error.--repository ...: keep only these repository entries, by registry key. Unknown keys error.--tags ...: keep only packages whose tags intersect these; omit for all. Combined with--packages/--repository, the filters are ANDed.--autoware: informational only — recorded in the header, not a ref selector.--registry-path: local file or registry directory; omit to fetch from GitHub.--registry-repo/--registry-ref: GitHub source — the repository (defaultautowarefoundation/autoware-index) and the git ref (branch, tag, or sha; defaultmain) of the registry to fetch the distribution from.--repo-root: where to discoverrepositories/; defaults to the current dir.--name: output basename (defaultautoware-index).--output: explicit output file path (overrides repo-root discovery).--stdout: print the rendered.reposinstead of writing a file.--no-timestamp: omitgenerated_atfor byte-identical, diffable output.
Commands
compose— render a.reposfile from a distribution.check— gate a composed.reposagainst the registry and sweep history.list— list registry packages with their latest validation status.
The CLI owns registry-domain operations and leaves workspace/git work to
vcstool. There is deliberately no import command — pipe compose
straight into vcs:
aw-index-cli compose --rosdistro jazzy --packages autoware_livox_tag_filter --stdout \
| vcs import src
check
Verify that a composed .repos is still in good standing: every repository at the
registry's current ref, and each registered package passing its latest sweep. Reads
the distribution (current refs) and the data branch's per-package validation
history. Intended as a CI gate after vcs import.
# Auto-discovers ./autoware-index.repos or ./*/autoware-index.repos; rosdistro is
# read from the file's header. Exit code is the gate.
aw-index-cli check
# Or point at a specific file.
aw-index-cli check --repos repositories/autoware-index.repos --rosdistro jazzy
Per repository it reports: ref drift (your pinned ref ≠ the registry's current
ref), removed (no longer registered), each package's latest validation status
(pass/fail/— unvalidated) and the Autoware version it was tested against, and —
for branch refs — whether the branch advanced past the last swept commit.
- Exit
0— all checked packages pass, no drift. - Exit
1— any failing validation, ref drift, or removed package (with--strict, also unvalidated packages or a branch that advanced since the sweep). - Exit
2— could not run (bad/missing.repos, registry load error).
Key options: --repos (default: auto-discover), --rosdistro (default: from the
header), --registry-path/--registry-repo/--registry-ref (as compose),
--data-ref (default data), --strict, --format {table,json}. check's
branch-drift check shells out to git ls-remote; if git is absent that check is
skipped (best-effort), everything else still runs.
list
Enumerate the packages registered for a distro, annotated with their latest sweep status — discovery plus a health readout, without composing anything.
aw-index-cli list --rosdistro jazzy
aw-index-cli list --rosdistro jazzy --tags sensing --format json
Accepts the same selection filters as compose (--packages, --repository,
--tags). Exit 0 normally; with --strict, exit 1 if any selected package is
failing or unvalidated; exit 2 on a registry load error.
License
Apache-2.0. See LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aw_index_cli-0.2.0.tar.gz.
File metadata
- Download URL: aw_index_cli-0.2.0.tar.gz
- Upload date:
- Size: 30.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d691c4a64b0e62b12f679f5799c4c1ef534a3ae3f5bdb0449042df9b1f20dc74
|
|
| MD5 |
2d774f2e1c2cdb98a33188d6079d3eae
|
|
| BLAKE2b-256 |
d22b4334e3879756b030e7e2c793c4a2abe25d977a61310055996a1fcdb5ecf8
|
Provenance
The following attestation bundles were made for aw_index_cli-0.2.0.tar.gz:
Publisher:
release.yaml on autowarefoundation/aw-index-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aw_index_cli-0.2.0.tar.gz -
Subject digest:
d691c4a64b0e62b12f679f5799c4c1ef534a3ae3f5bdb0449042df9b1f20dc74 - Sigstore transparency entry: 2018941125
- Sigstore integration time:
-
Permalink:
autowarefoundation/aw-index-cli@1f2a20548b6a1085d1e54f6b3c1bee4f2f6734a9 -
Branch / Tag:
refs/tags/0.2.0 - Owner: https://github.com/autowarefoundation
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@1f2a20548b6a1085d1e54f6b3c1bee4f2f6734a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file aw_index_cli-0.2.0-py3-none-any.whl.
File metadata
- Download URL: aw_index_cli-0.2.0-py3-none-any.whl
- Upload date:
- Size: 23.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85d7122e8c77aed06aa9f6d32c935c1adb98d507398f1f3bf80e421f833932a3
|
|
| MD5 |
79ac0b89937b9d8f7f002aaae7f984b6
|
|
| BLAKE2b-256 |
80b708f9be244e2e7fafb209d8c636ff77851fe0d070f3fecdd85c7628b27b0c
|
Provenance
The following attestation bundles were made for aw_index_cli-0.2.0-py3-none-any.whl:
Publisher:
release.yaml on autowarefoundation/aw-index-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aw_index_cli-0.2.0-py3-none-any.whl -
Subject digest:
85d7122e8c77aed06aa9f6d32c935c1adb98d507398f1f3bf80e421f833932a3 - Sigstore transparency entry: 2018941219
- Sigstore integration time:
-
Permalink:
autowarefoundation/aw-index-cli@1f2a20548b6a1085d1e54f6b3c1bee4f2f6734a9 -
Branch / Tag:
refs/tags/0.2.0 - Owner: https://github.com/autowarefoundation
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@1f2a20548b6a1085d1e54f6b3c1bee4f2f6734a9 -
Trigger Event:
push
-
Statement type: