release:resume

Table of contents

  1. Introduction
  2. How it finishes a release
  3. Choosing what to resume
  4. Leaving a channel alone
  5. Resuming from a checkout in development
  6. Resuming in CI
  7. Finishing a product image
  8. Advanced
    1. What each step needs
    2. When it cannot finish
  9. Reference
  10. Requirements
  11. See also

Introduction

release:resume finishes a release that reached some channels and not others, without bumping the version. It reads the version in pyproject.toml, asks each channel what it lacks, and publishes only that. Run it when a release prints The channels have DIVERGED.

splent release:resume splent_feature_notes
  Resuming splent-io/splent_feature_notes v1.4.0
  The version is read from pyproject.toml and is never bumped here.

  Release gate (channels)
  forge    ready, v1.4.0 is tagged on splent-io/splent_feature_notes, release missing
  pypi     ready, credentials accepted, splent_feature_notes exists so this is a new version

  Missing
    - build and upload splent_feature_notes 1.4.0 to PyPI
    - create the release for v1.4.0 on the forge

  Publish what is missing? [Y/n]

How it finishes a release

How release:resume finishes a release Read the version pyproject.toml, never bumped Ask every channel the gate, what is missing Missing list confirm, or pass --yes ONLY WHAT IS MISSING, IN ORDER Push commit to the branch Upload to PyPI built from the tag Push tag to the forge Forge release for the tag Docker image HEAD at the tag Snapshot features only A blocked channel skips its own steps. The other channels still finish.
Each step runs only when its channel lacks it, and your checkout is never moved.

A blocked channel never stops another, so a rejected forge token does not stop the PyPI upload. Your checkout never moves either. When HEAD is not at the tag, the package is built from a temporary worktree of the tag.


Choosing what to resume

splent release:resume product:my_first_app
Target Resumes
cli or splent_cli splent_cli
framework or splent_framework splent_framework
product The selected product
product:<name> That product directory, whatever is selected. product:release prints this form
A feature reference splent_feature_notes or splent-io/splent_feature_notes, as in feature:release

Leaving a channel alone

splent release:resume splent_feature_notes --no-pypi

--no-pypi, --no-forge and --no-docker leave that channel untouched. The command a release prints already carries its flags. With --no-pypi the version stays unfinished until you upload it.


Resuming from a checkout in development

When only your checkout has editable features, the command works from what HEAD holds, as product:release does.


Resuming in CI

splent release:resume splent_feature_notes --yes --wait

--yes skips the question. --wait waits however long PyPI’s new-project limit asks, which is checked before anything is built or pushed.


Finishing a product image

    docker   not built, HEAD is not at v1.0.4

The image is built from your checkout, as product:build does, and goes to the registries product:release uses. Check out the tag with a clean tree, run the command again, then switch back.


Advanced

What each step needs

Step Runs when
Push the release commit The tag is not on the forge and the branch lacks its commit. Only a fast-forward
Upload to PyPI The version is not on PyPI
Push the tag The tag is not on the forge
Create the forge release The tag has no release
Build and push the image A registry lacks <image>:<version>
Create the local snapshot A feature’s .splent_cache snapshot is missing and the tag is on the forge

When it cannot finish

What is stuck is listed under Cannot be finished in this run. The rest is published and the command exits 1.

Message What to do
origin/main and the commit vX.Y.Z describes have diverged Reconcile the branch
not built, vX.Y.Z is on the forge but not in this checkout git fetch origin tag vX.Y.Z
the working tree has uncommitted changes Commit or stash
no channel can be reached Fix the credentials the gate names
... did not answer within 10 minutes Check the network

Then run the command again.


Reference

Option Description
--yes Publish what is missing without asking
--no-pypi Leave PyPI alone
--no-forge Leave the forge alone
--no-docker Products only. Do not build or push the image
--wait Wait for PyPI’s new-project limit however long it takes

It exits 0 when every channel has the version.


Requirements

  • The version in [project].version, and an origin remote.
  • For the product target, a selected product (SPLENT_APP).

See also


Back to top

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