Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions tools/azure-sdk-tools/packaging_tools/generate_sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
_LOGGER = logging.getLogger(__name__)


def generate(config_path, sdk_folder, project_pattern, readme, restapi_git_folder, autorest_bin=None):
def generate(config_path, sdk_folder, project_pattern, readme, restapi_git_folder, autorest_bin=None, force_generation=False):

sdk_folder = Path(sdk_folder).expanduser()
config = read_config(sdk_folder, config_path)
Expand All @@ -39,7 +39,7 @@ def generate(config_path, sdk_folder, project_pattern, readme, restapi_git_folde
raise ValueError("RestAPI folder must be set if you don't provide a readme.")
swagger_files_in_pr = list(restapi_git_folder.glob('specification/**/readme.md'))
_LOGGER.info(f"Readme files: {swagger_files_in_pr}")
extract_conf_from_readmes(swagger_files_in_pr, restapi_git_folder, repotag, config)
extract_conf_from_readmes(swagger_files_in_pr, restapi_git_folder, repotag, config, force_generation=force_generation)

with tempfile.TemporaryDirectory() as temp_dir:
for project, local_conf in config.get("projects", {}).items():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,10 +189,10 @@ def read_config_from_github(sdk_id, branch="master", gh_token=None):
))
return json.loads(response.text)

def extract_conf_from_readmes(swagger_files_in_pr, restapi_git_folder, sdk_git_id, config):
def extract_conf_from_readmes(swagger_files_in_pr, restapi_git_folder, sdk_git_id, config, force_generation=False):
readme_files_in_pr = {readme for readme in swagger_files_in_pr if getattr(readme, "name", readme).lower().endswith("readme.md")}
for readme_file in readme_files_in_pr:
build_swaggertosdk_conf_from_json_readme(readme_file, sdk_git_id, config, base_folder=restapi_git_folder)
build_swaggertosdk_conf_from_json_readme(readme_file, sdk_git_id, config, base_folder=restapi_git_folder, force_generation=force_generation)

def get_readme_path(readme_file, base_folder='.'):
"""Get a readable Readme path.
Expand All @@ -207,39 +207,46 @@ def get_readme_path(readme_file, base_folder='.'):
base_folder='.'
return str(Path(base_folder) / Path(readme_file))

def build_swaggertosdk_conf_from_json_readme(readme_file, sdk_git_id, config, base_folder='.'):
def build_swaggertosdk_conf_from_json_readme(readme_file, sdk_git_id, config, base_folder='.', force_generation=False):
"""Get the JSON conf of this README, and create SwaggerToSdk conf.

Readme path can be any readme syntax accepted by autorest.
readme_file will be project key as-is.

:param str readme_file: A path that Autorest accepts. Raw GH link or absolute path.
:param str sdk_dit_id: Repo ID. IF org/login is provided, will be stripped.
:config dict config: Config where to update the "projects" key.
:param dict config: Config where to update the "projects" key.
:param bool force_generation: If no Swagger to SDK section is found, force once with the Readme as input
"""
readme_full_path = get_readme_path(readme_file, base_folder)
with tempfile.TemporaryDirectory() as temp_dir:
readme_as_conf = autorest_swagger_to_sdk_conf(
readme_full_path,
temp_dir
)
generated_config = {
"markdown": readme_full_path,
}
sdk_git_short_id = sdk_git_id.split("/")[-1].lower()
_LOGGER.info("Looking for tag {} in readme {}".format(sdk_git_short_id, readme_file))
for swagger_to_sdk_conf in readme_as_conf:
repo = swagger_to_sdk_conf.get("repo", "")
repo = repo.split("/")[-1].lower() # Be sure there is no org/login part
if repo == sdk_git_short_id:
_LOGGER.info("This Readme contains a swagger-to-sdk section for repo {}".format(repo))
generated_config = {
"markdown": readme_full_path,
generated_config.update({
"autorest_options": swagger_to_sdk_conf.get("autorest_options", {}),
"after_scripts": swagger_to_sdk_conf.get("after_scripts", []),
}
})
config.setdefault("projects", {})[str(readme_file)] = generated_config
return generated_config
else:
_LOGGER.info("Skip mismatch {} from {}".format(repo, sdk_git_short_id))
_LOGGER.info("Didn't find tag {} in readme {}. Did you forget to update the SwaggerToSdk section?".format(sdk_git_short_id, readme_file))
if not force_generation:
_LOGGER.info("Didn't find tag {} in readme {}. Did you forget to update the SwaggerToSdk section?".format(sdk_git_short_id, readme_file))
else:
_LOGGER.info("Didn't find tag {} in readme {}. Forcing it.".format(sdk_git_short_id, readme_file))
config.setdefault("projects", {})[str(readme_file)] = generated_config

def get_input_paths(global_conf, local_conf):
"""Returns a 2-tuple:
Expand Down