{% extends "public_base.html" %}
{% import "marketplace/_macros.html" as mk %}
{% block title %}{{ _("Publish your feature") }}{% endblock %}
{% block hero %}
{{ _("There is no upload button, and that is the point. Releasing a tag in your own repository is publishing, and the marketplace index is rebuilt from your feature's contract.") }}{{ _("Publish your feature") }}
{{ _("Scaffold it in your SPLENT workspace. The contract (what it provides and what it requires) is inferred from the code and kept in the feature's own pyproject.toml. You never write index data by hand.") }}
splent feature:create my_feature
{{ _("One command bumps the version, regenerates the contract, tags the repository and uploads to PyPI. The Git tag IS the publication. There is no separate submission step.") }}
splent feature:release
{{ _("Open a pull request adding your organisation or repository on %(forge)s to the registry file of the index. Once reviewed and merged, the indexer reads your released tags. You never push data into the marketplace.", forge=forge) }}
{{ _("The index rebuilds automatically from the latest released tags. Your feature appears here with its contract, dependencies and collisions. To fix or update anything, just release again.") }}
{{ _("Browse the catalog") }}{{ mk.trailing_icon("arrow-right") }}
{{ _("A product line is a UVL model over published features. It goes through this marketplace, which deposits the model on UVLHub and records its DOI, so you need an account here. Sign in once from the CLI, then publish the line from your workspace.") }}
splent login
splent spl:publish my_spl
{{ _("Publishing the line again records a new version under the same DOI. You never hold a UVLHub key.") }}
{% if account_url %}{% if account_is_signup %}{{ _("Create an account") }}{% else %}{{ _("Log in") }}{% endif %}{{ mk.trailing_icon("arrow-right") }}{% endif %} {{ _("See the product lines") }}{{ mk.trailing_icon("arrow-right") }}