Skip to content

Commit c61e7ba

Browse files
committed
Improve CLDC11 API compatibility workflow
1 parent 1e59a97 commit c61e7ba

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

scripts/cldc11_api_compat_check.py renamed to .github/scripts/cldc11_api_compat_check.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@
1616
from typing import Dict, Iterable, List, Optional, Set, Tuple
1717

1818

19+
def log(message: str) -> None:
20+
"""Emit a progress message immediately."""
21+
22+
print(message, flush=True)
23+
24+
1925
Member = Tuple[str, str, bool, str]
2026
"""
2127
A member descriptor in the form `(name, descriptor, is_static, kind)`.
@@ -145,14 +151,17 @@ def ensure_subset(
145151
ok = True
146152
messages: List[str] = []
147153

148-
for class_name in sorted(source_classes):
154+
for index, class_name in enumerate(sorted(source_classes), start=1):
149155
try:
150156
source_api = collect_class_api_from_file(class_name, source_root, javap_cmd)
151157
except JavapError as exc:
152158
ok = False
153159
messages.append(f"Failed to read {class_name} from {source_root}: {exc}")
154160
continue
155161

162+
if index % 25 == 0:
163+
log(f" Processed {index}/{len(source_classes)} classes for {target_label} subset check...")
164+
156165
target_api = target_lookup(class_name)
157166
if target_api is None:
158167
ok = False
@@ -172,8 +181,10 @@ def ensure_subset(
172181
def collect_javaapi_map(javaapi_root: str, javap_cmd: str) -> Dict[str, ApiSurface]:
173182
classes = discover_classes(javaapi_root)
174183
api_map: Dict[str, ApiSurface] = {}
175-
for class_name in classes:
184+
for index, class_name in enumerate(classes, start=1):
176185
api_map[class_name] = collect_class_api_from_file(class_name, javaapi_root, javap_cmd)
186+
if index % 25 == 0:
187+
log(f" Indexed {index}/{len(classes)} vm/JavaAPI classes...")
177188
return api_map
178189

179190

@@ -227,7 +238,11 @@ def main(argv: Optional[Iterable[str]] = None) -> int:
227238
parser.add_argument("--extra-report", required=True, help="File path to write the extra API report")
228239
parser.add_argument(
229240
"--javap",
230-
default=os.path.join(os.environ.get("JAVA_HOME", ""), "bin", "javap"),
241+
default=(
242+
os.path.join(os.environ.get("JAVA_HOME", ""), "bin", "javap")
243+
if os.environ.get("JAVA_HOME")
244+
else "javap"
245+
),
231246
help="Path to the javap executable from Java SE 11",
232247
)
233248
args = parser.parse_args(argv)
@@ -239,7 +254,10 @@ def main(argv: Optional[Iterable[str]] = None) -> int:
239254
print(f"No class files found under {args.cldc_classes}", file=sys.stderr)
240255
return 1
241256

257+
log(f"Discovered {len(cldc_classes)} CLDC11 classes; building API maps...")
258+
242259
javaapi_map = collect_javaapi_map(args.javaapi_classes, javap_cmd)
260+
log(f"Collected API surface for {len(javaapi_map)} vm/JavaAPI classes")
243261

244262
def jdk_lookup(name: str) -> Optional[ApiSurface]:
245263
try:
@@ -250,6 +268,7 @@ def jdk_lookup(name: str) -> Optional[ApiSurface]:
250268
def javaapi_lookup(name: str) -> Optional[ApiSurface]:
251269
return javaapi_map.get(name)
252270

271+
log("Validating CLDC11 API against Java SE 11...")
253272
java_ok, java_messages = ensure_subset(
254273
cldc_classes,
255274
args.cldc_classes,
@@ -258,6 +277,7 @@ def javaapi_lookup(name: str) -> Optional[ApiSurface]:
258277
javap_cmd,
259278
)
260279

280+
log("Validating CLDC11 API against vm/JavaAPI...")
261281
api_ok, api_messages = ensure_subset(
262282
cldc_classes,
263283
args.cldc_classes,
@@ -268,6 +288,7 @@ def javaapi_lookup(name: str) -> Optional[ApiSurface]:
268288

269289
cldc_map = {name: collect_class_api_from_file(name, args.cldc_classes, javap_cmd) for name in cldc_classes}
270290
write_extra_report(cldc_map, javaapi_map, args.extra_report)
291+
log(f"Wrote extra API report to {args.extra_report}")
271292

272293
messages = java_messages + api_messages
273294
if messages:

.github/workflows/cldc11-api-compatibility.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,24 @@ name: CLDC11 API Compatibility
22

33
on:
44
push:
5+
branches: [master]
56
paths:
67
- 'Ports/CLDC11/**'
78
- 'vm/JavaAPI/**'
89
- '.github/workflows/cldc11-api-compatibility.yml'
9-
- 'scripts/cldc11_api_compat_check.py'
10+
- '.github/scripts/cldc11_api_compat_check.py'
1011
pull_request:
1112
paths:
1213
- 'Ports/CLDC11/**'
1314
- 'vm/JavaAPI/**'
1415
- '.github/workflows/cldc11-api-compatibility.yml'
15-
- 'scripts/cldc11_api_compat_check.py'
16+
- '.github/scripts/cldc11_api_compat_check.py'
1617

1718
jobs:
1819
api-compatibility:
1920
runs-on: ubuntu-latest
21+
permissions:
22+
contents: read
2023

2124
steps:
2225
- name: Checkout repository
@@ -46,7 +49,7 @@ jobs:
4649

4750
- name: Validate CLDC11 API subset
4851
run: |
49-
python scripts/cldc11_api_compat_check.py \
52+
python .github/scripts/cldc11_api_compat_check.py \
5053
--cldc-classes Ports/CLDC11/build/classes \
5154
--javaapi-classes vm/JavaAPI/target/classes \
5255
--extra-report cldc11-extra-apis.txt

0 commit comments

Comments
 (0)