Skip to content

Commit b19c137

Browse files
msyycl0lawrence
authored andcommitted
[SDK generation pipeline] allow generate from typespec and swagger at same time (Azure#36802)
* update * fix * review * review * review * review
1 parent 6546571 commit b19c137

File tree

1 file changed

+21
-34
lines changed

1 file changed

+21
-34
lines changed

tools/azure-sdk-tools/packaging_tools/sdk_generator.py

+21-34
Original file line numberDiff line numberDiff line change
@@ -273,30 +273,13 @@ def main(generate_input, generate_output):
273273
result = {}
274274
python_tag = data.get("python_tag")
275275
package_total = set()
276-
spec_word = "readmeMd"
277-
if "relatedReadmeMdFiles" in data:
278-
readme_files = data["relatedReadmeMdFiles"]
279-
elif "relatedReadmeMdFile" in data:
280-
input_readme = data["relatedReadmeMdFile"]
281-
if "specification" in spec_folder:
282-
spec_folder = str(Path(spec_folder.split("specification")[0]))
283-
if "specification" not in input_readme:
284-
input_readme = str(Path("specification") / input_readme)
285-
readme_files = [input_readme]
286-
else:
287-
# ["specification/confidentialledger/ConfientialLedger"]
288-
if isinstance(data["relatedTypeSpecProjectFolder"], str):
289-
readme_files = [data["relatedTypeSpecProjectFolder"]]
290-
else:
291-
readme_files = data["relatedTypeSpecProjectFolder"]
292-
spec_word = "typespecProject"
293-
294-
for input_readme in readme_files:
295-
_LOGGER.info(f"[CODEGEN]({input_readme})codegen begin")
276+
readme_and_tsp = data.get("relatedReadmeMdFiles", []) + data.get("relatedTypeSpecProjectFolder", [])
277+
for readme_or_tsp in readme_and_tsp:
278+
_LOGGER.info(f"[CODEGEN]({readme_or_tsp})codegen begin")
296279
try:
297-
if "resource-manager" in input_readme:
298-
relative_path_readme = str(Path(spec_folder, input_readme))
299-
update_metadata_for_multiapi_package(spec_folder, input_readme)
280+
if "resource-manager" in readme_or_tsp:
281+
relative_path_readme = str(Path(spec_folder, readme_or_tsp))
282+
update_metadata_for_multiapi_package(spec_folder, readme_or_tsp)
300283
del_outdated_files(relative_path_readme)
301284
config = generate(
302285
CONFIG_FILE,
@@ -307,14 +290,14 @@ def main(generate_input, generate_output):
307290
force_generation=True,
308291
python_tag=python_tag,
309292
)
310-
elif "data-plane" in input_readme:
311-
config = gen_dpg(input_readme, data.get("autorestConfig", ""), dpg_relative_folder(spec_folder))
293+
elif "data-plane" in readme_or_tsp:
294+
config = gen_dpg(readme_or_tsp, data.get("autorestConfig", ""), dpg_relative_folder(spec_folder))
312295
else:
313-
del_outdated_generated_files(str(Path(spec_folder, input_readme)))
314-
config = gen_typespec(input_readme, spec_folder, data["headSha"], data["repoHttpsUrl"])
296+
del_outdated_generated_files(str(Path(spec_folder, readme_or_tsp)))
297+
config = gen_typespec(readme_or_tsp, spec_folder, data["headSha"], data["repoHttpsUrl"])
315298
package_names = get_package_names(sdk_folder)
316299
except Exception as e:
317-
_LOGGER.error(f"fail to generate sdk for {input_readme}: {str(e)}")
300+
_LOGGER.error(f"fail to generate sdk for {readme_or_tsp}: {str(e)}")
318301
for hint_message in [
319302
"======================================= Whant Can I do ========================================================================",
320303
"If you are from service team, please first check if the failure happens only to Python automation, or for all SDK automations. ",
@@ -324,9 +307,10 @@ def main(generate_input, generate_output):
324307
]:
325308
_LOGGER.error(hint_message)
326309
raise e
327-
_LOGGER.info(f"[CODEGEN]({input_readme})codegen end. [(packages:{str(package_names)})]")
310+
_LOGGER.info(f"[CODEGEN]({readme_or_tsp})codegen end. [(packages:{str(package_names)})]")
328311

329312
# folder_name: "sdk/containerservice"; package_name: "azure-mgmt-containerservice"
313+
spec_word = "readmeMd" if "readme.md" in readme_or_tsp else "typespecProject"
330314
for folder_name, package_name in package_names:
331315
if package_name in package_total:
332316
continue
@@ -337,14 +321,14 @@ def main(generate_input, generate_output):
337321
package_entry = {}
338322
package_entry["packageName"] = package_name
339323
package_entry["path"] = [folder_name]
340-
package_entry[spec_word] = [input_readme]
324+
package_entry[spec_word] = [readme_or_tsp]
341325
package_entry["tagIsStable"] = not judge_tag_preview(sdk_code_path)
342-
readme_python_content = get_readme_python_content(str(Path(spec_folder) / input_readme))
326+
readme_python_content = get_readme_python_content(str(Path(spec_folder) / readme_or_tsp))
343327
package_entry["isMultiapi"] = is_multiapi_package(readme_python_content)
344328
result[package_name] = package_entry
345329
else:
346330
result[package_name]["path"].append(folder_name)
347-
result[package_name][spec_word].append(input_readme)
331+
result[package_name][spec_word].append(readme_or_tsp)
348332

349333
# Generate some necessary file for new service
350334
init_new_service(package_name, folder_name)
@@ -359,7 +343,7 @@ def main(generate_input, generate_output):
359343
folder_name,
360344
package_name,
361345
spec_folder,
362-
input_readme,
346+
readme_or_tsp,
363347
)
364348
except Exception as e:
365349
_LOGGER.error(f"fail to update meta: {str(e)}")
@@ -386,7 +370,10 @@ def main(generate_input, generate_output):
386370
# remove duplicates
387371
for value in result.values():
388372
value["path"] = list(set(value["path"]))
389-
value[spec_word] = list(set(value[spec_word]))
373+
if value.get("typespecProject"):
374+
value["typespecProject"] = list(set(value["typespecProject"]))
375+
if value.get("readmeMd"):
376+
value["readmeMd"] = list(set(value["readmeMd"]))
390377

391378
with open(generate_output, "w") as writer:
392379
json.dump(result, writer)

0 commit comments

Comments
 (0)