2121 is_first_release ,
2222)
2323from generate_data import (
24- sdk_automation as sdk_automation_data ,
2524 sdk_automation_typespec_project as sdk_automation_typespec_project_data ,
2625)
2726from generate_utils import (
2827 compare_with_maven_package ,
2928 compile_arm_package ,
30- generate ,
31- get_and_update_service_from_api_specs ,
32- get_suffix_from_api_specs ,
33- update_spec ,
3429 generate_typespec_project ,
35- is_mgmt_premium ,
3630)
3731
3832os .chdir (pwd )
3933
4034
41- def update_parameters (suffix ):
42- # update changeable parameters in parameters.py
43- global SUFFIX , NAMESPACE_SUFFIX , ARTIFACT_SUFFIX , NAMESPACE_FORMAT , ARTIFACT_FORMAT , OUTPUT_FOLDER_FORMAT
44-
45- SUFFIX = suffix
46-
47- NAMESPACE_SUFFIX = ".{0}" .format (SUFFIX ) if SUFFIX else ""
48- ARTIFACT_SUFFIX = "-{0}" .format (SUFFIX ) if SUFFIX else ""
49- NAMESPACE_FORMAT = "com.azure.resourcemanager.{{0}}{0}" .format (NAMESPACE_SUFFIX )
50- ARTIFACT_FORMAT = "azure-resourcemanager-{{0}}{0}" .format (ARTIFACT_SUFFIX )
51- OUTPUT_FOLDER_FORMAT = "sdk/{{0}}/{0}" .format (ARTIFACT_FORMAT )
52-
53-
5435def parse_args () -> (argparse .ArgumentParser , argparse .Namespace ):
5536 parser = argparse .ArgumentParser ()
56- parser .add_argument (
57- "--spec-root" ,
58- default = "https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/" ,
59- help = "Spec root folder" ,
60- )
61- parser .add_argument (
62- "-r" ,
63- "--readme" ,
64- help = 'Readme path, Sample: "storage" or "specification/storage/resource-manager/readme.md"' ,
65- )
66- parser .add_argument (
67- "-c" ,
68- "--tsp-config" ,
69- help = "The top level directory where the tspconfig.yaml for the service lives. "
70- "Currently only support remote url with specific commitID "
71- "e.g. https://github.com/Azure/azure-rest-api-specs/blob/042e4045dedff4baaf5ae551bf6c8087fbdacd40/specification/deviceregistry/DeviceRegistry.Management/tspconfig.yaml" ,
72- )
73- parser .add_argument ("-t" , "--tag" , help = "Specific tag" )
74- parser .add_argument ("-v" , "--version" , help = "Specific sdk version" )
75- parser .add_argument (
76- "-s" ,
77- "--service" ,
78- help = "Service Name if not the same as spec name" ,
79- )
80- parser .add_argument (
81- "-u" ,
82- "--use" ,
83- default = AUTOREST_JAVA ,
84- help = "Autorest java plugin" ,
85- )
86- parser .add_argument (
87- "--autorest" ,
88- default = AUTOREST_CORE_VERSION ,
89- help = "Autorest version" ,
90- )
91- parser .add_argument (
92- "--autorest-options" ,
93- default = "" ,
94- help = "Additional autorest options" ,
95- )
96- parser .add_argument ("--suffix" , help = "Suffix for namespace and artifact" )
97- parser .add_argument (
98- "--auto-commit-external-change" ,
99- action = "store_true" ,
100- help = "Automatic commit the generated code" ,
101- )
102- parser .add_argument ("--user-name" , help = "User Name for commit" )
103- parser .add_argument ("--user-email" , help = "User Email for commit" )
10437 parser .add_argument (
10538 "config" ,
10639 nargs = "*" ,
@@ -119,9 +52,6 @@ def sdk_automation(input_file: str, output_file: str):
11952 try :
12053 # typespec
12154 packages = sdk_automation_typespec (config )
122- # autorest
123- if not packages :
124- packages = sdk_automation_autorest (config )
12555 except ValueError :
12656 logging .error ("[VALIDATION] Parameter validation failed." , exc_info = True )
12757 sys .exit (1 )
@@ -141,109 +71,6 @@ def sdk_automation(input_file: str, output_file: str):
14171 sys .exit (1 )
14272
14373
144- def sdk_automation_autorest (config : dict ) -> List [dict ]:
145- base_dir = os .path .abspath (os .path .dirname (sys .argv [0 ]))
146- sdk_root = os .path .abspath (os .path .join (base_dir , SDK_ROOT ))
147- api_specs_file = os .path .join (base_dir , API_SPECS_FILE )
148-
149- packages = []
150- breaking = False
151- changelog = ""
152- breaking_change_items = []
153- if "relatedReadmeMdFiles" not in config or not config ["relatedReadmeMdFiles" ]:
154- return packages
155-
156- for readme in config ["relatedReadmeMdFiles" ]:
157- match = re .search (
158- r"specification/([^/]+)/resource-manager((?:/[^/]+)*)/readme.md" ,
159- readme ,
160- re .IGNORECASE ,
161- )
162- if not match :
163- logging .info ("[Skip] readme path does not format as specification/*/resource-manager/*/readme.md" )
164- else :
165- spec = match .group (1 )
166- spec = update_spec (spec , match .group (2 ))
167- service = get_and_update_service_from_api_specs (api_specs_file , spec , truncate_service = True )
168-
169- pre_suffix = SUFFIX
170- suffix = get_suffix_from_api_specs (api_specs_file , spec )
171- if suffix is None :
172- suffix = SUFFIX
173- update_parameters (suffix )
174-
175- # TODO: use specific function to detect tag in "resources" spec/service
176- tag = None
177- if service == "resources" and spec == service :
178- with open (os .path .join (config ["specFolder" ], readme )) as fin :
179- tag_match = re .search (r"tag: (package-resources-\S+)" , fin .read ())
180- if tag_match :
181- tag = tag_match .group (1 )
182- else :
183- tag = "package-resources-2025-04"
184-
185- module = ARTIFACT_FORMAT .format (service )
186- output_folder = OUTPUT_FOLDER_FORMAT .format (service )
187- namespace = NAMESPACE_FORMAT .format (service )
188- stable_version , current_version = set_or_increase_version (sdk_root , GROUP_ID , module )
189- succeeded = generate (
190- sdk_root ,
191- service ,
192- spec_root = config ["specFolder" ],
193- readme = readme ,
194- autorest = AUTOREST_CORE_VERSION ,
195- use = AUTOREST_JAVA ,
196- output_folder = output_folder ,
197- module = module ,
198- namespace = namespace ,
199- tag = tag ,
200- premium = is_mgmt_premium (module ),
201- )
202- if succeeded :
203- succeeded = compile_arm_package (sdk_root , module )
204- if succeeded :
205- stable_version = get_latest_ga_version (GROUP_ID , module , stable_version )
206- breaking , changelog , breaking_change_items = compare_with_maven_package (
207- sdk_root , GROUP_ID , service , stable_version , current_version , module
208- )
209-
210- packages .append (
211- {
212- "packageName" : "{0}" .format (ARTIFACT_FORMAT .format (service )),
213- "path" : [
214- output_folder ,
215- CI_FILE_FORMAT .format (service ),
216- POM_FILE_FORMAT .format (service ),
217- "eng/versioning" ,
218- "pom.xml" ,
219- ],
220- "readmeMd" : [readme ],
221- "artifacts" : (
222- ["{0}/pom.xml" .format (output_folder )]
223- + [jar for jar in glob .glob ("{0}/target/*.jar" .format (output_folder ))]
224- if succeeded
225- else []
226- ),
227- "apiViewArtifact" : next (iter (glob .glob ("{0}/target/*-sources.jar" .format (output_folder ))), None ),
228- "language" : "Java" ,
229- "result" : "succeeded" if succeeded else "failed" ,
230- "changelog" : {
231- "content" : changelog ,
232- "hasBreakingChange" : breaking ,
233- "breakingChangeItems" : breaking_change_items ,
234- },
235- }
236- )
237-
238- update_parameters (pre_suffix )
239-
240- if not packages :
241- # try data-plane codegen
242- packages = sdk_automation_data (config )
243-
244- return packages
245-
246-
24774def sdk_automation_typespec (config : dict ) -> List [dict ]:
24875
24976 packages = []
@@ -491,90 +318,14 @@ def main():
491318 (parser , args ) = parse_args ()
492319 args = vars (args )
493320
494- if args .get ("config" ):
495- return sdk_automation (args ["config" ][0 ], args ["config" ][1 ])
496-
497- base_dir = os .path .abspath (os .path .dirname (sys .argv [0 ]))
498- sdk_root = os .path .abspath (os .path .join (base_dir , SDK_ROOT ))
499- api_specs_file = os .path .join (base_dir , API_SPECS_FILE )
500-
501- if args .get ("tsp_config" ):
502- tsp_config = args ["tsp_config" ]
321+ config = args .get ("config" )
322+ if config :
323+ if len (config ) != 2 :
324+ parser .error ("config requires exactly two arguments: generationInput and generationOutput" )
325+ return sdk_automation (config [0 ], config [1 ])
503326
504- succeeded , require_sdk_integration , sdk_folder , service , module = generate_typespec_project (
505- tsp_project = tsp_config , sdk_root = sdk_root , remove_before_regen = True , group_id = GROUP_ID , ** args
506- )
507-
508- stable_version , current_version = set_or_increase_version (sdk_root , GROUP_ID , module , ** args )
509- args ["version" ] = current_version
510-
511- if require_sdk_integration :
512- update_service_files_for_new_lib (sdk_root , service , GROUP_ID , module )
513- update_root_pom (sdk_root , service )
514-
515- output_folder = sdk_folder
516- update_version (sdk_root , output_folder )
517- update_changelog_version (sdk_root , output_folder , current_version )
518- else :
519- if not args .get ("readme" ):
520- parser .print_help ()
521- sys .exit (0 )
522-
523- readme = args ["readme" ]
524- match = re .match (
525- r"specification/([^/]+)/resource-manager((?:/[^/]+)*)/readme.md" ,
526- readme ,
527- re .IGNORECASE ,
528- )
529- if not match :
530- spec = readme
531- readme = "specification/{0}/resource-manager/readme.md" .format (spec )
532- else :
533- spec = match .group (1 )
534- spec = update_spec (spec , match .group (2 ))
535-
536- args ["readme" ] = readme
537- args ["spec" ] = spec
538-
539- suffix = args .get ("suffix" ) or get_suffix_from_api_specs (api_specs_file , spec )
540- update_parameters (suffix )
541- service = get_and_update_service_from_api_specs (api_specs_file , spec , args ["service" ], suffix )
542- args ["service" ] = service
543- module = ARTIFACT_FORMAT .format (service )
544- premium = is_mgmt_premium (module )
545- stable_version , current_version = set_or_increase_version (sdk_root , GROUP_ID , module , ** args )
546- args ["version" ] = current_version
547- output_folder = OUTPUT_FOLDER_FORMAT .format (service )
548- namespace = NAMESPACE_FORMAT .format (service )
549- succeeded = generate (
550- sdk_root , module = module , output_folder = output_folder , namespace = namespace , premium = premium , ** args
551- )
552-
553- if succeeded :
554- succeeded = compile_arm_package (sdk_root , module )
555- if succeeded :
556- latest_release_version = get_latest_release_version (stable_version , current_version )
557- compare_with_maven_package (sdk_root , GROUP_ID , service , latest_release_version , current_version , module )
558-
559- if args .get ("auto_commit_external_change" ) and args .get ("user_name" ) and args .get ("user_email" ):
560- pwd = os .getcwd ()
561- try :
562- os .chdir (sdk_root )
563- os .system (
564- "git add eng/versioning eng/automation pom.xml {0} {1}" .format (
565- CI_FILE_FORMAT .format (service ), POM_FILE_FORMAT .format (service )
566- )
567- )
568- os .system (
569- 'git -c user.name={0} -c user.email={1} commit -m "[Automation] External Change"' .format (
570- args ["user_name" ], args ["user_email" ]
571- )
572- )
573- finally :
574- os .chdir (pwd )
575-
576- if not succeeded :
577- raise RuntimeError ("Failed to generate code or compile the package" )
327+ parser .print_help ()
328+ sys .exit (0 )
578329
579330
580331if __name__ == "__main__" :
0 commit comments