Skip to content

Conversation

@jensens
Copy link
Member

@jensens jensens commented Oct 22, 2025

Summary

Drop support for Python 3.8 and 3.9, bump to version 5.0.0 (major version), and modernize codebase to use Python 3.10+ features.

Breaking Changes

  • Minimum Python version: 3.8 → 3.10
  • Python 3.8 and 3.9 are no longer supported
  • This is a major version bump (4.1.2 → 5.0.0) due to breaking backward compatibility

Changes

Configuration & Documentation (5 files)

  1. pyproject.toml:

    • Updated requires-python = ">=3.10"
    • Removed Python 3.8/3.9 classifiers
    • Removed py38, py39 from tox env_list
  2. Makefile:

    • Updated PYTHON_MIN_VERSION?=3.10
  3. .github/workflows/tests.yaml:

    • Removed Python 3.8 and 3.9 from test matrix
    • CI now tests: Python 3.10, 3.11, 3.12, 3.13, 3.14 × 3 OS = 15 combinations (was 21)
  4. CLAUDE.md:

    • Updated all Python version references from "3.8+" to "3.10+"
    • Updated documentation to reflect new minimum version
  5. CHANGES.md:

    • Added version 5.0.0 section with breaking changes notice
    • Documented code modernization changes

Code Modernization (19 files)

Used ruff to automatically modernize type hints to Python 3.10+ syntax:

Type hint modernizations:

  • typing.Dict[str, str]dict[str, str]
  • typing.List[str]list[str]
  • typing.Tuple[str, ...]tuple[str, ...]
  • typing.Set[str]set[str]
  • Optional[str]str | None
  • Union[str, int]str | int
  • Removed unused typing imports after conversion

String formatting modernizations:

  • "text %s" % varf"text {var}" (233 conversions)

Files affected:

  • src/mxdev/*.py (5 files)
  • src/mxdev/vcs/*.py (8 files)
  • tests/*.py (6 files)

Testing

  • ✅ All 174 tests pass locally on Python 3.14
  • ✅ Code formatted and linted
  • ✅ CI will test on Python 3.10-3.14 × 3 operating systems

Commits (6 total)

  1. Update pyproject.toml: drop Python 3.8/3.9 support
  2. Update Makefile: set minimum Python version to 3.10
  3. Update CI workflow: remove Python 3.8/3.9 from test matrix
  4. Update CLAUDE.md: Python 3.10+ minimum version
  5. Bump version to 5.0.0 with breaking changes notice
  6. Modernize type hints to Python 3.10+ syntax using ruff

Migration Guide for Users

Users running Python 3.8 or 3.9 should:

  1. Upgrade to Python 3.10 or later
  2. Pin to mxdev <5.0.0 if Python upgrade is not possible:
    mxdev<5.0.0
    

Rationale

  • Python 3.8 EOL: October 2024 (already past)
  • Python 3.9 EOL: October 2025 (approaching)
  • Enables use of modern Python features (PEP 604 union syntax, built-in generic types)
  • Reduces maintenance burden and testing matrix
  • Aligns with modern Python ecosystem standards

@jensens jensens merged commit e6c086b into main Oct 22, 2025
17 checks passed
@jensens jensens deleted the feature/drop-python-38-39-support branch October 22, 2025 15:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants