Skip to content

ci: align PyPI with internal feed, add public-PyPI lever, clearer labels#141

Open
eduard-dumitru wants to merge 1 commit into
masterfrom
feat/pypi-prerelease-publishing
Open

ci: align PyPI with internal feed, add public-PyPI lever, clearer labels#141
eduard-dumitru wants to merge 1 commit into
masterfrom
feat/pypi-prerelease-publishing

Conversation

@eduard-dumitru

Copy link
Copy Markdown
Collaborator

What

Three release-plumbing fixes on the coreipc publish pipeline + the PyPI workflow.

  1. Prereleases, not stripped releases. stamp-python-version.py maps a CI build's SemVer suffix to a PEP 440 dev prerelease (2.5.3-20260724-012.5.3.dev2026072401) instead of a local (+) segment. A +local version is PyPI-illegal and reads as a FINAL release, so a dev build used to land on public PyPI stripped to a clean release. cd.yml now publishes the exact version CI built (release or .devN), so public PyPI matches the internal feed.
  2. Internal-only lever. New publishToPublicPyPI parameter (default off) gates the public whisper, separate from publishPython (internal feed) — so you can publish Python internally without touching public PyPI. Public PyPI stays master-only.
  3. Clearer labels. Renamed the misleading publishPyPI param / Publish_PyPI stage (which only ever published to UiPath-Internal) → publishPython / Publish_Python; the public path is the new Publish_PublicPyPI stage.

Also: the public-publish gate now ends yellow (SucceededWithIssues), not green, when the version already exists on PyPI — a clear at-most-once signal without failing the run.

Heads-up (downstream)

Internal-feed dev builds are now PEP 440 prereleases (.devN), where they were +local (which pip/uv treat as final). Consumers pulling dev builds of uipath-ipc from UiPath-Internal (e.g. uipath-python's uipath-ipc>=2.5.1) will no longer auto-pick a dev build — prereleases are excluded by default; they must allow prereleases or pin the exact .devN. Already-published +local versions on the feed are unaffected; only new builds change.

.devN sorts before its base release, so bump the csproj <Version> right after cutting a release (standard open-development practice).

Merge order

Merge the 2.5.3 bump PR first, then rebase this onto master (no file overlap, so it's clean either way).

Files

  • src/CI/stamp-python-version.py+local.devN
  • src/CI/azp-publish.yaml — lever, labels, exact-version whisper, yellow-on-existing
  • .github/workflows/cd.yml — publish the ADO-passed version (prereleases allowed)

🤖 Generated with Claude Code

…abels

Three coreipc release-plumbing fixes:

1. Prereleases, not stripped releases. stamp-python-version.py now maps a CI
   build's SemVer suffix to a PEP 440 DEV prerelease (2.5.3-20260724-01 ->
   2.5.3.dev2026072401) instead of a local (+) segment. Local segments are
   PyPI-illegal AND read as a FINAL release, so a dev build used to land on
   public PyPI stripped to a clean release. cd.yml now publishes the EXACT
   version ADO built (release or .devN), so public PyPI matches the internal
   feed.

2. A lever to publish Python internally without touching public PyPI. New
   publishToPublicPyPI parameter (default off) gates the public whisper,
   separate from publishPython (internal feed). Public PyPI stays master-only.

3. Clearer labels. Renamed the misleading publishPyPI param / Publish_PyPI
   stage (which only ever published to UiPath-Internal) to publishPython /
   Publish_Python; the public path is the new Publish_PublicPyPI stage.

Also: the public-publish gate ends YELLOW (SucceededWithIssues), not green,
when the version is already on PyPI — a clear at-most-once signal without
failing the run.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant