Update arcade new --full (#805)

Monorepo has new linting and formatting preferences. Updated the
`--full` to reflect that.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk: changes only affect the generated `--full` project template
and CLI help surface (flag is now hidden), plus a patch version bump.
> 
> **Overview**
> Updates `arcade new --full` to be *internal-only* by hiding the flag
and revises the full template to match monorepo conventions
(Ruff/pre-commit versions and hook IDs, `.ruff.toml` now extends the
repo config, `pyproject.toml` formatting/booleans, adds `pytest`
`asyncio_mode`, and removes `pre-commit install` from the template
`Makefile`).
> 
> Adds a regression test ensuring generated full-template files match
these conventions, and bumps the root package version to `1.12.2`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
2c1a285752d67dc4dd1aa8e0b6f25ca2f0a33fa2. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
This commit is contained in:
Eric Gustin 2026-03-27 14:22:32 -07:00 committed by GitHub
parent 78c8e6fb99
commit bbba7aec90
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 55 additions and 68 deletions

View file

@ -229,9 +229,10 @@ def new(
debug: bool = typer.Option(False, "--debug", "-d", help="Show debug information"),
full: bool = typer.Option(
False,
"--full",
"-f",
help="Create a starter MCP server (pyproject.toml, server.py, .env.example)",
"--full",
help="[Internal] Create a full toolkit scaffold for Arcade development.",
hidden=True,
),
) -> None:
"""

View file

@ -1,7 +1,7 @@
files: ^.*/{{toolkit_name}}/.*
files: ^.*/{{ toolkit_name }}/.*
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: "v4.4.0"
rev: 'v4.4.0'
hooks:
- id: check-case-conflict
- id: check-merge-conflict
@ -11,8 +11,8 @@ repos:
- id: trailing-whitespace
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.6.7
rev: v0.15.7
hooks:
- id: ruff
- id: ruff-check
args: [--fix]
- id: ruff-format

View file

@ -1,46 +1 @@
target-version = "py310"
line-length = 100
fix = true
[lint]
select = [
# flake8-2020
"YTT",
# flake8-bandit
"S",
# flake8-bugbear
"B",
# flake8-builtins
"A",
# flake8-comprehensions
"C4",
# flake8-debugger
"T10",
# flake8-simplify
"SIM",
# isort
"I",
# mccabe
"C90",
# pycodestyle
"E", "W",
# pyflakes
"F",
# pygrep-hooks
"PGH",
# pyupgrade
"UP",
# ruff
"RUF",
# tryceratops
"TRY",
]
[lint.per-file-ignores]
"*" = ["TRY003", "B904"]
"**/tests/*" = ["S101", "E501"]
"**/evals/*" = ["S101", "E501"]
[format]
preview = true
skip-magic-trailing-comma = false
extend = "../../../../ruff.toml"

View file

@ -7,7 +7,6 @@ help: ## Show this help message
install: ## Install dependencies, then overlay any ../.local-overrides
uv sync --all-extras
uv run pre-commit install
@if [ -f ../.local-overrides ]; then \
while IFS= read -r pkg || [ -n "$$pkg" ]; do \
case "$$pkg" in \#*|"") continue ;; esac; \

View file

@ -1,12 +1,12 @@
[build-system]
requires = [ "hatchling",]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "{{ package_name }}"
version = "0.1.0"
description = "{{ toolkit_description }}"
license = {text = "Proprietary - Arcade Software License Agreement v1.0"}
license = { text = "Proprietary - Arcade Software License Agreement v1.0" }
requires-python = ">=3.10"
dependencies = [
"arcade-mcp-server>={{ arcade_mcp_server_min_version }},<{{ arcade_mcp_server_max_version }}",
@ -31,26 +31,27 @@ dev = [
"mypy>=1.5.1,<1.6.0",
"pre-commit>=3.4.0,<3.5.0",
"tox>=4.11.1,<4.12.0",
"ruff>=0.7.4,<0.8.0",
"ruff>=0.15.7,<0.16.0",
]
[tool.mypy]
files = [ "{{ package_name }}/**/*.py",]
files = ["{{ package_name }}/**/*.py"]
python_version = "3.10"
disallow_untyped_defs = "True"
disallow_any_unimported = "True"
no_implicit_optional = "True"
check_untyped_defs = "True"
warn_return_any = "True"
warn_unused_ignores = "True"
show_error_codes = "True"
ignore_missing_imports = "True"
disallow_untyped_defs = true
disallow_any_unimported = true
no_implicit_optional = true
check_untyped_defs = true
warn_return_any = true
warn_unused_ignores = true
show_error_codes = true
ignore_missing_imports = true
[tool.pytest.ini_options]
testpaths = [ "tests",]
testpaths = ["tests"]
asyncio_mode = "auto"
[tool.coverage.report]
skip_empty = true
[tool.hatch.build.targets.wheel]
packages = [ "{{ package_name }}",]
packages = ["{{ package_name }}"]

View file

@ -31,6 +31,37 @@ def test_create_new_toolkit_prints_next_steps(tmp_path: Path) -> None:
assert "my_server" in output
def test_create_new_toolkit_full_template_matches_monorepo(tmp_path: Path) -> None:
"""Full template should produce files matching monorepo conventions."""
output_dir = tmp_path / "full_conventions"
output_dir.mkdir()
buf = StringIO()
test_console = Console(file=buf, force_terminal=False)
import arcade_cli.new as new_mod
orig = new_mod.console
new_mod.console = test_console
try:
create_new_toolkit(str(output_dir), "my_server")
finally:
new_mod.console = orig
toolkit_dir = output_dir / "my_server"
# pyproject.toml formatting checks
pyproject = (toolkit_dir / "pyproject.toml").read_text()
assert 'requires = ["hatchling"]' in pyproject
assert 'license = { text = "Proprietary' in pyproject
assert 'asyncio_mode = "auto"' in pyproject
assert "disallow_untyped_defs = true" in pyproject
assert '"True"' not in pyproject
# Makefile should not have pre-commit install
makefile = (toolkit_dir / "Makefile").read_text()
assert "pre-commit install" not in makefile
def test_create_new_toolkit_minimal_with_spaces(tmp_path: Path) -> None:
output_dir = tmp_path / "dir with spaces"
output_dir.mkdir()

View file

@ -1,6 +1,6 @@
[project]
name = "arcade-mcp"
version = "1.12.1"
version = "1.12.2"
description = "Arcade.dev - Tool Calling platform for Agents"
readme = "README.md"
license = { file = "LICENSE" }