Skip to content

Commit 321887b

Browse files
authored
[sdk generation pipeline] refactor pipeline (#44196)
* changelog tool * update * update * update * update * update * fix * add test case * add test case * add test case * add test case * update test case * fix * update for error log * update * update * add test case for sdk_changelog * update test case for sdk_udpate_verison * add ps1 script * fix update version * to pascal case * update ps1 * format
1 parent 6ef4725 commit 321887b

18 files changed

+1575
-307
lines changed

eng/swagger_to_sdk_config.json

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"advancedOptions": {
3+
"createSdkPullRequests": true,
4+
"generationCallMode": "one-per-config",
5+
"breakingChangeTracking": true
6+
},
7+
"initOptions": {
8+
"initScript": {
9+
"path": "sh scripts/automation_init.sh",
10+
"stderr": {
11+
"showInComment": false,
12+
"scriptError": false
13+
}
14+
}
15+
},
16+
"generateOptions": {
17+
"generateScript": {
18+
"path": "sh scripts/automation_generate.sh",
19+
"stdout": {
20+
"showInComment": "(.*\\[ERROR\\]\\s*).*",
21+
"scriptError": "(.*\\[ERROR\\]\\s*).*"
22+
}
23+
},
24+
"parseGenerateOutput": true
25+
},
26+
"packageOptions": {
27+
"breakingChangeLabel": "CI-BreakingChange-Python",
28+
"breakingChangesLabel": "BreakingChange-Python-Sdk",
29+
"updateChangelogContentScript": {
30+
"path": "./scripts/automation_sdk_update_changelog_content.ps1"
31+
},
32+
"updateVersionScript": {
33+
"path": "./scripts/automation_sdk_update_version.ps1"
34+
},
35+
"updateMetadataScript": {
36+
"path": "./scripts/automation_sdk_update_metadata.ps1"
37+
}
38+
}
39+
}

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

Lines changed: 20 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,10 @@ def call_build_config(package_name: str, folder_name: str):
113113
# )
114114

115115

116-
def generate_packaging_files(package_name, folder_name):
116+
def generate_packaging_and_ci_files(package_path: Path):
117117
# replace sdk_packaging.toml with pyproject.toml
118-
output_path = Path(folder_name) / package_name
119-
pyproject_toml = output_path / CONF_NAME
120-
sdk_packaging_toml = output_path / OLD_CONF_NAME
118+
pyproject_toml = package_path / CONF_NAME
119+
sdk_packaging_toml = package_path / OLD_CONF_NAME
121120
if sdk_packaging_toml.exists():
122121
if pyproject_toml.exists():
123122
# update related items in pyproject.toml then delete sdk_packaging.toml
@@ -147,55 +146,43 @@ def generate_packaging_files(package_name, folder_name):
147146
_LOGGER.info(f"rename {sdk_packaging_toml} to {pyproject_toml}")
148147
sdk_packaging_toml.rename(pyproject_toml)
149148

149+
package_name = package_path.name
150150
if "azure-mgmt-" in package_name:
151151
# if codegen generate pyproject.toml instead of setup.py, we delete existing setup.py
152-
setup_py = output_path / "setup.py"
152+
setup_py = package_path / "setup.py"
153153
if setup_py.exists():
154154
_LOGGER.info(f"delete {setup_py} since codegen generate pyproject.toml")
155155
with open(pyproject_toml, "rb") as f:
156156
pyproject_content = toml.load(f)
157157
if pyproject_content.get("project"):
158158
setup_py.unlink()
159159

160-
call_build_config(package_name, folder_name)
161-
162-
# load pyproject.toml and replace "azure-core" with "azure-mgmt" (after codegen fix bug, we could remove this logic)
163-
if pyproject_toml.exists():
164-
with open(pyproject_toml, "rb") as f:
165-
pyproject_content = toml.load(f)
166-
if pyproject_content.get("project"):
167-
for idx in range(len(pyproject_content["project"].get("dependencies", []))):
168-
if pyproject_content["project"]["dependencies"][idx].startswith("azure-core"):
169-
pyproject_content["project"]["dependencies"][idx] = "azure-mgmt-core>=1.6.0"
170-
171-
with open(pyproject_toml, "wb") as f:
172-
tomlw.dump(pyproject_content, f)
160+
call_build_config(package_name, str(package_path.parent))
173161
else:
174162
if not pyproject_toml.exists():
175163
with open(pyproject_toml, "w") as file_out:
176164
file_out.write("[packaging]\nauto_update = false")
177165

178-
# add ci.yaml
166+
# add ci.yml
179167
generate_ci(
180168
template_path=Path("scripts/quickstart_tooling_dpg/template_ci"),
181-
folder_path=Path(folder_name),
169+
folder_path=package_path.parent,
182170
package_name=package_name,
183171
)
184172

185173

186-
def update_servicemetadata(sdk_folder, data, config, folder_name, package_name, spec_folder, input_readme):
187-
package_folder = Path(sdk_folder, folder_name, package_name)
188-
if not package_folder.exists():
189-
_LOGGER.info(f"Fail to save metadata since package folder doesn't exist: {package_folder}")
174+
def update_metadata_json(package_path: Path, pipeline_input, codegen_config, spec_folder, input_readme):
175+
if not package_path.exists():
176+
_LOGGER.info(f"Fail to save metadata since package folder doesn't exist: {package_path}")
190177
return
191-
for_swagger_gen = "meta" in config
178+
for_swagger_gen = "meta" in codegen_config
192179
# remove old _meta.json
193-
old_metadata_folder = package_folder / "_meta.json"
180+
old_metadata_folder = package_path / "_meta.json"
194181
if old_metadata_folder.exists():
195182
os.remove(old_metadata_folder)
196183
_LOGGER.info(f"Remove old metadata file: {old_metadata_folder}")
197184

198-
metadata_folder = package_folder / "_metadata.json"
185+
metadata_folder = package_path / "_metadata.json"
199186
if metadata_folder.exists():
200187
with open(metadata_folder, "r") as file_in:
201188
metadata = json.load(file_in)
@@ -204,14 +191,14 @@ def update_servicemetadata(sdk_folder, data, config, folder_name, package_name,
204191

205192
metadata.update(
206193
{
207-
"commit": data["headSha"],
208-
"repository_url": data["repoHttpsUrl"],
194+
"commit": pipeline_input["headSha"],
195+
"repository_url": pipeline_input["repoHttpsUrl"],
209196
}
210197
)
211198
if for_swagger_gen:
212199
readme_file = str(Path(spec_folder, input_readme))
213-
global_conf = config["meta"]
214-
local_conf = config.get("projects", {}).get(readme_file, {})
200+
global_conf = codegen_config["meta"]
201+
local_conf = codegen_config.get("projects", {}).get(readme_file, {})
215202

216203
if "resource-manager" in input_readme:
217204
cmd = ["autorest", input_readme]
@@ -231,11 +218,11 @@ def update_servicemetadata(sdk_folder, data, config, folder_name, package_name,
231218
)
232219
else:
233220
metadata["typespec_src"] = input_readme
234-
metadata.update(config)
221+
metadata.update(codegen_config)
235222

236223
_LOGGER.info("Metadata json:\n {}".format(json.dumps(metadata, indent=2)))
237224

238-
metadata_file_path = package_folder / "_metadata.json"
225+
metadata_file_path = package_path / "_metadata.json"
239226
with metadata_file_path.open("w") as writer:
240227
json.dump(metadata, writer, indent=2)
241228
_LOGGER.info(f"Saved metadata to {metadata_file_path}")

0 commit comments

Comments
 (0)