spl:publish

Publish the local UVL model of an SPL through the marketplace, and record the DOI it reports.


Table of contents

  1. Usage
  2. Options
  3. You do not need a UVLHub key
  4. What happens on the other side
  5. Where the model is read from
  6. What it writes locally
  7. Publishing does not move any product
  8. Example
  9. When it refuses
  10. See also

Usage

splent spl:publish <spl_name> [--registry URL] [--dry-run]

Requires detached mode. The model belongs to the workspace, not to a product.


Options

Option Description
--registry URL Marketplace to publish to. Defaults to SPLENT_MARKETPLACE_URL, then https://marketplace.splent.io.
--dry-run Show what would be done without touching the network or metadata.toml.

You do not need a UVLHub key

developer --(splent CLI, bearer token)--> MARKETPLACE --(one key)--> UVLHub

You authenticate to the marketplace with the token splent login stored, send the .uvl, and get back the DOI the marketplace recorded. The marketplace holds one UVLHub key for everybody. You never hold one and never need to know UVLHub is on the other side.

This command used to talk to UVLHub directly and asked every developer for their own UVLHUB_API_KEY with the write_dataset scope. That is gone. If you have that variable set from an older workspace, nothing reads it any more.

Downloading is unaffected and still needs no account at all. spl:fetch reads a published model straight from UVLHub by DOI, and UVLHUB_URL still points those reads at another instance.


What happens on the other side

Everything that used to happen locally now happens on the server, on its key. The command finds the local model, sends it, and reports what came back.

The marketplace sees What it does
A line it has never seen Creates a new dataset and mints a DOI
A line it knows Publishes a new version of the DOI it already holds
Bytes it has already published Answers with that DOI instead of minting a second one, reported as idempotent

It also verifies the published file byte for byte against what was sent, and reports the outcome as match, mismatch, pending, unknown or imported. The command prints that verdict in plain words on a Checked line.


Where the model is read from

Best first, and the first hit wins.

  1. The working copy, splent_spl_<name>/<spl>.uvl. This is what you edit, so this is what gets published.
  2. The cache, .splent_cache/spls/<spl>@<version or DOI>/<spl>.uvl. Republishing something you only ever consumed is unusual but not wrong, and it is what lets a machine that never authored the model push a fix.

When neither exists the command lists every path it looked in and stops.


What it writes locally

Only the working copy’s metadata.toml, and only under [spl.uvl].

  • doi and file always, file being the name the server reports, which is not always the local one.
  • concept_doi and version when the marketplace reports them. Empty values are skipped rather than written blank, so a server that says nothing about the concept DOI never erases one already recorded.

The edit is text level, so comments and formatting survive. It is backed by a .bak copy, written atomically, then re-parsed to confirm the values landed. On any failure the original file is restored, so metadata.toml is never left half written.

The cache is never written to. A DOI recorded there would be lost the moment the cache is cleared.

If there is no working copy, nothing local records the DOI, and the command says so. Products that derive from the line need it in their own pyproject.toml under [tool.splent.spl_model].


Publishing does not move any product

A new DOI is minted, and every product carries on deriving from the version it pins. The command finishes by naming them.

  Products pinning this model, none of them updated here:
    innosoft_app  v2
    diversolab_app  v2
  Move one forward with: splent spl:pin cms_spl

That is the difference between a DOI that was minted and a DOI that is in use. See spl:pin and spl:outdated.


Example

splent spl:publish cms_spl

  Publishing cms_spl to https://marketplace.splent.io

  DOI         10.5281/zenodo.21610307
  Concept DOI 10.5281/zenodo.21610306
  Version     v3
  File        cms_spl.uvl
  Checked     the published file matches the model that was sent
  Recorded    /workspace/splent_spl_cms/metadata.toml

  'cms_spl' published (DOI 10.5281/zenodo.21610307).

Use --dry-run first to see the model it picked, the registry it resolved and whether you are logged in. It touches neither the network nor metadata.toml.


When it refuses

Situation What happens
No local model Every candidate path is listed, plus how to create or fetch one
Not logged in Refuses before sending anything and points at splent login
Token expired or revoked Reported, and the stored credential is dropped so the next run says “not logged in”. A token from SPLENT_MARKETPLACE_TOKEN is reported instead, since the CLI does not manage it
Publishing switched off on that marketplace Reported apart from a server error. Nothing is broken and retrying will not help
Accepted but no DOI reported Treated as a failure, because nothing usable came back

See also

  • login. Required before publishing
  • spl:fetch. The reverse direction, by DOI, no account
  • spl:pin. Move a product onto the new model
  • spl:outdated. Which products fell behind

Back to top

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