azure/next-version-update
Automate promoting next-* tool versions (pylint, mypy, pyright) to become the current pinned versions in azure-sdk-for-python. Use this skill when the weekly next-* CI checks are passing and you want to update the pinned tool versions for all packages.
npx skills add https://github.com/Azure/azure-sdk-for-python --skill next-version-update
<!-- cspell:words pylintrc vnext -->
Promote next-* tool versions (pylint, mypy, pyright) to become the current pinned versions, update all relevant configuration files, and set new next-* targets for tracking upcoming releases.
The repository pins specific versions of pylint, mypy, and pyright and runs weekly next-* jobs to proactively detect compatibility issues with upcoming versions. When CI confirms the next-* versions are clean, this skill promotes them to become the current pinned versions.
> Required cross-repo check (do not skip): After updating azure-sdk-for-python, you must also check whether matching updates are required in both azure-sdk-tools and Microsoft/TypeSpec. Treat the version bump as complete only after those repositories are reviewed and, when needed, PRs are opened.
Files updated in azure-sdk-for-python:
eng/tools/azure-sdk-tools/azpysdk/pylint.py – PYLINT_VERSION constanteng/tools/azure-sdk-tools/azpysdk/mypy.py – MYPY_VERSION constanteng/tools/azure-sdk-tools/azpysdk/pyright.py – PYRIGHT_VERSION constantpylintrc – root pylintrc used by the current pylint versioneng/pylintrc – pylintrc used by the next-pylint job (update for new next version)doc/analyze_check_versions.md – version table documentationFiles updated in azure-sdk-tools (separate PR):
tools/apiview/parsers/python/apistubgen/pylintrc – pylintrc for apiview stub generatortools/apiview/parsers/python/apistubgen/requirements.txt – pylint version pin for apiview stub generatorFiles updated in Microsoft/TypeSpec (separate PR, for any pylint/mypy/pyright version update):
packages/compiler/package.json or emitter-specific package.json – pyright version pin used by the TypeSpec compiler and emittersVerify the following before running:
# Check Python is available
python --version
# Check pip is available
pip --version
# Check GitHub CLI
gh --version
Before promoting, confirm the next-* weekly analyze jobs have passed for the http-client-python (in Microsoft/TypeSpec repo) service and other core (azure-sdk-for-python azure-core/corehttp/azure-mgmt-core) packages.
Check the Azure DevOps pipeline named "python - corehttp - tests-weekly" or similar weekly analyze pipelines. All three of the following jobs must pass (or only have pre-existing failures that are tracked):
azpysdk next-pylint)azpysdk next-mypy)azpysdk next-pyright)Also verify via GitHub issues: the vnext issue creator creates/closes issues per-package. Check that there are no open next-pylint, next-mypy, or next-pyright issues for the core packages.
Read the current next-* versions from doc/analyze_check_versions.md:
grep -E "VERSION" eng/tools/azure-sdk-tools/azpysdk/pylint.py eng/tools/azure-sdk-tools/azpysdk/mypy.py eng/tools/azure-sdk-tools/azpysdk/pyright.py
Note the Next Version values for pylint, mypy, and pyright. These are the versions being promoted to current.
Look up the latest available versions on PyPI to set as the new next-* targets:
# Get latest pylint version
pip index versions pylint 2>/dev/null | head -1
# Get latest mypy version
pip index versions mypy 2>/dev/null | head -1
# Get latest pyright version
pip index versions pyright 2>/dev/null | head -1
If pip index is unavailable, use:
pip install pylint== 2>&1 | grep "from versions"
pip install mypy== 2>&1 | grep "from versions"
pip install pyright== 2>&1 | grep "from versions"
Reset and sync the SDK repo to a clean state:
git reset HEAD && git checkout . && git clean -fd && git checkout origin/main && git pull origin main
git checkout -b bump-next-versions-{YYYYMMDD}
Replace {YYYYMMDD} with today's date (e.g., bump-next-versions-20260420).
azpysdk Python ConstantsUpdate the version constants used by the azpysdk CLI:
In eng/tools/azure-sdk-tools/azpysdk/pylint.py:
PYLINT_VERSION = "{OLD_NEXT_PYLINT_VERSION}"
In eng/tools/azure-sdk-tools/azpysdk/mypy.py:
MYPY_VERSION = "{OLD_NEXT_MYPY_VERSION}"
In eng/tools/azure-sdk-tools/azpysdk/pyright.py:
PYRIGHT_VERSION = "{OLD_NEXT_PYRIGHT_VERSION}"
pylintrc FilesWhen pylint's version changes, the root pylintrc and eng/pylintrc may need to be updated to disable new warnings or enable newly-available rules.
For a major version bump:
pylintrc (root) by copying the content from eng/pylintrc: cp eng/pylintrc pylintrc
eng/pylintrc for the new next-pylint version:https://pylint.readthedocs.io/en/stable/whatsnew/For a minor/patch version bump: Typically no pylintrc changes are needed, but verify by running:
cd sdk/core/corehttp
azpysdk next-pylint .
doc/analyze_check_versions.mdUpdate the version table to reflect the new pinned versions and next targets:
| Tool | Current Version | Next Version | Next Version Merge Date |
|------|-----------------|--------------|-------------------------|
Pylint | {OLD_NEXT_PYLINT_VERSION} | {NEW_NEXT_PYLINT_VERSION} | {TARGET_DATE} |
MyPy | {OLD_NEXT_MYPY_VERSION} | {NEW_NEXT_MYPY_VERSION} | {TARGET_DATE} |
Pyright | {OLD_NEXT_PYRIGHT_VERSION} | {NEW_NEXT_PYRIGHT_VERSION} | {TARGET_DATE} |
The {TARGET_DATE} should be approximately 12 weeks from today (the date when the next-* versions would be merged if CI passes).
If there is no newer version available yet, use N/A for both Next Version and Next Version Merge Date.
eng/apiview_reqs.txtUpdate the pylint version used by the apiview stub generator:
pylint=={OLD_NEXT_PYLINT_VERSION}
> Note: The astroid and related packages may also need version updates to be compatible with the new pylint version. Run the apistub check locally to verify:
> `bash
> cd sdk/core/azure-core
> azpysdk apistub .
> `
git add pylintrc eng/pylintrc \
eng/tools/azure-sdk-tools/azpysdk/pylint.py \
eng/tools/azure-sdk-tools/azpysdk/mypy.py \
eng/tools/azure-sdk-tools/azpysdk/pyright.py \
doc/analyze_check_versions.md \
eng/apiview_reqs.txt
git commit -m "Promote next-* tool versions: pylint {OLD_NEXT_PYLINT_VERSION}, mypy {OLD_NEXT_MYPY_VERSION}, pyright {OLD_NEXT_PYRIGHT_VERSION}"
Push branch and create PR:
git push -u origin bump-next-versions-{YYYYMMDD}
gh pr create \
--title "Promote next-* tool versions: pylint {OLD_NEXT_PYLINT_VERSION}, mypy {OLD_NEXT_MYPY_VERSION}, pyright {OLD_NEXT_PYRIGHT_VERSION}" \
--body "Promotes the next-* versions of pylint, mypy, and pyright to the current pinned versions after verifying the weekly CI jobs pass.
## Changes
- pylint: {OLD_PYLINT_VERSION} → {OLD_NEXT_PYLINT_VERSION} (next: {NEW_NEXT_PYLINT_VERSION})
- mypy: {OLD_MYPY_VERSION} → {OLD_NEXT_MYPY_VERSION} (next: {NEW_NEXT_MYPY_VERSION})
- pyright: {OLD_PYRIGHT_VERSION} → {OLD_NEXT_PYRIGHT_VERSION} (next: {NEW_NEXT_PYRIGHT_VERSION})
## Verification
- [ ] Weekly next-pylint CI passes for http-client-python
- [ ] Weekly next-mypy CI passes for http-client-python
- [ ] Weekly next-pyright CI passes for http-client-python
- [ ] Checked **azure-sdk-tools** for matching tool-version updates; opened PR if needed
- [ ] Checked **Microsoft/TypeSpec** for matching tool-version updates; opened PR if needed"
> Required review: Always review this repo for every run of this skill. A PR is required whenever the version bump affects apiview parser dependencies/config.
For a pylint version bump, create a separate PR in the azure-sdk-tools repository:
cd /path/to/azure-sdk-tools
git checkout -b bump-apiview-pylint-{OLD_NEXT_PYLINT_VERSION}
tools/apiview/parsers/python/apistubgen/requirements.txtpylint=={OLD_PYLINT_VERSION} → pylint=={OLD_NEXT_PYLINT_VERSION}tools/apiview/parsers/python/apistubgen/pylintrc cd tools/apiview/parsers/python
pip install -e . && pytest tests/
git add tools/apiview/parsers/python/apistubgen/
git commit -m "bump apiview pylint to {OLD_NEXT_PYLINT_VERSION}"
git push -u origin bump-apiview-pylint-{OLD_NEXT_PYLINT_VERSION}
gh pr create --title "bump apiview pylint to {OLD_NEXT_PYLINT_VERSION}" \
--body "Updates the pylint version used by the apiview stub generator from {OLD_PYLINT_VERSION} to {OLD_NEXT_PYLINT_VERSION}."
> Required review: Always review this repo for every run of this skill. A PR is required whenever TypeSpec pins or tooling references the bumped versions.
For any next-* version update (pylint, mypy, or pyright), create a separate PR in the Microsoft/TypeSpec repository to keep the tool versions aligned. TypeSpec uses pyright for type-checking its TypeScript packages and may reference pylint/mypy in Python-based tooling.
> Before starting: Read the TypeSpec contribution guidelines at https://github.com/microsoft/typespec/blob/main/CONTRIBUTING.md. Key requirements include signing the Microsoft CLA, running rush update after dependency changes, and ensuring rush build passes.
gh repo fork microsoft/typespec --clone
cd typespec
npm install -g @microsoft/rush
# Example for all three tools:
git checkout -b bump-tool-versions-pylint-{OLD_NEXT_PYLINT_VERSION}-mypy-{OLD_NEXT_MYPY_VERSION}-pyright-{OLD_NEXT_PYRIGHT_VERSION}
For pyright (used across the TypeScript monorepo):
# Find package.json files that pin pyright
grep -r "\"pyright\"" --include="package.json" . | grep -v node_modules
Update each occurrence from {OLD_PYRIGHT_VERSION} → {OLD_NEXT_PYRIGHT_VERSION}.
For pylint (used in any Python tooling):
# Find requirements files or pyproject.toml files that pin pylint
grep -r "pylint==" --include="*.txt" --include="*.toml" --include="*.cfg" . | grep -v node_modules
Update each occurrence from {OLD_PYLINT_VERSION} → {OLD_NEXT_PYLINT_VERSION}.
For mypy (used in any Python tooling):
# Find requirements files or pyproject.toml files that pin mypy
grep -r "mypy==" --include="*.txt" --include="*.toml" --include="*.cfg" . | grep -v node_modules
Update each occurrence from {OLD_MYPY_VERSION} → {OLD_NEXT_MYPY_VERSION}.
rush update
rush build
rush check-format
rush lint
git add .
git commit -m "bump tool versions: pylint {OLD_NEXT_PYLINT_VERSION}, mypy {OLD_NEXT_MYPY_VERSION}, pyright {OLD_NEXT_PYRIGHT_VERSION}"
git push -u origin bump-tool-versions-pylint-{OLD_NEXT_PYLINT_VERSION}-mypy-{OLD_NEXT_MYPY_VERSION}-pyright-{OLD_NEXT_PYRIGHT_VERSION}
gh pr create \
--repo microsoft/typespec \
--title "bump tool versions: pylint {OLD_NEXT_PYLINT_VERSION}, mypy {OLD_NEXT_MYPY_VERSION}, pyright {OLD_NEXT_PYRIGHT_VERSION}" \
--body "Updates the pinned tool versions across the repo:
- pylint: {OLD_PYLINT_VERSION} → {OLD_NEXT_PYLINT_VERSION}
- mypy: {OLD_MYPY_VERSION} → {OLD_NEXT_MYPY_VERSION}
- pyright: {OLD_PYRIGHT_VERSION} → {OLD_NEXT_PYRIGHT_VERSION}
## Checklist
- [ ] I have signed the Microsoft CLA
- [ ] \`rush update\` has been run
- [ ] \`rush build\` passes
- [ ] No new type or lint errors introduced"
10. Monitor the PR CI and address any new errors that surface in TypeSpec packages.
> Note: If only some tools are pinned in the TypeSpec repo (e.g., TypeSpec may only pin pyright and not pylint/mypy), skip the steps for tools that are not referenced. Check existing issues or PRs (search for pylint, mypy, pyright in open PRs) before opening duplicates.
Take azure/next-version-update from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip, npm.
Without those the skill loads but fails at the first command.