# @file codeql_plugin.py # # Common logic shared across the CodeQL plugin. # # Copyright (c) Microsoft Corporation. All rights reserved. # SPDX-License-Identifier: BSD-2-Clause-Patent ## import os import shutil from os import PathLike from edk2toollib.utility_functions import GetHostInfo def get_codeql_db_path(workspace: PathLike, package: str, target: str, new_path: bool = True) -> str: """Return the CodeQL database path for this build. Args: workspace (PathLike): The workspace path. package (str): The package name (e.g. "MdeModulePkg") target (str): The target (e.g. "DEBUG") new_path (bool, optional): Whether to create a new database path or return an existing path. Defaults to True. Returns: str: The absolute path to the CodeQL database directory. """ codeql_db_dir_name = "codeql-db-" + package + "-" + target codeql_db_dir_name = codeql_db_dir_name.lower() codeql_db_path = os.path.join("Build", codeql_db_dir_name) codeql_db_path = os.path.join(workspace, codeql_db_path) i = 0 while os.path.isdir(f"{codeql_db_path + '-%s' % i}"): i += 1 if not new_path: if i == 0: return None else: i -= 1 return codeql_db_path + f"-{i}" def get_codeql_cli_path() -> str: """Return the current CodeQL CLI path. Returns: str: The absolute path to the CodeQL CLI application to use for this build. """ # The CodeQL executable path can be passed via the # STUART_CODEQL_PATH environment variable (to override with a # custom value for this run) or read from the system path. codeql_path = None if "STUART_CODEQL_PATH" in os.environ: codeql_path = os.environ["STUART_CODEQL_PATH"] if GetHostInfo().os == "Windows": codeql_path = os.path.join(codeql_path, "codeql.exe") else: codeql_path = os.path.join(codeql_path, "codeql") if not os.path.isfile(codeql_path): codeql_path = None if not codeql_path: codeql_path = shutil.which("codeql") return codeql_path