Skip to content

Build the release in CI, publish it where Kitmaker can be reached - #39

Merged
Manushpm8 merged 5 commits into
mainfrom
portal-reachability
Oct 16, 2026
Merged

Manushpm8 merged 5 commits into
mainfrom
portal-reachability

Conversation

@Manushpm8

Copy link
Copy Markdown
Collaborator

The v1.0.0 run failed at the first Portal request with No address associated with hostname. Kitmaker's Portal resolves to an address on
NVIDIA's internal network, so a GitHub-hosted runner cannot reach it and no
credential would have changed that. The workflow could never have published.

So it no longer tries. release builds, attaches every distribution and the
SBOM to the GitHub Release, and stops. Asking Kitmaker to publish from those
asset URLs becomes a step a maintainer runs from inside the network, which is
the shape the sibling engine repository already settled on. The approval on
pypi stays, because attaching the distributions is what makes them public,
and that is now the last gate before anything is visible.

With the publish gone from CI there is no stored publishing credential and no
environment secret left in this repository, and the Portal address and project
ids are out of a public tree.

What is in here

  • publish.yml: the Kitmaker publish, the token check, the Latest promotion,
    the summary print and the checkout are gone. Nothing in release reads the
    tree any more.
  • kitmaker_release.py and its tests are deleted.
  • RELEASING.md, GOVERNANCE.md and SECURITY.md each claimed CI publishes
    to PyPI. All three now say the build is automated and the publish is not.
  • check_repo_hygiene.py gains the pattern that would have caught the Portal
    address when it was first written. The service is named in SECURITY.md on
    purpose; only the unreachable host is the problem.

Worth reviewing carefully

Removing the file does not retract the address. It has been in public
history since 75430ed, and a deletion today does not reach back. Stated here
rather than left implied.

Two behaviours change. A full re-run after the build artifact expires now
goes green while the release and dist/ hold different bytes, because the
digest comparison that used to stop it lived in the publish; the publish still
refuses. And the release is created without Latest so it cannot advertise a
version the index lacks, but with no earlier release to hold the position
GitHub reports the newest one as latest regardless, so a first release reads as
Latest from the moment it exists. Both are documented in RELEASING.md.

Checks

Hygiene 4/4, ruff clean, publish.yml parses, root suite 255 passed. The new
hygiene pattern was verified to fire on a probe file before being kept.

🤖 Generated with Claude Code

The v1.0.0 run failed at the first Portal request with "No address
associated with hostname". Kitmaker's Portal is on NVIDIA's internal
network, so a GitHub-hosted runner cannot resolve it, and no amount of
credentials would have changed that. The workflow could never have
published.

So it no longer tries. `release` builds, attaches every distribution and
the SBOM to the GitHub Release, and stops. Asking Kitmaker to publish
from those asset URLs is a step a maintainer runs from inside the
network, which is the same shape the sibling engine repository settled
on. The approval on `pypi` stays, because attaching the distributions is
what makes them public, and that is now the last gate before anything is
visible.

With the publish gone from CI there is no stored publishing credential
and no environment secret left in this repository, and the Portal
address and project ids are out of a public tree. That the removal does
not retract them is worth saying plainly: they have been in the history
since the publish landed, and a deletion today does not reach back.

The hygiene check gains the pattern that would have caught the address
when it was first written, since the service is named in SECURITY.md on
purpose and only the unreachable host is the problem.

Two behaviours change and are documented rather than left to be found.
A full re-run after the build artifact expires now goes green while the
release and `dist/` hold different bytes, because the digest comparison
that used to stop it lives in the publish; the publish still refuses.
And the release is created without Latest so it cannot advertise a
version the index lacks, but with no earlier release to hold the
position GitHub reports the newest one as latest anyway, so the first
release reads as Latest from the moment it exists.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Manush Murali <manushm@nvidia.com>
Manushpm8 and others added 4 commits October 15, 2026 17:13
The intro still described one approval covering the GitHub Release and the
PyPI upload together, and described the environment reviewers as holding the
upload. Both were true of the workflow this change replaced.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Manush Murali <manushm@nvidia.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Manush Murali <manushm@nvidia.com>
The concurrency note described two runs refusing each other's files as stale.
That refusal was in the publish script, so two runs now both succeed and the
release keeps whichever build attached first.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Manush Murali <manushm@nvidia.com>
A dispatch against a tag that was already published would have made the step
summary say the opposite of the truth. It now says only what this workflow
did, and points at RELEASING.md for who finishes the release rather than
claiming the procedure is in the tree.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Manush Murali <manushm@nvidia.com>
@Manushpm8
Manushpm8 merged commit 1998e04 into main Oct 16, 2026
17 checks passed
@Manushpm8
Manushpm8 deleted the portal-reachability branch October 16, 2026 00:30
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