Skip to content

Commit 5ea136f

Browse files
committed
Log runtime metadata before scheduled test runs
Print static runtime metadata in sbin/run_tests.py before writing and executing the schedule: - Sublime Text version (via `subl --version`) - Package Control version (from installed package metadata) This makes local run logs self-describing for troubleshooting and future build/version freshness checks.
1 parent 3bb9854 commit 5ea136f

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

sbin/run_tests.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import subprocess
1616
import sys
1717
import time
18+
import zipfile
1819

1920
# todo: allow different sublime versions
2021

@@ -157,6 +158,55 @@ def restore_coverage_file(path, package):
157158
f.write(txt)
158159

159160

161+
def print_runtime_metadata():
162+
sublime_text_version = detect_sublime_text_version()
163+
package_control_version = detect_package_control_version()
164+
165+
print("Runtime:")
166+
print(" Sublime Text: {}".format(sublime_text_version or "unknown"))
167+
print(" Package Control: {}".format(package_control_version or "unknown"))
168+
169+
170+
def detect_sublime_text_version():
171+
try:
172+
output = subprocess.check_output(
173+
["subl", "--version"],
174+
stderr=subprocess.STDOUT,
175+
universal_newlines=True,
176+
)
177+
except Exception:
178+
return None
179+
180+
for line in output.splitlines():
181+
line = line.strip()
182+
if line:
183+
return line
184+
185+
return None
186+
187+
188+
def detect_package_control_version():
189+
installed_packages_dir = os.path.join(
190+
os.path.dirname(PACKAGES_DIR_PATH),
191+
"Installed Packages",
192+
)
193+
package_path = os.path.join(
194+
installed_packages_dir,
195+
"Package Control.sublime-package",
196+
)
197+
if not os.path.isfile(package_path):
198+
return None
199+
200+
try:
201+
with zipfile.ZipFile(package_path, "r") as package_zip:
202+
metadata = json.loads(package_zip.read("package-metadata.json").decode("utf-8"))
203+
except Exception:
204+
return None
205+
206+
version = metadata.get("version") if isinstance(metadata, dict) else None
207+
return str(version) if version else None
208+
209+
160210
def main(default_schedule_info):
161211
package_under_test = default_schedule_info['package']
162212
output_dir = os.path.join(UT_OUTPUT_DIR_PATH, package_under_test)
@@ -165,6 +215,8 @@ def main(default_schedule_info):
165215

166216
default_schedule_info['output'] = output_file
167217

218+
print_runtime_metadata()
219+
168220
for i in range(3):
169221
create_dir_if_not_exists(output_dir)
170222
delete_file_if_exists(output_file)

0 commit comments

Comments
 (0)