gd-tools-cli 0.9.0__tar.gz → 0.10.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/PKG-INFO +1 -1
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/pyproject.toml +2 -2
- gd_tools_cli-0.10.0/src/gd_tools/addon_check.py +157 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/test.py +8 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools_cli.egg-info/PKG-INFO +1 -1
- gd_tools_cli-0.9.0/src/gd_tools/addon_check.py +0 -75
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/README.md +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/setup.cfg +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/__init__.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/__main__.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/__init__.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-coverage/coverage.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-editor/coverage_overlay.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-editor/dock.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-editor/plugin.cfg +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-editor/plugin.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_mock.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_native_coverage.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_parameter_naming.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_snapshot_serializer.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_snapshot_store.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_test.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_test_context.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_test_preflight.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_test_runner.gd +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/atomic_io.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/changes.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/clean.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/cli.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/__init__.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/clean.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/completion.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/config.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/coverage.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/doctor.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/format.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/init.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/install_hooks.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/lint.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/migrate.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/test_validation.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/commands/version.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/config.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/__init__.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/cobertura_reporter.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/diff_reporter.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/html_reporter.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/lcov_reporter.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/omissions.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/orchestrator.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/patch.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/plan_generator.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/playtest.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/reporter.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/templates/file.html +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/templates/index.html +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/coverage/terminal_reporter.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/doctor.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/errors.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/file_discovery.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/format_runner.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/gh_annotations.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/godot.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/init.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/lint_runner.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/migration/__init__.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/migration/apply.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/migration/gutconfig.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/migration/reporter.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/migration/rewrite.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/migration/scan.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/migration/translate.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/__init__.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/artifacts.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/bridge_scan.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/command.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/discovery.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/flaky.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/import_cache.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/orchestrator.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/ordering.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/preflight.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/preflight_cache.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/native_test/protocol.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/output.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/pre_commit.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/schema.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/test_results.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/update_check.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/verbosity.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/version.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/watch/__init__.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/watch/coalescer.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/watch/loop.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/watch/mapping.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/watch/observer.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/watch/scope.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/watch/session.py +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools_cli.egg-info/SOURCES.txt +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools_cli.egg-info/dependency_links.txt +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools_cli.egg-info/entry_points.txt +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools_cli.egg-info/requires.txt +0 -0
- {gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools_cli.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "gd-tools-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.10.0"
|
|
8
8
|
description = "A modern development workflow CLI for GDScript projects in Godot 4.5+"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
@@ -110,7 +110,7 @@ target-version = ["py310"]
|
|
|
110
110
|
|
|
111
111
|
[tool.commitizen]
|
|
112
112
|
name = "cz_conventional_commits"
|
|
113
|
-
version = "0.
|
|
113
|
+
version = "0.10.0"
|
|
114
114
|
version_files = ["pyproject.toml:version"]
|
|
115
115
|
changelog_file = "CHANGELOG.md"
|
|
116
116
|
tag_format = "v$version"
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"""Stale addon detection module.
|
|
2
|
+
|
|
3
|
+
Checks whether the deployed coverage addon version matches the installed
|
|
4
|
+
gd-tools-cli package version. Prints warnings to stderr when the addon
|
|
5
|
+
is missing or stale. Fails silently on any error and can be disabled via
|
|
6
|
+
the GD_TOOLS_NO_UPDATE_CHECK environment variable.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
import click
|
|
12
|
+
from packaging.version import parse as parse_version
|
|
13
|
+
|
|
14
|
+
from gd_tools import __version__
|
|
15
|
+
from gd_tools.config import find_project_root
|
|
16
|
+
|
|
17
|
+
ADDON_VERSION_FILENAME = "_version.txt"
|
|
18
|
+
COVERAGE_ADDON_DIR = "gd-tools-coverage"
|
|
19
|
+
NATIVE_ADDON_DIR = "gd-tools-test"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _stale_refusal(label: str, deployed: str) -> str:
|
|
23
|
+
"""Build the refusal message for a stale/unparseable addon.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
label: Human-readable addon label ("Coverage"/"Native test").
|
|
27
|
+
deployed: Deployed version string (raw, may be unparseable).
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
Refusal message naming both versions, the fix, and the abort.
|
|
31
|
+
"""
|
|
32
|
+
return (
|
|
33
|
+
f"Error: {label} addon is outdated (v{deployed} deployed, "
|
|
34
|
+
f"v{__version__} installed). Run `gd-tools init` to "
|
|
35
|
+
"update. Aborted before running tests."
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _missing_refusal(label: str) -> str:
|
|
40
|
+
"""Build the refusal message for a missing version file.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
label: Human-readable addon label ("Coverage"/"Native test").
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
Refusal message naming the CLI version, the fix, and abort.
|
|
47
|
+
"""
|
|
48
|
+
return (
|
|
49
|
+
f"Error: {label} addon version file not found "
|
|
50
|
+
f"(deployed version unknown, v{__version__} installed). "
|
|
51
|
+
"Run `gd-tools init` to deploy the addon. "
|
|
52
|
+
"Aborted before running tests."
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def check_coverage_addon_gate() -> str | None:
|
|
57
|
+
"""Check the coverage-run addon gate before suite dispatch.
|
|
58
|
+
|
|
59
|
+
Compares the deployed coverage and native test addon versions
|
|
60
|
+
against the CLI version. A missing, unparseable, or older
|
|
61
|
+
deployed version refuses the run. Newer deployed addons and
|
|
62
|
+
matching versions pass. Suppressed by
|
|
63
|
+
``GD_TOOLS_NO_UPDATE_CHECK=1``. Never raises; unexpected
|
|
64
|
+
errors defer to the caller's existing behavior.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
Refusal message when the run must abort, else None.
|
|
68
|
+
"""
|
|
69
|
+
if os.environ.get("GD_TOOLS_NO_UPDATE_CHECK") == "1":
|
|
70
|
+
return None
|
|
71
|
+
try:
|
|
72
|
+
project_root = find_project_root()
|
|
73
|
+
except Exception:
|
|
74
|
+
return None
|
|
75
|
+
for addon_dir, label in (
|
|
76
|
+
(COVERAGE_ADDON_DIR, "Coverage"),
|
|
77
|
+
(NATIVE_ADDON_DIR, "Native test"),
|
|
78
|
+
):
|
|
79
|
+
version_file = (
|
|
80
|
+
project_root / "addons" / addon_dir / ADDON_VERSION_FILENAME
|
|
81
|
+
)
|
|
82
|
+
try:
|
|
83
|
+
exists = version_file.exists()
|
|
84
|
+
except Exception:
|
|
85
|
+
return None
|
|
86
|
+
if not exists:
|
|
87
|
+
return _missing_refusal(label)
|
|
88
|
+
try:
|
|
89
|
+
addon_version = version_file.read_text(encoding="utf-8").strip()
|
|
90
|
+
except Exception:
|
|
91
|
+
return None
|
|
92
|
+
try:
|
|
93
|
+
addon_parsed = parse_version(addon_version)
|
|
94
|
+
package_parsed = parse_version(__version__)
|
|
95
|
+
except (TypeError, ValueError):
|
|
96
|
+
return _stale_refusal(label, addon_version)
|
|
97
|
+
if addon_parsed < package_parsed:
|
|
98
|
+
return _stale_refusal(label, addon_version)
|
|
99
|
+
return None
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def check_addon_version() -> None:
|
|
103
|
+
"""Check if the deployed coverage addon version is stale.
|
|
104
|
+
|
|
105
|
+
Compares the version in _version.txt against the installed package
|
|
106
|
+
version. Prints a warning to stderr if the addon is missing or stale.
|
|
107
|
+
Fails silently on any unexpected error.
|
|
108
|
+
|
|
109
|
+
FR2: Stale Addon Check on CLI Invocation.
|
|
110
|
+
FR3: Suppressed by GD_TOOLS_NO_UPDATE_CHECK=1.
|
|
111
|
+
FR4: Uses packaging.version.parse() for comparison.
|
|
112
|
+
"""
|
|
113
|
+
# FR3.1: Environment variable disables check entirely.
|
|
114
|
+
if os.environ.get("GD_TOOLS_NO_UPDATE_CHECK") == "1":
|
|
115
|
+
return
|
|
116
|
+
|
|
117
|
+
try:
|
|
118
|
+
project_root = find_project_root()
|
|
119
|
+
version_file = (
|
|
120
|
+
project_root
|
|
121
|
+
/ "addons"
|
|
122
|
+
/ "gd-tools-coverage"
|
|
123
|
+
/ ADDON_VERSION_FILENAME
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
if not version_file.exists():
|
|
127
|
+
click.echo(
|
|
128
|
+
"WARNING: Coverage addon version file not found. "
|
|
129
|
+
"Run `gd-tools init` to deploy the addon.",
|
|
130
|
+
err=True,
|
|
131
|
+
)
|
|
132
|
+
return
|
|
133
|
+
|
|
134
|
+
addon_version = version_file.read_text(encoding="utf-8").strip()
|
|
135
|
+
stale_msg = (
|
|
136
|
+
f"WARNING: Coverage addon is outdated (v{addon_version} "
|
|
137
|
+
f"deployed, v{__version__} available). "
|
|
138
|
+
f"Run `gd-tools init` to update."
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
# FR4.1: Compare versions using packaging.version.parse().
|
|
142
|
+
try:
|
|
143
|
+
addon_parsed = parse_version(addon_version)
|
|
144
|
+
package_parsed = parse_version(__version__)
|
|
145
|
+
except (TypeError, ValueError):
|
|
146
|
+
# FR4.2: Unparseable version = treated as stale.
|
|
147
|
+
click.echo(stale_msg, err=True)
|
|
148
|
+
return
|
|
149
|
+
|
|
150
|
+
# FR2.4: Stale (addon < package)
|
|
151
|
+
if addon_parsed < package_parsed:
|
|
152
|
+
click.echo(stale_msg, err=True)
|
|
153
|
+
# FR2.5: Match = no warning
|
|
154
|
+
# FR2.6: Newer addon (downgrade) = no warning
|
|
155
|
+
except Exception:
|
|
156
|
+
# FR2.8: Fail silently on any unexpected error.
|
|
157
|
+
pass
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import click
|
|
4
4
|
|
|
5
|
+
from ..addon_check import check_coverage_addon_gate
|
|
5
6
|
from ..config import ConfigError, load_config
|
|
6
7
|
from ..errors import GdToolsError, TestFailureError
|
|
7
8
|
from ..native_test.command import run_native_test_command
|
|
@@ -291,6 +292,13 @@ def test(
|
|
|
291
292
|
|
|
292
293
|
validate_test_flags(flags, stage=RuleStage.PRE_DISPATCH)
|
|
293
294
|
|
|
295
|
+
if coverage:
|
|
296
|
+
refusal = check_coverage_addon_gate()
|
|
297
|
+
if refusal is not None:
|
|
298
|
+
click.echo(refusal, err=True)
|
|
299
|
+
ctx = click.get_current_context()
|
|
300
|
+
ctx.exit(2)
|
|
301
|
+
|
|
294
302
|
try:
|
|
295
303
|
if watch:
|
|
296
304
|
ctx = click.get_current_context()
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"""Stale addon detection module.
|
|
2
|
-
|
|
3
|
-
Checks whether the deployed coverage addon version matches the installed
|
|
4
|
-
gd-tools-cli package version. Prints warnings to stderr when the addon
|
|
5
|
-
is missing or stale. Fails silently on any error and can be disabled via
|
|
6
|
-
the GD_TOOLS_NO_UPDATE_CHECK environment variable.
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
import os
|
|
10
|
-
|
|
11
|
-
import click
|
|
12
|
-
from packaging.version import parse as parse_version
|
|
13
|
-
|
|
14
|
-
from gd_tools import __version__
|
|
15
|
-
from gd_tools.config import find_project_root
|
|
16
|
-
|
|
17
|
-
ADDON_VERSION_FILENAME = "_version.txt"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def check_addon_version() -> None:
|
|
21
|
-
"""Check if the deployed coverage addon version is stale.
|
|
22
|
-
|
|
23
|
-
Compares the version in _version.txt against the installed package
|
|
24
|
-
version. Prints a warning to stderr if the addon is missing or stale.
|
|
25
|
-
Fails silently on any unexpected error.
|
|
26
|
-
|
|
27
|
-
FR2: Stale Addon Check on CLI Invocation.
|
|
28
|
-
FR3: Suppressed by GD_TOOLS_NO_UPDATE_CHECK=1.
|
|
29
|
-
FR4: Uses packaging.version.parse() for comparison.
|
|
30
|
-
"""
|
|
31
|
-
# FR3.1: Environment variable disables check entirely.
|
|
32
|
-
if os.environ.get("GD_TOOLS_NO_UPDATE_CHECK") == "1":
|
|
33
|
-
return
|
|
34
|
-
|
|
35
|
-
try:
|
|
36
|
-
project_root = find_project_root()
|
|
37
|
-
version_file = (
|
|
38
|
-
project_root
|
|
39
|
-
/ "addons"
|
|
40
|
-
/ "gd-tools-coverage"
|
|
41
|
-
/ ADDON_VERSION_FILENAME
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
if not version_file.exists():
|
|
45
|
-
click.echo(
|
|
46
|
-
"WARNING: Coverage addon version file not found. "
|
|
47
|
-
"Run `gd-tools init` to deploy the addon.",
|
|
48
|
-
err=True,
|
|
49
|
-
)
|
|
50
|
-
return
|
|
51
|
-
|
|
52
|
-
addon_version = version_file.read_text(encoding="utf-8").strip()
|
|
53
|
-
stale_msg = (
|
|
54
|
-
f"WARNING: Coverage addon is outdated (v{addon_version} "
|
|
55
|
-
f"deployed, v{__version__} available). "
|
|
56
|
-
f"Run `gd-tools init` to update."
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
# FR4.1: Compare versions using packaging.version.parse().
|
|
60
|
-
try:
|
|
61
|
-
addon_parsed = parse_version(addon_version)
|
|
62
|
-
package_parsed = parse_version(__version__)
|
|
63
|
-
except (TypeError, ValueError):
|
|
64
|
-
# FR4.2: Unparseable version = treated as stale.
|
|
65
|
-
click.echo(stale_msg, err=True)
|
|
66
|
-
return
|
|
67
|
-
|
|
68
|
-
# FR2.4: Stale (addon < package)
|
|
69
|
-
if addon_parsed < package_parsed:
|
|
70
|
-
click.echo(stale_msg, err=True)
|
|
71
|
-
# FR2.5: Match = no warning
|
|
72
|
-
# FR2.6: Newer addon (downgrade) = no warning
|
|
73
|
-
except Exception:
|
|
74
|
-
# FR2.8: Fail silently on any unexpected error.
|
|
75
|
-
pass
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-coverage/coverage.gd
RENAMED
|
File without changes
|
{gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-editor/coverage_overlay.gd
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_mock.gd
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_test.gd
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gd_tools_cli-0.9.0 → gd_tools_cli-0.10.0}/src/gd_tools/addons/gd-tools-test/gd_tools_test_runner.gd
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|