Skip to content

STAC-25544: move vsphere to the publicly-published VMware SDK - #368

Merged
LouisParkin merged 2 commits into
STAC-25531-docker-suitesfrom
STAC-25544-public-vmware-sdk
Aug 6, 2026
Merged

STAC-25544: move vsphere to the publicly-published VMware SDK#368
LouisParkin merged 2 commits into
STAC-25531-docker-suitesfrom
STAC-25544-public-vmware-sdk

Conversation

@LouisParkin

Copy link
Copy Markdown
Contributor

vsphere pinned vsphere-automation-sdk==1.82.0, which VMware never published to public PyPI — the name is squatted there by an unrelated 0.0.1 placeholder — so it was mirrored into the private GitLab package registry and pulled with a credential.

That credential could not be held safely on a public repo. A pull_request run executes the PR's own copy of the workflow and every script it calls, so a run holding a secret can always be made to disclose it. The only sound answer was to withhold it, which meant vsphere never ran on pull requests and was verified only after merge.

VMware publishes the same SDK to public PyPI under renamed packages, actively maintained (all 9.1.0.0, May 2026): pyvmomi, vmware-vcenter, vmware-vapi-runtime, vmware-vapi-common-client. Between them they satisfy every import the check makes — pyVmomi/pyVim, vmware.vapi.* and com.vmware.*.

So the pin, the credential, the separate job and the coverage gap all go together. fetch_private_wheels.sh, PRIVATE_INDEX_CHECKS, and check-tests-private-index are deleted; vsphere joins the ordinary matrix and runs on PRs like everything else.

No job in this workflow now has a secret in scope — a much simpler property to maintain than any arrangement that held one.

Verified: the four pins resolve from public PyPI alone, and the full vsphere suite passes against them (58 passed). actionlint, shellcheck, Zizmor clean.

Stacked on #367. Once this merges, the GITLAB_PACKAGE_REGISTRY_* grants can come off this repo in pulumi-infra.

LouisParkin and others added 2 commits August 6, 2026 16:31
vsphere pinned `vsphere-automation-sdk==1.82.0`, which VMware never published
to public PyPI -- the name is squatted there by an unrelated 0.0.1 placeholder
-- so it was mirrored into the private GitLab package registry and pulled with
a credential.

That credential could not be held safely. A `pull_request` run executes the
pull request's own copy of the workflow and of every script it calls, so a run
holding a secret can always be made to disclose it. The only sound answer was
to withhold it, which meant vsphere did not run on pull requests at all and
was verified only after merge -- a real coverage gap, accepted at the time
because the alternatives cost more.

VMware publishes the same SDK to public PyPI under renamed packages, actively
maintained: pyvmomi, vmware-vcenter, vmware-vapi-runtime and
vmware-vapi-common-client, all at 9.1.0.0. Between them they satisfy every
import the check makes -- pyVmomi/pyVim, vmware.vapi.* and com.vmware.* alike.

So the pin, the credential, the separate job and the coverage gap all go
together:

  - requirements.in names the four public packages
  - fetch_private_wheels.sh is deleted
  - PRIVATE_INDEX_CHECKS, is_private_index() and the private/deferred selector
    outputs are gone; the selector now emits `checks` and `docker_checks`
  - check-tests-private-index is removed and vsphere joins the ordinary matrix,
    so it runs on pull requests like every other suite
  - ci-success loses the private-index arm and the deferral notice
  - vsphere/tox.ini no longer documents a wheelhouse that does not exist

No job in this workflow now has a secret in scope, which is a stronger and much
simpler property to maintain than any arrangement that held one.

Verified: the four pins resolve from public PyPI alone, and the full vsphere
suite passes against them -- 58 passed. actionlint, shellcheck and Zizmor clean.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
`checksdev validate dep` cross-checks every pin in a check's requirements.in
against agent_requirements.in, the manifest of what the agent embeds. That
file still listed vsphere-automation-sdk, so the four replacement packages
were reported missing from the embedded environment.

Replace the single old entry with the four public ones. Verified locally:
`checksdev validate dep` exits 0, as do config, manifest, metadata and
service-checks.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@LouisParkin

Copy link
Copy Markdown
Contributor Author

Green on run 31111900999.

The one that matters: Check tests (vsphere) ran and passed on a pull request, in the ordinary matrix, with no credential anywhere in the run. That is the coverage gap closing — until now vsphere was only ever verified after merge.

One fix on the way: checksdev validate dep cross-checks each suite's pins against agent_requirements.in, the manifest of what the agent embeds, which still named the old SDK. The four public packages replace that single entry there too.

@LouisParkin
LouisParkin requested a review from LouisLotter August 6, 2026 14:44
@LouisParkin
LouisParkin merged commit 20d74ec into STAC-25531-docker-suites Aug 6, 2026
25 checks passed
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