Skip to main content

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.

来源信息

仓库
Azure/azure-sdk-for-python
最近来源活动
2026年4月10日 22:10
检测到的 SKILL.md 语言
英语
星标
5,587
分支
3,348

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
next-version-update
description
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.
<!-- cspell:words pylintrc vnext --> # Next Version Update 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. ## Overview 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](https://github.com/Azure/azure-sdk-tools) and [Microsoft/TypeSpec](https://github.com/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` constant - `eng/tools/azure-sdk-tools/azpysdk/mypy.py` – `MYPY_VERSION` constant - `eng/tools/azure-sdk-tools/azpysdk/pyright.py` – `PYRIGHT_VERSION` constant - `pylintrc` – root pylintrc used by the current pylint version - `eng/pylintrc` – pylintrc used by the `next-pylint` job (update for new next version) - `doc/analyze_check_versions.md` – version table documentation Files updated in **azure-sdk-tools** (separate PR): - `tools/apiview/parsers/python/apistubgen/pylintrc` – pylintrc for apiview stub generator - `tools/apiview/parsers/python/apistubgen/requirements.txt` – pylint version pin for apiview stub generator Files 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 emitters - Any Python-based tooling configuration files that reference pylint or mypy versions ## Prerequisites Verify the following before running: ```bash # Check Python is available python --version # Check pip is available pip --version # Check GitHub CLI gh --version ``` ## Workflow ### 1. Verify Next-Version CI Is Passing 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): - **Run Pylint Next** (uses `azpysdk next-pylint`) - **Run MyPy Next** (uses `azpysdk next-mypy`) - **Run Pyright Next** (uses `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. ### 2. Read Current Next Versions Read the current next-* versions from `doc/analyze_check_versions.md`: ```bash 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. ### 3. Determine New Next Versions Look up the latest available versions on PyPI to set as the new next-* targets: ```bash # 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: ```bash pip install pylint== 2>&1 | grep "from versions" pip install mypy== 2>&1 | grep "from versions" pip install pyright== 2>&1 | grep "from versions" ``` ### 4. Prepare Repository Reset and sync the SDK repo to a clean state: ```bash git reset HEAD && git checkout . && git clean -fd && git checkout origin/main && git pull origin main ``` ### 5. Create Feature Branch ```bash git checkout -b bump-next-versions-{YYYYMMDD} ``` Replace `{YYYYMMDD}` with today's date (e.g., `bump-next-versions-20260420`). ### 6. Update `azpysdk` Python Constants Update the version constants used by the azpysdk CLI: In `eng/tools/azure-sdk-tools/azpysdk/pylint.py`: ```python PYLINT_VERSION = "{OLD_NEXT_PYLINT_VERSION}" ``` In `eng/tools/azure-sdk-tools/azpysdk/mypy.py`: ```python MYPY_VERSION = "{OLD_NEXT_MYPY_VERSION}" ``` In `eng/tools/azure-sdk-tools/azpysdk/pyright.py`: ```python PYRIGHT_VERSION = "{OLD_NEXT_PYRIGHT_VERSION}" ``` ### 7. Update `pylintrc` Files When 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:** 1. Check the pylint changelog for new/renamed rules that affect the codebase. 2. Update `pylintrc` (root) by copying the content from `eng/pylintrc`: ```bash cp eng/pylintrc pylintrc ``` 3. Update `eng/pylintrc` for the new next-pylint version: - Add any new rules that need to be disabled for the next version. - Refer to pylint's changelog: `https://pylint.readthedocs.io/en/stable/whatsnew/` **For a minor/patch version bump:** Typically no pylintrc changes are needed, but verify by running: ```bash cd sdk/core/corehttp azpysdk next-pylint . ``` ### 8. Update `doc/analyze_check_versions.md` Update the version table to reflect the new pinned versions and next targets: ```markdown | 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**. ### 9. Update `eng/apiview_reqs.txt` Update 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 . > ``` ### 10. Commit Changes in azure-sdk-for-python ```bash 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}" ``` ### 11. Create Pull Request in azure-sdk-for-python Push branch and create PR: ```bash 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" ``` ### 12. Update azure-sdk-tools Repository (Separate PR) > **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](https://github.com/Azure/azure-sdk-tools) repository: 1. Clone azure-sdk-tools and create a feature branch: ```bash cd /path/to/azure-sdk-tools git checkout -b bump-apiview-pylint-{OLD_NEXT_PYLINT_VERSION} ``` 2. Update the pylint version in the apiview stub generator requirements: - File: `tools/apiview/parsers/python/apistubgen/requirements.txt` - Change `pylint=={OLD_PYLINT_VERSION}` → `pylint=={OLD_NEXT_PYLINT_VERSION}` 3. Update the pylintrc for the apiview stub generator if needed: - File: `tools/apiview/parsers/python/apistubgen/pylintrc` - Add any new disable entries needed for the new pylint major version. 4. Run the apiview tests to verify: ```bash cd tools/apiview/parsers/python pip install -e . && pytest tests/ ``` 5. Commit and create PR: ```bash 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}." ``` ### 13. Update Microsoft/TypeSpec Repository (Separate PR) > **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](https://github.com/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. 1. Fork and clone the TypeSpec repository (if not already done): ```bash gh repo fork microsoft/typespec --clone cd typespec ``` 2. Install Rush (TypeSpec uses Rush for monorepo management): ```bash npm install -g @microsoft/rush ``` 3. Create a feature branch that names all tools being updated: ```bash # 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} ``` 4. Find all files that reference the tool versions and update them: **For pyright** (used across the TypeScript monorepo): ```bash # 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): ```bash # 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): ```bash # 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}`. 5. Run Rush update to regenerate the lockfile: ```bash rush update ``` 6. Run Rush build to verify the update doesn't break anything: ```bash rush build ``` 7. Run the type-checking and lint checks to confirm there are no new errors: ```bash rush check-format rush lint ``` 8. Commit and push the changes: ```bash 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} ``` 9. Create the pull request, following the TypeSpec PR template: ```bash 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}
在 GitHub 查看
这个 SKILL.md 很大,SkillsMP 这里只预览前一段内容。 在 GitHub 查看