xref: /aosp_15_r20/external/pigweed/pw_presubmit/py/pw_presubmit/shell_checks.py (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1# Copyright 2021 The Pigweed Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4# use this file except in compliance with the License. You may obtain a copy of
5# the License at
6#
7#     https://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations under
13# the License.
14"""Shell related checks."""
15
16import logging
17
18from pw_presubmit import presubmit_context
19from pw_presubmit.presubmit import (
20    Check,
21    filter_paths,
22)
23from pw_presubmit.presubmit_context import (
24    PresubmitContext,
25    PresubmitFailure,
26)
27from pw_presubmit.tools import log_run
28
29_LOG = logging.getLogger(__name__)
30
31_SHELL_EXTENSIONS = ('.sh', '.bash')
32
33
34@filter_paths(endswith=_SHELL_EXTENSIONS)
35@Check
36def shellcheck(ctx: PresubmitContext) -> None:
37    """Run shell script static analiyzer on presubmit."""
38
39    ctx.paths = presubmit_context.apply_exclusions(ctx)
40
41    if ctx.paths:
42        _LOG.warning(
43            "The Pigweed project discourages use of shellscripts. "
44            "https://pigweed.dev/docs/faq.html"
45        )
46
47    result = log_run(['shellcheck', *ctx.paths])
48    if result.returncode != 0:
49        raise PresubmitFailure('Shellcheck identifed issues.')
50