fix preflight
This commit is contained in:
@@ -4,6 +4,7 @@ from __future__ import annotations
|
||||
|
||||
import io
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
import urllib.error
|
||||
from pathlib import Path
|
||||
@@ -193,25 +194,47 @@ def test_version_consistency_passes_on_match(tmp_path):
|
||||
assert step.ok, step.detail
|
||||
|
||||
|
||||
def test_duplicate_guard_blocks_existing_sdk_dir(tmp_path):
|
||||
def test_duplicate_guard_allows_staged_sdk_dir(tmp_path, monkeypatch):
|
||||
"""A populated SDK/<version>/ is the normal preflight input, not a hazard."""
|
||||
repo = _make_repo(tmp_path, version="0.5.2")
|
||||
_stage_wheel(repo, "0.5.2")
|
||||
monkeypatch.setattr(version_mod, "git_tags", lambda root: [])
|
||||
step = Preflight(PreflightOptions(version="0.5.2"), repo_root=repo)._duplicate_guard()
|
||||
assert step.ok, step.detail
|
||||
assert "staged wheel(s) to verify" in step.detail
|
||||
|
||||
|
||||
def test_duplicate_guard_blocks_released_tag(tmp_path, monkeypatch):
|
||||
repo = _make_repo(tmp_path, version="0.5.2")
|
||||
_stage_wheel(repo, "0.5.2")
|
||||
monkeypatch.setattr(version_mod, "git_tags", lambda root: ["v0.5.2", "v0.5.1"])
|
||||
step = Preflight(PreflightOptions(version="0.5.2"), repo_root=repo)._duplicate_guard()
|
||||
assert not step.ok
|
||||
assert "already mark 0.5.2 as released" in step.detail
|
||||
assert "--force" in step.detail
|
||||
|
||||
|
||||
def test_duplicate_guard_allows_force(tmp_path):
|
||||
def test_duplicate_guard_force_accepts_released_tag(tmp_path, monkeypatch):
|
||||
repo = _make_repo(tmp_path, version="0.5.2")
|
||||
_stage_wheel(repo, "0.5.2")
|
||||
monkeypatch.setattr(version_mod, "git_tags", lambda root: ["0.5.2"])
|
||||
step = Preflight(
|
||||
PreflightOptions(version="0.5.2", force=True), repo_root=repo
|
||||
)._duplicate_guard()
|
||||
assert step.ok, step.detail
|
||||
assert "accepted via --force" in step.detail
|
||||
|
||||
|
||||
def test_duplicate_guard_reports_unreleased_version(tmp_path, monkeypatch):
|
||||
repo = _make_repo(tmp_path, version="0.5.3")
|
||||
monkeypatch.setattr(version_mod, "git_tags", lambda root: ["v0.5.2"])
|
||||
step = Preflight(PreflightOptions(version="0.5.3"), repo_root=repo)._duplicate_guard()
|
||||
assert step.ok, step.detail
|
||||
assert "no local git tag marks 0.5.3" in step.detail
|
||||
|
||||
|
||||
def test_duplicate_guard_flags_published_version(tmp_path, monkeypatch):
|
||||
repo = _make_repo(tmp_path, version="0.5.2")
|
||||
monkeypatch.setattr(version_mod, "git_tags", lambda root: [])
|
||||
monkeypatch.setattr(version_mod, "pypi_released_versions", lambda *a, **k: (["0.5.2"], None))
|
||||
step = Preflight(
|
||||
PreflightOptions(version="0.5.2", check_pypi=True), repo_root=repo
|
||||
@@ -220,6 +243,29 @@ def test_duplicate_guard_flags_published_version(tmp_path, monkeypatch):
|
||||
assert "already published on PyPI" in step.detail
|
||||
|
||||
|
||||
def test_released_tags_for_matches_version_spellings():
|
||||
tags = ["v0.5.1", "0.5.1", "v0.4.3", "0.50"]
|
||||
assert version_mod.released_tags_for("0.5.1", tags) == ["0.5.1", "v0.5.1"]
|
||||
assert version_mod.released_tags_for("0.5.2", tags) == []
|
||||
|
||||
|
||||
def test_git_tags_reads_repo_tags(tmp_path):
|
||||
repo = tmp_path / "repo"
|
||||
repo.mkdir()
|
||||
for command in (
|
||||
["git", "init", "-q"],
|
||||
["git", "config", "user.email", "test@example.invalid"],
|
||||
["git", "config", "user.name", "test"],
|
||||
):
|
||||
subprocess.run(command, cwd=repo, check=True, capture_output=True)
|
||||
(repo / "f.txt").write_text("x", encoding="utf-8")
|
||||
subprocess.run(["git", "add", "f.txt"], cwd=repo, check=True, capture_output=True)
|
||||
subprocess.run(["git", "commit", "-qm", "init"], cwd=repo, check=True, capture_output=True)
|
||||
subprocess.run(["git", "tag", "v0.5.2"], cwd=repo, check=True, capture_output=True)
|
||||
|
||||
assert "v0.5.2" in version_mod.git_tags(repo)
|
||||
|
||||
|
||||
def test_bundle_precheck_fails_when_pattern_resolves_nothing(tmp_path):
|
||||
repo = _make_repo(tmp_path, version="0.5.2")
|
||||
(repo / "pyproject.toml").write_text(
|
||||
|
||||
Reference in New Issue
Block a user