Repository navigation
ci: test each new framework release in isolation against the PR lock - #1100
Merged
Merged
Conversation
framework-release-watch.yml runs daily (and on dispatch, optionally for one package). scripts/check_framework_releases.py lists every framework extra's direct requirement whose newest stable PyPI release is ahead of its adapter-contract lock pin; each release is then installed with only that pin moved (or unconstrained, "needs co-bump") and run through the adapter-contract checks. The alert job keeps one framework-release issue per release and closes it once the lock catches up. PRs that change the workflow or script get a dry run into the job summary. Closes #1066 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tommasobolis
enabled auto-merge (squash)
October 12, 2026 09:18
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1066
Part of #1065 (Phase 1.3). The scheduled run watches
develop's lock (ADR 0007 rules 3–4, §8.4).Summary
python/scripts/check_framework_releases.py(stdlib only; reusesfetch_project/canonicalizefromcheck_new_dependencies.py):adapter-contract-<extra>-py3.12.txtlock, and lists the ones whose newest stable PyPI release is ahead of the lock pin.major,minororpatch.--jsonemits the workflow matrix, or[]when nothing is new.--packagelimits the check to one package.--constraints-for PKG==VER --extra EXTRA --out PATHwrites the lock with only that one pin moved.--record-resultwrites a test leg'sresult.json: the outcome of each check, and any other locked packages that moved.--plan-issuesplans the issue create, edit, comment and close actions and prints them as Markdown for the job summary..github/workflows/framework-release-watch.yml:packageinput), and as a dry run on PRs that change the workflow or the script.detectlists the new releases.evaluateruns one leg per release (fail-fast: false, 30 min).adapter-contractinstall line from the lock with one pin moved. If that doesn't resolve, it installs the release unconstrained and marks it "needs co-bump".verify_frameworks.py --require-installed --json, the whole suite with the skip guard armed, andsmoke_example.py, allcontinue-on-error.alertruns onalways()and is the only job that writes (issues: write). It opens or updates one issue per release,framework-release: <pkg> <locked> → <latest>, labelledframework-releaseanddependencies.docs/ci.mdsection, a signals-table row and the workflow added to convention 4's list. CONTRIBUTING.md's lock-refresh step namesframework-releaseissues as a trigger.Changes from the issue's spec
.[llm,local,$EXTRA]plus the dev group, exactly what theadapter-contractjob installs and the line the lock was compiled for, so everything except the bumped package stays pinned. Withoteladded, the otel packages would install unpinned.pip install --dry-runagainst the rewritten lock to choose between a locked install and "needs co-bump".--stale-issuesoption:--plan-issuesreplaces it and plans every issue write.--constraints-foralso needs--extra, because a package can be pinned in more than one lock.framework-release-watch-failureissue. Thedependencieslabel is created only if it doesn't exist yet, so its colour is never overwritten.Test plan
nox -s typecheck-and-lint test-3.11 new-dependencies commit-identities workflow-lint docs-llms-drift(actionlint and zizmor are clean)tests/unit/test_check_framework_releases.py(45 tests, fake PyPI lookup). It covers:ADAPTERS× each extra's direct requirementstest_ci_workflows.pyregisters the workflow and checks that onlyalerthas write access and that a PR run writes nothing.test_workflow_bounds.pycovers it automatically.alertjob summary.ADR needed?
Post-deploy steps
After merge to
develop:gh workflow run framework-release-watch.yml --ref develop -f package=crewaishould create oneframework-release: crewai 1.15.23 → 1.15.27issue.🤖 Generated with Claude Code