Skip to content

Commit 992ab63

Browse files
authored
Remove outdated files for SDK generation from Typespec (#35781)
* remove outdated files * fix
1 parent b0b0bf9 commit 992ab63

File tree

2 files changed

+68
-19
lines changed

2 files changed

+68
-19
lines changed

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

Lines changed: 64 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,43 @@
2626
_DPG_README = "README.md"
2727

2828

29+
# input example: "../azure-rest-api-specs/specification/informatica/Informatica.DataManagement"
30+
def del_outdated_generated_files(readme: str):
31+
tspconfig = Path(readme) / "tspconfig.yaml"
32+
if not tspconfig.exists():
33+
_LOGGER.info(f"do not find tspconfig.yaml: {tspconfig}")
34+
return
35+
36+
with open(tspconfig, "r") as file_in:
37+
content = yaml.safe_load(file_in)
38+
# tspconfig.yaml example: https://github.com/Azure/azure-rest-api-specs/pull/29080/files
39+
service_dir = content.get("parameters", {}).get("service-dir", {}).get("default", "")
40+
package_dir = content.get("options", {}).get("@azure-tools/typespec-python", {}).get("package-dir", "")
41+
if not service_dir or not package_dir:
42+
_LOGGER.info(f"do not find service-dir or package-dir in tspconfig.yaml: {tspconfig}")
43+
return
44+
target_dir = Path(service_dir) / package_dir / package_dir.split("-")[0]
45+
if target_dir.exists():
46+
generated_files = [
47+
file
48+
for file in target_dir.glob("**/*")
49+
if all(
50+
i not in str(file)
51+
for i in (
52+
"__pycache__",
53+
"node_modules",
54+
".tox",
55+
".mypy_cache",
56+
)
57+
)
58+
and file.suffix == ".py"
59+
]
60+
for file in generated_files:
61+
if file.stem != "_patch":
62+
os.remove(file)
63+
_LOGGER.info(f"delete outdated generated files except _patch.py successfully")
64+
65+
2966
def check_api_version_in_subfolder(sdk_code_path: str):
3067
folders = glob(f"{sdk_code_path}/**/_configuration.py", recursive=True)
3168
configs = [str(Path(f)) for f in folders if re.compile("v\d{4}_\d{2}_\d{2}").search(f)]
@@ -75,6 +112,7 @@ def call_build_config(package_name: str, folder_name: str):
75112
# shell=True,
76113
# )
77114

115+
78116
def init_new_service(package_name, folder_name):
79117
if "azure-mgmt-" in package_name:
80118
call_build_config(package_name, folder_name)
@@ -88,7 +126,7 @@ def init_new_service(package_name, folder_name):
88126
generate_ci(
89127
template_path=Path("scripts/quickstart_tooling_dpg/template_ci"),
90128
folder_path=Path(folder_name),
91-
package_name=package_name
129+
package_name=package_name,
92130
)
93131

94132

@@ -105,10 +143,12 @@ def update_servicemetadata(sdk_folder, data, config, folder_name, package_name,
105143
else:
106144
metadata = {}
107145

108-
metadata.update({
109-
"commit": data["headSha"],
110-
"repository_url": data["repoHttpsUrl"],
111-
})
146+
metadata.update(
147+
{
148+
"commit": data["headSha"],
149+
"repository_url": data["repoHttpsUrl"],
150+
}
151+
)
112152
if for_swagger_gen:
113153
readme_file = str(Path(spec_folder, input_readme))
114154
global_conf = config["meta"]
@@ -122,12 +162,14 @@ def update_servicemetadata(sdk_folder, data, config, folder_name, package_name,
122162
cmd += build_autorest_options(global_conf, local_conf)
123163

124164
# metadata
125-
metadata.update({
126-
"autorest": global_conf["autorest_options"]["version"],
127-
"use": global_conf["autorest_options"]["use"],
128-
"autorest_command": " ".join(cmd),
129-
"readme": input_readme,
130-
})
165+
metadata.update(
166+
{
167+
"autorest": global_conf["autorest_options"]["version"],
168+
"use": global_conf["autorest_options"]["use"],
169+
"autorest_command": " ".join(cmd),
170+
"readme": input_readme,
171+
}
172+
)
131173
else:
132174
metadata["typespec_src"] = input_readme
133175
metadata.update(config)
@@ -362,33 +404,38 @@ def format_samples(sdk_code_path) -> None:
362404

363405
_LOGGER.info(f"format generated_samples successfully")
364406

407+
365408
def generate_ci(template_path: Path, folder_path: Path, package_name: str) -> None:
366409
ci = Path(folder_path, "ci.yml")
367410
service_name = folder_path.name
368411
safe_name = package_name.replace("-", "")
369412
if not ci.exists():
370413
env = Environment(loader=FileSystemLoader(template_path), keep_trailing_newline=True)
371-
template = env.get_template('ci.yml')
414+
template = env.get_template("ci.yml")
372415
content = template.render(package_name=package_name, service_name=service_name, safe_name=safe_name)
373416
else:
374417
with open(ci, "r") as file_in:
375418
content = file_in.readlines()
376419
for line in content:
377420
if package_name in line:
378421
return
379-
content.append(f' - name: {package_name}\n')
380-
content.append(f' safeName: {safe_name}\n')
422+
content.append(f" - name: {package_name}\n")
423+
content.append(f" safeName: {safe_name}\n")
381424
with open(ci, "w") as file_out:
382425
file_out.writelines(content)
383426

427+
384428
def gen_typespec(typespec_relative_path: str, spec_folder: str, head_sha: str, rest_repo_url: str) -> Dict[str, Any]:
385429
typespec_python = "@azure-tools/typespec-python"
386430
autorest_python = "@autorest/python"
387431
# call scirpt to generate sdk
388432
try:
389433
tsp_dir = (Path(spec_folder) / typespec_relative_path).resolve()
390-
repo_url = rest_repo_url.replace('https://github.com/', "")
391-
check_output(f"tsp-client init --tsp-config {tsp_dir} --local-spec-repo {tsp_dir} --commit {head_sha} --repo {repo_url} --debug", shell=True)
434+
repo_url = rest_repo_url.replace("https://github.com/", "")
435+
check_output(
436+
f"tsp-client init --tsp-config {tsp_dir} --local-spec-repo {tsp_dir} --commit {head_sha} --repo {repo_url} --debug",
437+
shell=True,
438+
)
392439
except CalledProcessError as e:
393440
_LOGGER.error(f"Failed to generate sdk from typespec: {e.output.decode('utf-8')}")
394441
raise e
@@ -399,7 +446,7 @@ def gen_typespec(typespec_relative_path: str, spec_folder: str, head_sha: str, r
399446
data = json.load(file_in)
400447
npm_package_verstion = {
401448
typespec_python: data["dependencies"][typespec_python],
402-
autorest_python: autorest_python_version,
449+
autorest_python: autorest_python_version,
403450
}
404451

405452
return npm_package_verstion

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
return_origin_path,
3232
check_api_version_in_subfolder,
3333
call_build_config,
34+
del_outdated_generated_files,
3435
)
3536
from .conf import CONF_NAME
3637

@@ -90,7 +91,7 @@ def after_multiapi_combiner(sdk_code_path: str, package_name: str, folder_name:
9091
_LOGGER.info(f"do not find {toml_file}")
9192

9293

93-
def del_outdated_folder(readme: str):
94+
def del_outdated_samples(readme: str):
9495
python_readme = Path(readme).parent / "readme.python.md"
9596
if not python_readme.exists():
9697
_LOGGER.info(f"do not find python configuration: {python_readme}")
@@ -271,7 +272,7 @@ def main(generate_input, generate_output):
271272
if "resource-manager" in input_readme:
272273
relative_path_readme = str(Path(spec_folder, input_readme))
273274
update_metadata_for_multiapi_package(spec_folder, input_readme)
274-
del_outdated_folder(relative_path_readme)
275+
del_outdated_samples(relative_path_readme)
275276
config = generate(
276277
CONFIG_FILE,
277278
sdk_folder,
@@ -284,6 +285,7 @@ def main(generate_input, generate_output):
284285
elif "data-plane" in input_readme:
285286
config = gen_dpg(input_readme, data.get("autorestConfig", ""), dpg_relative_folder(spec_folder))
286287
else:
288+
del_outdated_generated_files(str(Path(spec_folder, input_readme)))
287289
config = gen_typespec(input_readme, spec_folder, data["headSha"], data["repoHttpsUrl"])
288290
package_names = get_package_names(sdk_folder)
289291
_LOGGER.info(f"[CODEGEN]({input_readme})codegen end. [(packages:{str(package_names)})]")

0 commit comments

Comments
 (0)