eng/scripts/util.py (68 lines of code) (raw):
#!/usr/bin/env python
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
import os
import logging
from pathlib import Path
import argparse
from multiprocessing import Pool
logging.getLogger().setLevel(logging.INFO)
ROOT_FOLDER = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", ".."))
AUTOREST_PACKAGE_DIR = Path(ROOT_FOLDER) / Path("packages/autorest.python")
IGNORE_FOLDER = []
def run_check(name, call_back, log_info):
parser = argparse.ArgumentParser(
description=f"Run {name} against target folder. Add a local custom plugin to the path prior to execution. "
)
parser.add_argument(
"-p",
"--package",
dest="package",
help="The specific which package to verify, autorest.python or typespec-python. Optional.",
required=False,
default="autorest.python",
)
parser.add_argument(
"-t",
"--test-folder",
dest="test_folder",
help="The test folder we're in. Can be 'azure', 'multiapi', or 'vanilla'",
required=True,
)
parser.add_argument(
"-g",
"--generator",
dest="generator",
help="The generator we're using. Can be 'legacy', 'version-tolerant'.",
required=False,
)
parser.add_argument(
"-f",
"--file-name",
dest="file_name",
help="The specific file name if you only want to run one file. Optional.",
required=False,
)
parser.add_argument(
"-s",
"--subfolder",
dest="subfolder",
help="The specific sub folder to validate, default to Expected/AcceptanceTests. Optional.",
required=False,
default="Expected/AcceptanceTests",
)
args = parser.parse_args()
pkg_dir = Path(ROOT_FOLDER) / Path(f"packages/{args.package}") / Path("test") / Path(args.test_folder)
if args.generator:
pkg_dir /= Path(args.generator)
if args.subfolder:
pkg_dir /= Path(args.subfolder)
dirs = [d for d in pkg_dir.iterdir() if d.is_dir() and not d.stem.startswith("_") and d.stem not in IGNORE_FOLDER]
if args.file_name:
dirs = [d for d in dirs if d.stem.lower() == args.file_name.lower()]
if len(dirs) > 1:
with Pool() as pool:
result = pool.map(call_back, dirs)
response = all(result)
else:
response = call_back(dirs[0])
if not response:
logging.error("%s fails", log_info)
exit(1)