Conversation
|
Warning Rate limit exceeded@ejfine has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 7 minutes and 43 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (1)
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. 📝 WalkthroughWalkthroughRenames the template/context key Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20–25 minutes Possibly related PRs
Pre-merge checks❌ Failed checks (2 warnings, 1 inconclusive)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
Fix all issues with AI Agents 🤖
In @pyproject.toml:
- Line 12: The dependency line adding "ty>=0.0.9" can pull in a release that
introduced a lint-rule rename in 0.0.8 (non-subscriptable -> not-subscriptable);
either pin or constrain the package and update any rule references: change
dependency to a pinned or bounded spec (e.g., lock to 0.0.9 or a narrow range)
in pyproject.toml and search for any usages of the old rule name
"non-subscriptable" (configs, linters, or CI) and rename them to
"not-subscriptable" so the codebase matches the ty release.
In @template/extensions/context.py.jinja-base:
- Line 50: The context variable context["pytest_reserial_version"] is defined in
template/extensions/context.py.jinja-base but never used; either add the
dependency pytest-reserial{{ pytest_reserial_version }} to the dependencies in
template/pyproject.toml.jinja-base (inside the pytest-related deps list) or
remove the context assignment to eliminate dead data; update the
pyproject.jinja-base dependencies to include the interpolated package string if
you want the package included, or delete the context["pytest_reserial_version"]
line from template/extensions/context.py.jinja-base if the package is not
needed.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
extensions/context.py (1)
14-86: Update Pulumi version to 3.214.0.Pulumi 3.214.4 does not exist—the latest available version is 3.214.0. Change
context["pulumi_version"] = ">=3.214.4"tocontext["pulumi_version"] = ">=3.214.0". The other version bumps (uv 0.9.21, FastAPI 0.128.0, Vue.js 3.5.26, pnpm 10.27.0) are valid recent releases. Note that FastAPI 0.128.0 drops pydantic v1 support, but your project already requires pydantic >=2.12.5, so the constraint is compatible.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (1)
uv.lockis excluded by!**/*.lock
📒 Files selected for processing (12)
.coderabbit.yaml.devcontainer/devcontainer.json.devcontainer/install-ci-tooling.py.pre-commit-config.yamlextensions/context.pypyproject.tomltemplate/.devcontainer/devcontainer.json.jinja-basetemplate/.github/workflows/ci.yaml.jinja-basetemplate/copier.yml.jinja-basetemplate/extensions/context.py.jinja-basetemplate/tests/copier_data/data1.yaml.jinja-basetemplate/tests/copier_data/data2.yaml.jinja-base
🧰 Additional context used
📓 Path-based instructions (1)
**/*.py
⚙️ CodeRabbit configuration file
Do not express concerns about assert statements being removed by using the -O python flag; we never use that flag. Do not express concerns about ruff rules; a pre-commit hook already runs a ruff check. Do not warn about unnecessary super().init() calls; pyright prefers those to be present.
Files:
extensions/context.py
🔇 Additional comments (18)
.pre-commit-config.yaml (1)
45-45: All pre-commit hook version bumps are valid and verified.The commit hashes have been verified against their respective repositories and all frozen version tags match correctly:
- typos: commit b31d3aa matches tag v1 ✓
- check-jsonschema: commit b035497 matches tag 0.36.0 ✓
- check-json5: commit bd47374 matches tag v1.0.1 ✓
- ruff-pre-commit: commit 5ba58ac matches tag v0.14.10 ✓
All versions are published releases. The changes follow GitHub security best practices by pinning to exact commit SHAs rather than moving refs. No issues identified.
.coderabbit.yaml (4)
2-2: Early access features enabled.The
early_access: truesetting has been added, which enables early-access features in CodeRabbit. This is valid according to the schema.
8-9: Helpful Python-specific review instructions added.The new path instructions for Python files provide clear guidance to avoid false positives around assert statements, ruff rules, and super().init() calls. This aligns well with the disabled ruff and pylint tools configuration below.
20-20: In-progress fortune messages disabled.Setting
in_progress_fortune: falsedisables the fortune messages while reviews are in progress. This is a valid configuration change.
25-25: Draft PR reviews enabled.The
drafts: truesetting underauto_reviewenables CodeRabbit to review draft PRs, which aligns with the comment on line 24 about getting early feedback. This configuration is valid and useful.template/tests/copier_data/data1.yaml.jinja-base (2)
21-21: Trailing comment added for clarity.The comment helps document the purpose of this section in the data file.
13-13: The template variabledefault_node_versionis properly defined in the template context.The variable is defined in
extensions/context.pywith the value"24.11.1"and is correctly passed to the Copier template context. No rendering errors will occur.template/.github/workflows/ci.yaml.jinja-base (1)
68-68: Node version variable renamed consistently.The change from
{{ node_version }}to{{ default_node_version }}is consistently applied across all template files. No old references remain, and the new variable is properly defined in context.py..devcontainer/install-ci-tooling.py (1)
8-8: The version 0.9.21 is confirmed to be available. GitHub shows this as the latest release, and the installer URLs are accessible (HTTP 301 redirects indicate valid endpoints). No action required.template/tests/copier_data/data2.yaml.jinja-base (1)
13-13: LGTM! Consistent with the refactoring pattern.The change from a hardcoded value to
{{ default_node_version }}aligns with the broader PR objective of centralizing the Node.js version under a single context key.template/copier.yml.jinja-base (1)
35-38: LGTM! Centralized default value.The default value for the
node_versionquestion now references{{ default_node_version }}, ensuring consistency across the template. This allows the default to be managed centrally in the context..devcontainer/devcontainer.json (2)
25-40: LGTM! Extension versions updated.Multiple VS Code extension versions have been bumped. Per the PR description, these changes were tested in downstream repositories.
65-65: LGTM! Context hash updated.The devcontainer context hash has been updated appropriately, reflecting the changes in this file.
template/.devcontainer/devcontainer.json.jinja-base (2)
17-20: LGTM! Conditional logic maintains backward compatibility.The conditional logic preserves
node_version(the user-provided answer to the copier question) when not a child template, while usingdefault_node_version(the centralized default) for child templates. This maintains flexibility for template inheritance.
31-56: LGTM! Extension versions updated consistently.The extension version bumps mirror those in
.devcontainer/devcontainer.json, maintaining consistency between the template and non-template configurations. The conditional inclusion ofclaude-codebased oninstall_claude_cliis appropriate.template/extensions/context.py.jinja-base (2)
52-83: Removed context keys have no remaining usages. Thetypes_node_versionandgraphql_codegen_typescript_operations_versionkeys were successfully removed from the context with no dangling references in the codebase.
52-52: Context key rename is complete and correct.The refactoring from
node_versiontodefault_node_versionhas been applied consistently across all template files. No remaining references to the old context key were found.extensions/context.py (1)
57-57: Thenode_version→default_node_versionrename is complete and correct.The context key has been successfully renamed in both
extensions/context.py(line 57:context["default_node_version"] = "24.11.1") and the template version (template/extensions/context.py.jinja-baseline 52). No orphaned references to the oldcontext["node_version"]key exist in the codebase. The form fieldnode_version:incopier.yml.jinja-baseis the user input variable (separate from the context key) and correctly defaults to the new context key via{{ default_node_version }}.
| "pytest-randomly>=4.0.1", | ||
| "pyright[nodejs]>=1.1.407", | ||
| "ty>=0.0.2", | ||
| "ty>=0.0.9", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Check PyPI for the ty package version and recent releases
# Get ty package information from PyPI
echo "=== Checking ty package versions on PyPI ==="
curl -s https://pypi.org/pypi/ty/json | jq -r '.releases | keys[]' | sort -V | tail -10
# Get latest version
echo -e "\n=== Latest version ==="
curl -s https://pypi.org/pypi/ty/json | jq -r '.info.version'
# Check if version 0.0.9 exists
echo -e "\n=== Checking if version 0.0.9 exists ==="
curl -s https://pypi.org/pypi/ty/0.0.9/json | jq -r '.info.version // "Version not found"'Repository: LabAutomationAndScreening/copier-base-template
Length of output: 278
🌐 Web query:
ty package Python PyPI changelog breaking changes
💡 Result:
Short answer — the ty changelog and breaking changes are published in the project's GitHub Releases (release notes) and on the project documentation/PyPI pages. See the Releases page for per-release "Breaking changes" sections (example: rename of the unknown-rule lint to ignore-comment-unknown-rule in 0.0.1‑alpha.24). [1][2]
Where to look:
- GitHub Releases (release notes + breaking changes). Example entry showing a breaking change. [1]
- PyPI project page / project docs for release history and docs. [2]
Sources:
[1] GitHub — astral-sh/ty Releases (release notes & breaking changes).
[2] PyPI — ty project page (description & release history).
🏁 Script executed:
#!/bin/bash
# Get detailed ty package information from PyPI including project URLs
echo "=== Detailed ty package info ==="
curl -s https://pypi.org/pypi/ty/json | jq -r '.info | {version, home_page, project_urls}'
# Also check for release notes in recent versions
echo -e "\n=== Recent releases (0.0.2 to 0.0.9) ==="
curl -s https://pypi.org/pypi/ty/json | jq -r '.releases | to_entries[] | select(.key >= "0.0.2" and .key <= "0.0.9") | .key' | sort -VRepository: LabAutomationAndScreening/copier-base-template
Length of output: 599
🏁 Script executed:
#!/bin/bash
# Fetch the changelog from the ty GitHub repository
echo "=== Fetching ty CHANGELOG.md ==="
curl -s https://raw.githubusercontent.com/astral-sh/ty/main/CHANGELOG.md | head -200Repository: LabAutomationAndScreening/copier-base-template
Length of output: 10795
🏁 Script executed:
#!/bin/bash
# Fetch more of the changelog to see breaking changes in earlier versions
echo "=== Fetching more of ty CHANGELOG.md ==="
curl -s https://raw.githubusercontent.com/astral-sh/ty/main/CHANGELOG.md | head -400 | tail -200Repository: LabAutomationAndScreening/copier-base-template
Length of output: 12558
Version 0.0.9 exists as the latest release, but includes a breaking change in 0.0.8.
The ty package version 0.0.9 is confirmed to exist on PyPI as the latest stable release (released 2026-01-05). Between versions 0.0.2 and 0.0.9, there is one breaking change in version 0.0.8: the linting rule non-subscriptable was renamed to not-subscriptable. If the codebase depends on this rule or references it in any configuration, update accordingly. Most other changes between these versions are enhancements to type checking, LSP server improvements, and bug fixes.
🤖 Prompt for AI Agents
In @pyproject.toml around line 12, The dependency line adding "ty>=0.0.9" can
pull in a release that introduced a lint-rule rename in 0.0.8 (non-subscriptable
-> not-subscriptable); either pin or constrain the package and update any rule
references: change dependency to a pinned or bounded spec (e.g., lock to 0.0.9
or a narrow range) in pyproject.toml and search for any usages of the old rule
name "non-subscriptable" (configs, linters, or CI) and rename them to
"not-subscriptable" so the codebase matches the ty release.
| context["vcrpy_version"] = "{{ vcrpy_version }}" | ||
| context["pytest_recording_version"] = "{{ pytest_recording_version }}" | ||
| context["pytest_asyncio_version"] = "{{ pytest_asyncio_version }}" | ||
| context["pytest_reserial_version"] = "{{ pytest_reserial_version }}" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Search for usage of pytest_reserial_version in template files
rg -n "pytest_reserial_version" --type=yaml --type=toml --type=jinja -g '!context.py.jinja-base'Repository: LabAutomationAndScreening/copier-base-template
Length of output: 72
🏁 Script executed:
#!/bin/bash
# Broader search for pytest_reserial_version across all files
rg -n "pytest_reserial_version" -g '!context.py.jinja-base'Repository: LabAutomationAndScreening/copier-base-template
Length of output: 169
🏁 Script executed:
#!/bin/bash
# Check the Python extension file for context
cat -n extensions/context.py | head -70
# Also check if there are other template files we may have missed
echo "=== Looking for all template files ==="
find . -type f \( -name "*.jinja*" -o -name "*.j2" -o -name "*.html" \) | head -20Repository: LabAutomationAndScreening/copier-base-template
Length of output: 5004
🏁 Script executed:
#!/bin/bash
# Search for pytest_reserial_version specifically in jinja-base template files
echo "=== Searching in .jinja-base files ==="
grep -r "pytest_reserial_version" template/
# Also check some similar variables to see the pattern
echo -e "\n=== Checking if other pytest_* variables are used in templates ==="
grep -r "pytest_mock_version\|pytest_version\|pytest_asyncio_version" template/ | head -10Repository: LabAutomationAndScreening/copier-base-template
Length of output: 734
🏁 Script executed:
#!/bin/bash
# Check pyproject.toml.jinja-base for pytest dependencies and reserial
echo "=== Searching for 'reserial' in pyproject.toml.jinja-base ==="
grep -n "reserial" template/pyproject.toml.jinja-base
echo -e "\n=== Searching for 'pytest' in pyproject.toml.jinja-base to see the pattern ==="
grep -n "pytest" template/pyproject.toml.jinja-base | head -20Repository: LabAutomationAndScreening/copier-base-template
Length of output: 431
Add pytest-reserial to pyproject.toml.jinja-base or remove the unused context variable.
The pytest_reserial_version context variable is defined but not consumed in any template. Other pytest packages follow the pattern of being defined in the context hook and then referenced in the pyproject.toml.jinja-base dependencies (e.g., pytest, pytest-cov, pytest-randomly). Either add pytest-reserial{{ pytest_reserial_version }} to the dependencies list in template/pyproject.toml.jinja-base or remove the unused variable from the context.
🤖 Prompt for AI Agents
In @template/extensions/context.py.jinja-base around line 50, The context
variable context["pytest_reserial_version"] is defined in
template/extensions/context.py.jinja-base but never used; either add the
dependency pytest-reserial{{ pytest_reserial_version }} to the dependencies in
template/pyproject.toml.jinja-base (inside the pytest-related deps list) or
remove the context assignment to eliminate dead data; update the
pyproject.jinja-base dependencies to include the interpolated package string if
you want the package included, or delete the context["pytest_reserial_version"]
line from template/extensions/context.py.jinja-base if the package is not
needed.
There was a problem hiding this comment.
Pull request overview
This PR updates various development tool versions, including Python packages, VS Code extensions, Node.js dependencies, and pre-commit hooks. The changes also include a refactoring to use a more generic default_node_version variable.
Key Changes
- Updated Python package
tyfrom 0.0.2 to 0.0.9 - Bumped VS Code extension versions (Copilot Chat, Pylance, Ruff, and others)
- Updated JavaScript dependencies and libraries (Nuxt, Vue, etc.)
- Refreshed pre-commit hook versions and UV version to 0.9.21
- Refactored
node_versiontodefault_node_versionfor better template inheritance
Reviewed changes
Copilot reviewed 12 out of 13 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| uv.lock | Updated lock file for ty package from 0.0.2 to 0.0.9 |
| pyproject.toml | Bumped ty dependency version specifier |
| extensions/context.py | Updated multiple library versions and added pytest_reserial_version; refactored node_version to default_node_version |
| template/extensions/context.py.jinja-base | Template version of context.py with same updates |
| template/copier.yml.jinja-base | Updated node_version default to use default_node_version variable |
| template/.devcontainer/devcontainer.json.jinja-base | Updated VS Code extension versions and node version reference |
| template/.github/workflows/ci.yaml.jinja-base | Updated node-version reference to default_node_version |
| template/tests/copier_data/data1.yaml.jinja-base | Changed node_version to use default_node_version variable |
| template/tests/copier_data/data2.yaml.jinja-base | Changed node_version to use default_node_version variable |
| .pre-commit-config.yaml | Updated pre-commit hook versions (typos, check-jsonschema, check-json5, ruff) |
| .devcontainer/install-ci-tooling.py | Bumped UV_VERSION to 0.9.21 |
| .devcontainer/devcontainer.json | Updated VS Code extension versions and hash |
| .coderabbit.yaml | Added new configuration options (early_access, path instructions, in_progress_fortune) |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| "ghcr.io/devcontainers/features/node:1.6.3": { | ||
| // https://github.com/devcontainers/features/tree/main/src/node | ||
| "version": "{% endraw %}{{ node_version }}{% raw %}", | ||
| "version": "{% endraw %}{% if is_child_of_copier_base_template is not defined %}{{ node_version }}{% else %}{{ default_node_version }}{% endif %}{% raw %}", |
There was a problem hiding this comment.
This conditional logic appears incorrect. The outer condition on line 16 already checks that is_child_of_copier_base_template is not defined. Inside this block, the same condition on line 19 will always be true, meaning {{ node_version }} will always be used and {{ default_node_version }} will never be reached.
Consider whether this should check for a different condition, or if the logic should be restructured to properly distinguish between when to use node_version vs default_node_version.
| "version": "{% endraw %}{% if is_child_of_copier_base_template is not defined %}{{ node_version }}{% else %}{{ default_node_version }}{% endif %}{% raw %}", | |
| "version": "{% endraw %}{{ node_version }}{% raw %}", |
There was a problem hiding this comment.
Actionable comments posted: 1
Fix all issues with AI Agents 🤖
In @extensions/context.py:
- Line 38: The pyinstaller version was changed from an exact pin to a loose
range, reducing build reproducibility; revert or tighten this constraint by
updating context["pyinstaller_version"] to either the exact version "6.17.0" for
deterministic builds or a constrained range like ">=6.17.0,<7.0.0" to allow
patch updates but prevent major upgrades.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (1)
extensions/context.py
🧰 Additional context used
📓 Path-based instructions (1)
**/*.py
⚙️ CodeRabbit configuration file
Do not express concerns about assert statements being removed by using the -O python flag; we never use that flag. Do not express concerns about ruff rules; a pre-commit hook already runs a ruff check. Do not warn about unnecessary super().init() calls; pyright prefers those to be present.
Files:
extensions/context.py
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: lint-matrix (ubuntu-24.04, 3.12.7, --data-file tests/copier_data/data1.yaml)
🔇 Additional comments (7)
extensions/context.py (7)
51-52: Test and API dependency bumps are appropriate.The patch-level updates to
python_kiota_bundle_versionandvcrpy_versionlook good.
58-58: Node.js and frontend dependency updates are standard version bumps.All the Nuxt, Vue, TypeScript tooling, and related dependency updates are minor or patch-level changes appropriate for the caret (^) version ranges used in npm/pnpm.
Also applies to: 60-60, 63-64, 66-66, 68-68, 71-72, 75-76, 86-86
26-26: Python dependency version bumps are confirmed valid.All specified package versions (ty>=0.0.9, pulumi>=3.214.1, pulumi-aws>=7.15.0, pulumi-github>=6.10.0, fastapi>=0.128.0, uvicorn>=0.40.0) exist on PyPI. The version updates are reasonable minor/patch bumps.
57-57: The node_version to default_node_version rename is consistently applied across the codebase.Verification confirms the breaking change is complete:
extensions/context.pyline 57 definesdefault_node_versioncorrectlytemplate/copier.yml.jinja-baseline 38 references it correctly as the default value- No remaining references to the old
node_versioncontext variable exist- All templates and scripts have been updated
55-55: New context key added for pytest-reserial.The addition of
pytest_reserial_versionto the template context is confirmed. Note that this key is not directly referenced in template files; it follows the same pattern as other version variables (such aspytest_recording_versionandpytest_asyncio_version) which are also stored in context for potential use in other parts of the template pipeline (e.g.,install-ci-tooling.pyorpyproject.tomlconfigurations).
14-14: Core tooling version bumps are reasonable and versions exist.The uv (0.9.21) and pnpm (10.27.0) updates are standard minor/patch version bumps set in the context hook for the copier template.
31-31: Verify the large Pulumi AWS Native version jump before merging.The
pulumi_aws_native_versionjumps from 1.40.x to 1.47.0 (7 minor versions) over approximately 25 days. Review the pulumi-aws-native GitHub releases and Pulumi Registry for breaking changes, schema modifications, or migration requirements that could affect your stack resources.
| context["ephemeral_pulumi_deploy_version"] = ">=0.0.6" | ||
| context["pydantic_version"] = ">=2.12.5" | ||
| context["pyinstaller_version"] = "6.17.0" | ||
| context["pyinstaller_version"] = ">=6.17.0" |
There was a problem hiding this comment.
Pyinstaller version constraint loosened from exact to range.
Changing from an exact version "6.17.0" to a range ">=6.17.0" reduces build reproducibility. Future builds may pick up newer versions of PyInstaller, which could introduce subtle differences in bundled executables.
If deterministic builds are required, consider either:
- Keeping the exact version pin, or
- Using a more constrained range like
">=6.17.0,<7.0.0"
🔎 Suggested fix for tighter constraint
- context["pyinstaller_version"] = ">=6.17.0"
+ context["pyinstaller_version"] = ">=6.17.0,<7.0.0"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| context["pyinstaller_version"] = ">=6.17.0" | |
| context["pyinstaller_version"] = ">=6.17.0,<7.0.0" |
🤖 Prompt for AI Agents
In @extensions/context.py around line 38, The pyinstaller version was changed
from an exact pin to a loose range, reducing build reproducibility; revert or
tighten this constraint by updating context["pyinstaller_version"] to either the
exact version "6.17.0" for deterministic builds or a constrained range like
">=6.17.0,<7.0.0" to allow patch updates but prevent major upgrades.
Various devcontainer, library, and pre-commit hook version bumps. tested in downstream repos of nuxt-python-intranet app
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.