mirror of
https://github.com/deepseek-ai/deepseek-harness.git
synced 2026-08-29 04:26:38 +00:00
Make the zero-code dsh-python-runtime-closure depend on the real @deepseek-ai/dsh application and every required profile peer, then package apps/cli's built bin instead of the deleted Python carrier. Rename executables to deepseek-harness-sdk-runtime-<platform>-<arch>, update wheel/platform/build workflow discovery, and install a Python dsh console command that requires explicit DSH_HOME before exec. Include profile, bundle, preset, native addon, and shared-library assets needed by the full CLI. Remove the checked-in default cordis.yml and preserve the existing wheel distribution names, Python module names, sidecar validation, and wire identity. Runtime resolution and release tests pin the new artifacts and dev Node carrier.
125 lines
5.0 KiB
Python
125 lines
5.0 KiB
Python
"""Tests for repository-owned Python release versions."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import runpy
|
|
from pathlib import Path
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[3]
|
|
SCRIPT = ROOT / "scripts" / "build-python-release.py"
|
|
build_python_release = SimpleNamespace(**runpy.run_path(str(SCRIPT)))
|
|
|
|
|
|
def test_repository_version_matches_root_package_json() -> None:
|
|
expected = json.loads((ROOT / "package.json").read_text())["version"]
|
|
|
|
assert build_python_release.repository_version() == expected
|
|
|
|
|
|
def test_release_tag_is_optional_for_non_release_builds() -> None:
|
|
build_python_release.validate_release_tag(None, "1.2.3")
|
|
|
|
|
|
def test_release_tag_must_match_repository_version() -> None:
|
|
build_python_release.validate_release_tag("python-v1.2.3", "1.2.3")
|
|
|
|
with pytest.raises(ValueError, match="expected 'python-v1.2.3'"):
|
|
build_python_release.validate_release_tag("python-v1.2.4", "1.2.3")
|
|
|
|
|
|
def test_repository_version_accepts_a_prerelease(tmp_path: Path) -> None:
|
|
(tmp_path / "package.json").write_text('{"version":"1.2.3-rc.1"}\n')
|
|
|
|
assert build_python_release.repository_version(tmp_path) == "1.2.3-rc.1"
|
|
|
|
|
|
def test_repository_version_rejects_malformed_versions(tmp_path: Path) -> None:
|
|
(tmp_path / "package.json").write_text('{"version":"v1.2"}\n')
|
|
|
|
with pytest.raises(ValueError, match="must be X.Y.Z"):
|
|
build_python_release.repository_version(tmp_path)
|
|
|
|
|
|
def test_pep440_version_spells_a_prerelease_the_python_way() -> None:
|
|
# Build backends normalize to this spelling, so the wheel filename and
|
|
# metadata checks compare against it rather than the repository version.
|
|
assert build_python_release.pep440_version("1.2.3") == "1.2.3"
|
|
assert build_python_release.pep440_version("1.2.3-rc.1") == "1.2.3rc1"
|
|
assert build_python_release.pep440_version("1.2.3-alpha.2") == "1.2.3a2"
|
|
assert build_python_release.pep440_version("1.2.3-beta.10") == "1.2.3b10"
|
|
|
|
with pytest.raises(ValueError, match="no PEP 440 spelling"):
|
|
build_python_release.pep440_version("1.2.3-nightly")
|
|
|
|
|
|
def test_macos_wheel_tag_does_not_claim_unsupported_node_platforms() -> None:
|
|
assert build_python_release.PLATFORMS["macos-arm64"][0] == "macosx_14_0_arm64"
|
|
assert build_python_release.PLATFORMS["macos-arm64"][1] == "deepseek-harness-sdk-runtime-macos-arm64"
|
|
|
|
|
|
def test_platform_manifest_rejects_incomplete_entries(tmp_path: Path) -> None:
|
|
manifest = tmp_path / "platforms.json"
|
|
manifest.write_text('{"macos-arm64":{"tag":"macosx_14_0_arm64"}}\n')
|
|
|
|
with pytest.raises(ValueError, match="tag and executable fields"):
|
|
build_python_release.load_platforms(manifest)
|
|
|
|
|
|
def test_stage_sdk_keeps_distribution_module_and_runtime_pin_distinct(tmp_path: Path) -> None:
|
|
destination = tmp_path / "staging"
|
|
|
|
build_python_release.stage_sdk(destination, "1.2.3")
|
|
|
|
pyproject = (destination / "pyproject.toml").read_text()
|
|
assert 'name = "deepseek-harness-sdk"' in pyproject
|
|
assert 'version = "1.2.3"' in pyproject
|
|
assert 'license = "MIT"' in pyproject
|
|
assert '"deepseek-harness-runtime-bin==1.2.3"' in pyproject
|
|
assert 'license-files = ["LICENSE"]' in pyproject
|
|
assert (destination / "LICENSE").read_bytes() == (ROOT / "LICENSE").read_bytes()
|
|
assert (destination / "src" / "deepseek_harness" / "__init__.py").is_file()
|
|
|
|
|
|
@pytest.mark.parametrize(("target", "with_helper"), [("linux-x64", False), ("macos-arm64", True)])
|
|
def test_stage_runtime_copies_platform_payload(
|
|
tmp_path: Path, target: str, with_helper: bool
|
|
) -> None:
|
|
executable = tmp_path / f"deepseek-harness-sdk-runtime-{target}"
|
|
executable.write_bytes(b"runtime")
|
|
executable.chmod(0o755)
|
|
expected = {executable.name: b"runtime"}
|
|
ripgrep = Path(f"{executable}-rg")
|
|
ripgrep.write_bytes(b"ripgrep")
|
|
ripgrep.chmod(0o755)
|
|
expected[ripgrep.name] = b"ripgrep"
|
|
if with_helper:
|
|
spawn_helper = Path(f"{executable}-spawn-helper")
|
|
spawn_helper.write_bytes(b"helper")
|
|
spawn_helper.chmod(0o755)
|
|
expected[spawn_helper.name] = b"helper"
|
|
destination = tmp_path / "staging"
|
|
|
|
build_python_release.stage_runtime(destination, "1.2.3", executable, executable.name)
|
|
|
|
runtime_dir = destination / "src" / "deepseek_harness_runtime" / "runtime"
|
|
assert {
|
|
path.name: path.read_bytes()
|
|
for path in runtime_dir.glob("deepseek-harness-sdk-runtime-*")
|
|
} == expected
|
|
pyproject = (destination / "pyproject.toml").read_text()
|
|
assert 'license = "MIT"' in pyproject
|
|
assert 'license-files = ["LICENSE", "THIRD_PARTY_NOTICES.md"]' in pyproject
|
|
assert 'dsh = "deepseek_harness_runtime:main"' in pyproject
|
|
assert (destination / "platforms.json").read_bytes() == (
|
|
ROOT / "python" / "sdk-runtime" / "platforms.json"
|
|
).read_bytes()
|
|
assert (destination / "LICENSE").read_bytes() == (ROOT / "LICENSE").read_bytes()
|
|
assert (destination / "THIRD_PARTY_NOTICES.md").read_bytes() == (
|
|
ROOT / "THIRD_PARTY_NOTICES.md"
|
|
).read_bytes()
|