Skip to content

ci: hash-pin the release path - #168

Merged
imran-siddique merged 1 commit into
mainfrom
ci/hash-pinned-release-path
Sep 7, 2026
Merged

ci: hash-pin the release path#168
imran-siddique merged 1 commit into
mainfrom
ci/hash-pinned-release-path

Conversation

@imran-siddique

Copy link
Copy Markdown
Member

Correcting myself. When I finished the pinning track I said integrations' installs "track latest releases on purpose" and left the repo alone. That was too broad — most of these lines carry exact version pins already, and only a few are genuinely floating. The release path is not among them.

What this pins

Three locks, covering the jobs that build and upload to PyPI and the one that verifies the published artifact's attestations:

Lock Used by
release.txt capture-core-publish, trace-adapters-publishbuild + twine
provenance.txt trace-adapters-verify-provenancepypi-attestations
smoke.txt the post-publish smoke tests — pytest, agentrust-trace-tests

pip install build twine in a job that holds publishing credentials is the most consequential unpinned resolution in this repo, which is why it goes first.

What stays unpinned, on purpose

The wheels under test. A smoke test exists to exercise what was just built, and the provenance job exists to check the version that was actually released. Pinning either would defeat the check it performs.

What changes is the ordering: the harness installs first with --require-hashes, then the subject goes in with --no-deps, so the thing being tested cannot drag an unpinned dependency in behind it.

# The wheel under test is deliberately unpinned; the runner is not.
/tmp/smoke/bin/pip install --quiet --require-hashes -r requirements/smoke.txt
/tmp/smoke/bin/pip install --quiet --no-deps packages/agentrust-trace-adapters/dist/*.whl

Verification

Clean venvs for each lock: all three install under --require-hashes, the smoke venv has pytest 9.1.1 and the trace-tests CLI on PATH, and build and twine import. actionlint clean.

Not in this PR

The per-integration conformance jobs (google-adk, langchain, openai-agents, pydantic-ai and the rest) are a larger job with one lock per framework. Worth doing, but as its own change rather than buried in this one.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XbDBXDWWvMFa7c2jGgyq9t

I said earlier that integrations' installs track latest releases on
purpose and left the whole repo alone. That was too broad. Most of these
lines carry exact version pins already; only a few are deliberately
floating, and the release path is not among them.

Three locks, covering the jobs that build and upload to PyPI and the one
that verifies the published artifact's attestations. Those are the most
consequential unpinned resolutions in the repo: capture-core-publish and
trace-adapters-publish fetch build and twine into a job holding
publishing credentials.

The wheels under test stay unpinned, deliberately. A smoke test exists to
exercise what was just built, and the provenance job exists to check the
version that was actually released, so pinning either would defeat the
check. What moves into locks is the harness around them: pytest,
agentrust-trace-tests, and the attestation verifier. Those install first
with --require-hashes, then the subject goes in with --no-deps so it
cannot drag an unpinned dependency behind it.

Verified in clean venvs: all three locks install under --require-hashes,
the smoke venv has pytest 9.1.1 and the trace-tests CLI, and build and
twine import.

The remaining pip installs in this repo are the per-integration
conformance jobs. Those are a larger job and a separate change.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbDBXDWWvMFa7c2jGgyq9t
@imran-siddique
imran-siddique merged commit 1e19c9d into main Sep 7, 2026
11 checks passed
@imran-siddique
imran-siddique deleted the ci/hash-pinned-release-path branch September 7, 2026 05:12
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