Marketplace

The CLI side of the SPLENT marketplace. It builds and searches the feature index, and logs you in to publish SPL models. The web catalog, the UVL configurator and third-party publishing are explained in the Marketplace section.

The index is a cache you can rebuild, never a second source of truth. Everything it knows about a feature comes from the feature’s [tool.splent.contract] at its latest released tag, and everything it knows about variability comes from the SPL lines the marketplace publishes, read at their DOI. With --local it is built from the workspace instead.

The model

  • Releasing a feature publishes it. feature:release tags the repository and uploads to the forge and PyPI. There is no upload, account or API for features on the marketplace.
  • Publishing an SPL model goes through the marketplace. spl:publish sends the .uvl to the marketplace, which relays it to UVLHub with its own key and returns the DOI. This is the only thing login, whoami and logout are for. You never hold a UVLHub key.
  • The index is derived. marketplace:index scans the forge organisations and any registered third-party repositories, reads each contract at its latest tag and writes one index.json. When it is stale or lost, rebuild it.
  • Third parties are curated. An external author releases on their own forge organisation, and a reviewed pull request adds the repository to the registry file marketplace:index --registry reads. Contracts are validated when the index is built.
  • The CLI and the web share the index. marketplace:search and feature:info read the local copy in .splent_cache/marketplace/index.json when it exists. SPLENT_INDEX_URL is fetched only when that copy is missing or with --refresh, and a successful fetch becomes the new copy. The published build is at https://git.splent.io/splent-io/splent_index/raw/branch/main/index.json.

What the index contains

For each It holds
Feature The full contract (provides, requires, extensible, docker), the derived archetype, description, category, tags, the latest git tag, PyPI presence, reverse dependencies (used_by) and the source repository
SPL The DOI and the parsed UVL (mandatory and optional features, alternative groups, constraints)
Index The collisions, features that provide the same route, service or model and can only coexist behind an alternative group

Commands

Command Purpose
marketplace:index Build index.json from forge organisations, a registry file or the workspace (--local)
marketplace:search Search the index, or list a forge organisation live
login Log in to a marketplace and store the token per registry
whoami Show the identity, scopes, expiry and which credential is in use
logout Revoke the token on the server and remove it locally
feature:search Alias of marketplace:search
feature:info Show a feature’s contract without cloning it
check:contracts Check that contracts and the UVL constraints agree on dependencies

login, whoami and logout carry no namespace, like docker login.

Which marketplace

Variable Effect
SPLENT_MARKETPLACE_URL The registry to talk to, https://marketplace.splent.io by default. login, whoami and logout also take --registry URL. The --registry of marketplace:index is something else, the path of a registry.toml
SPLENT_MARKETPLACE_TOKEN A token from the environment. It wins over the stored one, which suits CI
SPLENT_CREDENTIALS The path of the credential store. See where the token is stored

Credentials are kept per registry, so a production marketplace and a local one coexist. A local marketplace answers at http://splent_marketplace_app_web:5000 from inside splent_cli_container and at http://localhost:5818 from the host.


Table of contents


Back to top

splent. Distributed by an LGPL license v3. Contact us: drorganvidez@us.es