Repository-wide mechanical cleanup so `ruff check src tests` has a chance of passing; no behavioural changes. - Add `from __future__ import annotations` where PEP 604 unions are used. This has to come first: pyproject declares requires-python >= 3.9, where `X | None` is not evaluable at runtime unless annotations are stringified. - Replace typing.List/Dict/Tuple/Set with the builtin generics and Optional[X] with X | None, then drop the imports that became unused. The four actions/*/__init__.py files needed this by hand because ruff leaves unused imports in __init__.py alone (possible re-exports). - Strip shebangs from 72 importable modules. None of them are executable or invoked directly; the entry points are console_scripts and runpy. - Flatten nested `with` blocks, collapse needless-bool returns, and apply the remaining mechanical ruff fixes (PIE810, FLY002, PERF102, FURB192, RUF059, I001). - Pass check=False explicitly to the four subprocess.run() calls that inspect returncode themselves. That is the existing default. Two rewrites are visible to mocks, so their tests move with them: subprocess.run(stdout=PIPE, stderr=PIPE) became capture_output=True, and open(path, "r", ...) lost the redundant mode. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
"""
|
|
Version discovery and bumping helpers for the release workflow.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pkgmgr.core.git.queries import get_tags
|
|
from pkgmgr.core.version.semver import (
|
|
SemVer,
|
|
bump_major,
|
|
bump_minor,
|
|
bump_patch,
|
|
find_latest_version,
|
|
)
|
|
|
|
|
|
def determine_current_version() -> SemVer:
|
|
"""
|
|
Determine the current semantic version from Git tags.
|
|
|
|
Behaviour:
|
|
- If there are no tags or no SemVer-compatible tags, return 0.0.0.
|
|
- Otherwise, use the latest SemVer tag as current version.
|
|
"""
|
|
tags = get_tags()
|
|
if not tags:
|
|
return SemVer(0, 0, 0)
|
|
|
|
latest = find_latest_version(tags)
|
|
if latest is None:
|
|
return SemVer(0, 0, 0)
|
|
|
|
_tag, ver = latest
|
|
return ver
|
|
|
|
|
|
def bump_semver(current: SemVer, release_type: str) -> SemVer:
|
|
"""
|
|
Bump the given SemVer according to the release type.
|
|
|
|
release_type must be one of: "major", "minor", "patch".
|
|
"""
|
|
if release_type == "major":
|
|
return bump_major(current)
|
|
if release_type == "minor":
|
|
return bump_minor(current)
|
|
if release_type == "patch":
|
|
return bump_patch(current)
|
|
|
|
raise ValueError(f"Unknown release type: {release_type!r}")
|