Skip to content

Commit 6b6ec21

Browse files
authored
Merge branch 'main' into fix/load-project-skills-git-root
2 parents 2e9088c + 7157761 commit 6b6ec21

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

.github/scripts/check_sdk_api_breakage.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,8 +551,20 @@ def _compute_breakages(old_root, new_root, cfg: PackageConfig) -> tuple[int, int
551551
except Exception as e:
552552
raise RuntimeError(f"Failed to resolve root module '{pkg}'") from e
553553

554-
old_exports = _extract_exported_names(old_mod)
555554
new_exports = _extract_exported_names(new_mod)
555+
try:
556+
old_exports = _extract_exported_names(old_mod)
557+
except ValueError as e:
558+
# The API breakage check relies on a curated public surface defined via
559+
# __all__. If the previous release didn't define (or couldn't statically
560+
# evaluate) __all__, we can't compute meaningful breakages.
561+
#
562+
# In this situation, skip rather than failing the entire workflow.
563+
print(
564+
f"::notice title={title}::Skipping breakage check; previous release "
565+
f"has no statically-evaluable {pkg}.__all__: {e}"
566+
)
567+
return 0, 0
556568

557569
removed = sorted(old_exports - new_exports)
558570

tests/ci_scripts/test_check_sdk_api_breakage.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,23 @@ def test_removed_public_method_with_deprecation_is_not_undeprecated(tmp_path):
210210
assert undeprecated == 0
211211

212212

213+
def test_missing_all_in_previous_release_skips_breakage_check(tmp_path):
214+
"""If previous release lacks __all__, skip instead of failing workflow."""
215+
old_pkg = tmp_path / "old" / "openhands" / "sdk"
216+
old_pkg.mkdir(parents=True)
217+
(tmp_path / "old" / "openhands" / "__init__.py").write_text("")
218+
(old_pkg / "__init__.py").write_text("# no __all__ in previous release\n")
219+
220+
_write_pkg_init(tmp_path, "new", ["Foo"])
221+
222+
old_root = griffe.load("openhands.sdk", search_paths=[str(tmp_path / "old")])
223+
new_root = griffe.load("openhands.sdk", search_paths=[str(tmp_path / "new")])
224+
225+
total_breaks, undeprecated = _prod._compute_breakages(old_root, new_root, _SDK_CFG)
226+
assert total_breaks == 0
227+
assert undeprecated == 0
228+
229+
213230
def test_parse_version_simple():
214231
v = _parse_version("1.2.3")
215232
assert v.major == 1

0 commit comments

Comments
 (0)