@@ -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+
253271def 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." )
0 commit comments