Skip to content

Commit ab7bc83

Browse files
authored
mgmt self-serve, support api-version and sdkReleaseType (Azure#44900)
* script * black * fix sdk automation autorest * bring back sdk_version
1 parent a7f733b commit ab7bc83

File tree

3 files changed

+54
-21
lines changed

3 files changed

+54
-21
lines changed

eng/automation/generate.py

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ def sdk_automation(input_file: str, output_file: str):
118118
# autorest
119119
if not packages:
120120
packages = sdk_automation_autorest(config)
121+
except ValueError:
122+
logging.error("[VALIDATION] Parameter validation failed.", exc_info=True)
123+
sys.exit(1)
121124
except Exception:
122125
logging.error("[GENERATE] Code generation failed. Unknown exception", exc_info=True)
123126
if packages and len(packages) == 1:
@@ -190,8 +193,8 @@ def sdk_automation_autorest(config: dict) -> List[dict]:
190193
tag=tag,
191194
)
192195
if succeeded:
193-
compile_succeeded = compile_arm_package(sdk_root, module)
194-
if compile_succeeded:
196+
succeeded = compile_arm_package(sdk_root, module)
197+
if succeeded:
195198
stable_version = get_latest_ga_version(GROUP_ID, module, stable_version)
196199
breaking, changelog, breaking_change_items = compare_with_maven_package(
197200
sdk_root, GROUP_ID, service, stable_version, current_version, module
@@ -208,8 +211,12 @@ def sdk_automation_autorest(config: dict) -> List[dict]:
208211
"pom.xml",
209212
],
210213
"readmeMd": [readme],
211-
"artifacts": ["{0}/pom.xml".format(output_folder)]
212-
+ [jar for jar in glob.glob("{0}/target/*.jar".format(output_folder))] if succeeded else [],
214+
"artifacts": (
215+
["{0}/pom.xml".format(output_folder)]
216+
+ [jar for jar in glob.glob("{0}/target/*.jar".format(output_folder))]
217+
if succeeded
218+
else []
219+
),
213220
"apiViewArtifact": next(iter(glob.glob("{0}/target/*-sources.jar".format(output_folder))), None),
214221
"language": "Java",
215222
"result": "succeeded" if succeeded else "failed",
@@ -250,19 +257,43 @@ def sdk_automation_typespec(config: dict) -> List[dict]:
250257
return packages
251258

252259

260+
def verify_self_serve_parameters(api_version, sdk_release_type):
261+
if sdk_release_type and sdk_release_type not in ["stable", "beta"]:
262+
raise ValueError(f"Invalid SDK release type [{sdk_release_type}], only support 'stable' or 'beta'.")
263+
if api_version and sdk_release_type:
264+
if api_version.endswith("-preview") and sdk_release_type == "stable":
265+
raise ValueError(f"SDK release type is [stable], but API version [{api_version}] is preview.")
266+
logging.info(f"[SelfServe] Generate with apiVersion: {api_version} and sdkReleaseType: {sdk_release_type}")
267+
elif api_version or sdk_release_type:
268+
raise ValueError("Both [API version] and [SDK release type] parameters are required for self-serve SDK generation.")
269+
270+
253271
def sdk_automation_typespec_project(tsp_project: str, config: dict) -> dict:
254272

255273
base_dir = os.path.abspath(os.path.dirname(sys.argv[0]))
256274
sdk_root = os.path.abspath(os.path.join(base_dir, SDK_ROOT))
257275
spec_root = os.path.abspath(config["specFolder"])
258276
head_sha: str = config["headSha"]
259277
repo_url: str = config["repoHttpsUrl"]
278+
sdk_release_type: str = config["sdkReleaseType"] if "sdkReleaseType" in config else None
279+
api_version = config["apiVersion"] if "apiVersion" in config else None
280+
release_beta_sdk: bool = not sdk_release_type or sdk_release_type == "beta"
260281
breaking: bool = False
261282
changelog = ""
262283
breaking_change_items = []
263284

285+
verify_self_serve_parameters(api_version, sdk_release_type)
286+
264287
succeeded, require_sdk_integration, sdk_folder, service, module = generate_typespec_project(
265-
tsp_project, sdk_root, spec_root, head_sha, repo_url, remove_before_regen=True, group_id=GROUP_ID
288+
tsp_project,
289+
sdk_root,
290+
spec_root,
291+
head_sha,
292+
repo_url,
293+
remove_before_regen=True,
294+
group_id=GROUP_ID,
295+
api_version=api_version,
296+
generate_beta_sdk=release_beta_sdk
266297
)
267298

