Skip to content

Commit 20828f5

Browse files
SDK automation, clean up the SDK folder, if it is conversion from Swagger to TypeSpec (#40727)
* regen md, specification/securitydevops is removed * handle SDK automation switch from Swagger to TypeSpec
1 parent eb0d42f commit 20828f5

File tree

3 files changed

+120
-4
lines changed

3 files changed

+120
-4
lines changed

eng/mgmt/automation/generate_data.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from utils import update_root_pom
1818
from utils import ListIndentDumper
1919

20-
from generate_utils import generate_typespec_project
20+
from generate_utils import generate_typespec_project, clean_sdk_folder_if_swagger
2121

2222
GROUP_ID = "com.azure"
2323
DPG_ARGUMENTS = "--sdk-integration --generate-samples --generate-tests"
@@ -35,6 +35,15 @@ def sdk_automation_typespec_project(tsp_project: str, config: dict) -> dict:
3535
tsp_project, sdk_root, spec_root, head_sha, repo_url
3636
)
3737

38+
if not succeeded:
39+
# check whether this is migration from Swagger
40+
clean_sdk_folder_succeeded = clean_sdk_folder_if_swagger(sdk_root, sdk_folder)
41+
if clean_sdk_folder_succeeded:
42+
# re-generate
43+
succeeded, require_sdk_integration, sdk_folder, service, module = generate_typespec_project(
44+
tsp_project, sdk_root, spec_root, head_sha, repo_url
45+
)
46+
3847
if succeeded:
3948
# TODO (weidxu): move to typespec-java
4049
if require_sdk_integration:
@@ -45,6 +54,21 @@ def sdk_automation_typespec_project(tsp_project: str, config: dict) -> dict:
4554
# compile
4655
succeeded = compile_package(sdk_root, GROUP_ID, module)
4756

57+
if not succeeded:
58+
# check whether this is migration from Swagger
59+
clean_sdk_folder_succeeded = clean_sdk_folder_if_swagger(sdk_root, sdk_folder)
60+
if clean_sdk_folder_succeeded:
61+
# re-generate
62+
succeeded, require_sdk_integration, sdk_folder, service, module = generate_typespec_project(
63+
tsp_project, sdk_root, spec_root, head_sha, repo_url
64+
)
65+
if require_sdk_integration:
66+
set_or_default_version(sdk_root, GROUP_ID, module)
67+
update_service_ci_and_pom(sdk_root, service, GROUP_ID, module)
68+
update_root_pom(sdk_root, service)
69+
# compile
70+
succeeded = compile_package(sdk_root, GROUP_ID, module)
71+
4872
# output
4973
if sdk_folder and module and service:
5074
artifacts = ["{0}/pom.xml".format(sdk_folder)]
@@ -238,7 +262,7 @@ def generate(
238262
autorest: str,
239263
use: str,
240264
autorest_options: str = "",
241-
readme: str = None
265+
readme: str = None,
242266
) -> bool:
243267
namespace = "com.{0}".format(module.replace("-", "."))
244268
output_dir = os.path.join(sdk_root, "sdk", service, module)

eng/mgmt/automation/generate_utils.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,28 @@ def find_sdk_folder(sdk_root: str):
465465
tsp_location_item: str = git_items[0]
466466
sdk_folder = tsp_location_item[1:].strip()[0 : -len("/tsp-location.yaml")]
467467

468-
cmd = ["git", "reset", "."]
468+
cmd = ["git", "reset", ".", "-q"]
469469
check_call(cmd, sdk_root)
470470

471471
return sdk_folder
472+
473+
474+
def clean_sdk_folder_if_swagger(sdk_root: str, sdk_folder: str) -> bool:
475+
succeeded = False
476+
# try to find the sdk_folder
477+
if not sdk_folder:
478+
sdk_folder = find_sdk_folder(sdk_root)
479+
if sdk_folder:
480+
sdk_path = os.path.join(sdk_root, sdk_folder)
481+
# check whether this is migration from Swagger
482+
if os.path.exists(os.path.join(sdk_path, "swagger")):
483+
logging.info(f"[GENERATE] Delete folder: {sdk_folder}")
484+
print(
485+
"Existing package in SDK was from Swagger. It cannot be automatically converted to package from TypeSpec. Generate a fresh package from TypeSpec.",
486+
file=sys.stderr,
487+
)
488+
# delete the folder
489+
shutil.rmtree(sdk_path, ignore_errors=True)
490+
491+
succeeded = True
492+
return succeeded

0 commit comments

Comments
 (0)