Skip to content

Commit

Permalink
BaseTools/Plugin: Add tool exclusion to RustEnvironmentCheck
Browse files Browse the repository at this point in the history
Allows a build wrapper to set an environment variable (chosen as the
input method for its simplicity) to exclude a list of tools.

For example, a GitHub workflow that only runs CodeQL for C code,
might need cargo installed for Rust compilation as part of the
package build, but might not need cargo tarpaulin for code coverage.
The GitHub workflow can set the environment variable on the build
step to opt out of verifying those tools.

This is not intended to be used often as most local developers and
build environments are expected to have the base set of tools needed
to build and test the code.

Signed-off-by: Michael Kubacki <[email protected]>
  • Loading branch information
makubacki committed Oct 25, 2023
1 parent aec07a1 commit 1fee04d
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion BaseTools/Plugin/RustEnvironmentCheck/RustEnvironmentCheck.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,21 @@
# fail much later during firmware code compilation when Rust tools are invoked
# with messages that are ambiguous or difficult to find.
#
# Note:
# - The entire plugin is enabled/disabled by scope.
# - Individual tools can be opted out by setting the environment variable
# `RUST_ENV_CHECK_TOOL_EXCLUSIONS` with a comma separated list of the tools
# to exclude. For example, "rustup, cargo tarpaulin" would not require that
# those tools be installed.
#
# Copyright (c) Microsoft Corporation.
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
##
import logging
import re
from collections import namedtuple
from edk2toolext.environment import shell_environment
from edk2toolext.environment.plugintypes.uefi_build_plugin import IUefiBuildPlugin
from edk2toolext.environment.uefi_build import UefiBuilder
from edk2toollib.utility_functions import RunCmd
Expand Down Expand Up @@ -142,9 +150,15 @@ def verify_workspace_rust_toolchain_is_installed() -> RustToolChainInfo:
),
}

excluded_tools_in_shell = shell_environment.GetEnvironment().get_shell_var(
"RUST_ENV_CHECK_TOOL_EXCLUSIONS")
excluded_tools = ([t.strip() for t in
excluded_tools_in_shell.split(",")] if
excluded_tools_in_shell else [])

errors = 0
for tool_name, tool_info in tools.items():
if not verify_cmd(*tool_info.presence_cmd):
if tool_name not in excluded_tools and not verify_cmd(*tool_info.presence_cmd):
logging.error(
f"Rust Environment Failure: {tool_name} is not installed "
"or not on the system path.\n\n"
Expand Down

0 comments on commit 1fee04d

Please sign in to comment.