268299
if succeeded:
@@ -271,7 +302,7 @@ def sdk_automation_typespec_project(tsp_project: str, config: dict) -> dict:
271302
update_service_files_for_new_lib(sdk_root, service, GROUP_ID, module)
272303
update_root_pom(sdk_root, service)
273304

274-
stable_version, current_version = set_or_increase_version(sdk_root, GROUP_ID, module)
305+
stable_version, current_version = set_or_increase_version(sdk_root, GROUP_ID, module, preview=release_beta_sdk)
275306
update_parameters(None)
276307
output_folder = OUTPUT_FOLDER_FORMAT.format(service)
277308
update_version(sdk_root, output_folder)
@@ -286,7 +317,7 @@ def sdk_automation_typespec_project(tsp_project: str, config: dict) -> dict:
286317
service,
287318
get_latest_ga_version(GROUP_ID, module, stable_version),
288319
current_version,
289-
module
320+
module,
290321
)
291322
logging.info("[Changelog] Complete breaking change detection for SDK automation.")
292323
logging.info("[Changelog] Start generating changelog.")
@@ -296,7 +327,7 @@ def sdk_automation_typespec_project(tsp_project: str, config: dict) -> dict:
296327
service,
297328
get_latest_release_version(stable_version, current_version),
298329
current_version,
299-
module
330+
module,
300331
)
301332
update_changelog_version(sdk_root, output_folder, current_version)
302333
logging.info("[Changelog] Complete generating changelog.")

eng/automation/generate_utils.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from utils import update_root_pom
2121
from utils import update_version
2222
from utils import is_windows
23-
from utils import set_or_default_version
23+
from utils import set_or_increase_version
2424

2525
os.chdir(pwd)
2626

@@ -334,7 +334,9 @@ def generate_typespec_project(
334334
repo_url: str = "",
335335
remove_before_regen: bool = False,
336336
group_id: str = None,
337-
version: str = None,
337+
api_version: str = None,
338+
generate_beta_sdk: bool = True,
339+
version: str = None, # SDK version
338340
**kwargs,
339341
):
340342

@@ -366,7 +368,7 @@ def generate_typespec_project(
366368
tsp_project,
367369
]
368370
else:
369-
# sdk automation
371+
# sdk automation/self serve
370372
tsp_dir = os.path.join(spec_root, tsp_project) if spec_root else tsp_project
371373
tspconfig_valid = validate_tspconfig(tsp_dir)
372374
repo = remove_prefix(repo_url, "https://github.com/")
@@ -414,9 +416,13 @@ def generate_typespec_project(
414416
# clear existing generated source code, and regenerate
415417
drop_changes(sdk_root)
416418
remove_generated_source_code(sdk_folder, f"{group_id}.{service}")
417-
_, current_version = set_or_default_version(sdk_root, group_id, module, version=version)
419+
_, current_version = set_or_increase_version(sdk_root, group_id, module, version=version, preview = generate_beta_sdk)
418420
tsp_cmd.append("--emitter-options")
419-
tsp_cmd.append(f'package-version={current_version}')
421+
emitter_options = f'package-version={current_version}'
422+
# currently for self-serve, may also need it in regular generation
423+
if api_version:
424+
emitter_options += f';api-version={api_version}'
425+
tsp_cmd.append(emitter_options)
420426
# regenerate
421427
check_call(tsp_cmd, sdk_root)
422428
succeeded = True

eng/automation/utils.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -352,17 +352,13 @@ def set_or_increase_version(
352352

353353
# 1.0.0-beta.1 -> [1,0,0,"-beta.1"]
354354
current_versions = list(re.findall(version_pattern, current_version)[0])
355-
# 1.0.0 -> [(1,0,0,"")]
356-
# 1.0.0-beta.1 -> [(1,0,0,"-beta.1")]
357-
stable_versions = re.findall(version_pattern, stable_version)
358-
# no stable version
359-
if len(stable_versions) < 1 or stable_versions[0][-1] != "":
360-
if not preview:
361-
current_versions[-1] = ""
355+
# if not preview, and version is not specified, set current version to be stable version
356+
if not preview and not version:
357+
current_versions[-1] = ""
362358
current_version = version_format.format(*current_versions)
363359
if not stable_version:
364360
stable_version = current_version
365-
logging.info('[VERSION][Not Found] cannot find stable version, current version "{0}"'.format(current_version))
361+
logging.info('[VERSION] stable release, auto-set current version to "{0}"'.format(current_version))
366362

367363
write_version(version_file, lines, version_index, project, stable_version, current_version)
368364
else:

0 commit comments

Comments
 (0)