Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
388c5cf
Escape `ignored_directories`
tpvasconcelos Sep 28, 2024
590b7cd
Implement windows compatability in `re_dir`
tpvasconcelos Sep 28, 2024
4bbb2bc
refactor `EXCLUDED_PATHS`
tpvasconcelos Sep 28, 2024
1f9cda9
Add test for `re_dir`
tpvasconcelos Sep 28, 2024
20188da
Merge branch 'main' into regex
tpvasconcelos Sep 28, 2024
d7b0f8f
Add test: `TestBaseRunner::tests_re_dir_test_pattern`
tpvasconcelos Sep 28, 2024
4c1d359
typo
tpvasconcelos Sep 28, 2024
4ef51c3
Merge branch 'main' into regex
tpvasconcelos Oct 8, 2024
48f6d4e
Merge branch 'main' into regex
tpvasconcelos Oct 18, 2024
2afb976
Merge branch 'main' into regex
tpvasconcelos Oct 22, 2024
ed693ca
Merge branch 'main' into regex
tpvasconcelos Oct 26, 2024
bf0dc36
Merge branch 'main' into regex
tpvasconcelos Nov 4, 2024
2493f6d
Merge branch 'main' into regex
tpvasconcelos Nov 12, 2024
ba5cbb6
Merge branch 'main' into regex
tpvasconcelos Nov 18, 2024
a1f7530
Merge branch 'main' into regex
tpvasconcelos Nov 20, 2024
ab3ae2c
Merge branch 'main' into regex
tpvasconcelos Nov 21, 2024
74c8785
Merge branch 'main' into regex
tpvasconcelos Jan 18, 2025
bd794f7
Merge branch 'main' into regex
tpvasconcelos Feb 20, 2025
590aeed
Merge branch 'main' into regex
tpvasconcelos Jul 16, 2025
359833e
Merge branch 'main' into regex
tpvasconcelos Aug 6, 2025
2287a71
Merge branch 'main' into regex
pazbechor Aug 10, 2025
ce4a24a
Merge branch 'main' into regex
tpvasconcelos Sep 22, 2025
16c0a25
Merge branch 'main' into regex
tpvasconcelos Sep 29, 2025
0bc376a
Merge branch 'main' into regex
tpvasconcelos Sep 30, 2025
fd6f74d
Merge branch 'main' into regex
tpvasconcelos Sep 30, 2025
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
11 changes: 10 additions & 1 deletion checkov/common/runners/base_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,16 @@ def strtobool(val: str) -> int:
raise ValueError("invalid boolean value %r for environment variable CKV_IGNORE_HIDDEN_DIRECTORIES" % (val,))


IGNORED_DIRECTORIES_ENV = os.getenv("CKV_IGNORED_DIRECTORIES", "node_modules,.terraform,.serverless")
def re_dir(path: str) -> str:
"""Compile a regex pattern that matches paths containing the given directory at any level."""
sep = re.escape(os.sep) # windows compatibility
return rf"(^|.*{sep}){re.escape(path)}($|{sep}.*)"


IGNORED_DIRECTORIES_ENV = os.getenv(
"CKV_IGNORED_DIRECTORIES",
",".join(re_dir(p) for p in ["node_modules", ".terraform", ".serverless"])
)
IGNORE_HIDDEN_DIRECTORY_ENV = strtobool(os.getenv("CKV_IGNORE_HIDDEN_DIRECTORIES", "True"))

ignored_directories = IGNORED_DIRECTORIES_ENV.split(",")
Expand Down
10 changes: 8 additions & 2 deletions checkov/secrets/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,16 @@
import re
from collections.abc import Iterable

from checkov.common.runners.base_runner import ignored_directories, safe_remove
from checkov.common.runners.base_runner import ignored_directories, safe_remove, re_dir
from checkov.common.util.consts import DEFAULT_EXTERNAL_MODULES_DIR

EXCLUDED_PATHS = [*ignored_directories, DEFAULT_EXTERNAL_MODULES_DIR, ".idea", ".git", "venv"]
EXCLUDED_PATHS = [
*ignored_directories,
re_dir(DEFAULT_EXTERNAL_MODULES_DIR),
re_dir(".idea"),
re_dir(".git"),
re_dir("venv"),
]


def filter_excluded_paths(
Expand Down
35 changes: 34 additions & 1 deletion tests/common/runners/test_base_runner.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,47 @@
import os
import re
import unittest
from typing import Optional, List

from checkov.common.output.report import Report
from checkov.common.runners.base_runner import filter_ignored_paths, BaseRunner
from checkov.common.runners.base_runner import filter_ignored_paths, BaseRunner, re_dir
from checkov.runner_filter import RunnerFilter


class TestBaseRunner(unittest.TestCase):

def test_re_dir(self):
sep = '\\' if os.name == 'nt' else '/'
# add regex prefix and suffix to the (unmodified) directory name
self.assertEqual(re_dir('dir'), fr'(^|.*{sep})dir($|{sep}.*)')
# escape the directory name (but leave the os separator unaltered)
self.assertEqual(re_dir('.dir1/.dir2'), fr'(^|.*{sep})\.dir1/\.dir2($|{sep}.*)')

def tests_re_dir_pattern(self):
dir_name_to_ignore = ".hidden"
dir_name_to_ignore_re = re.compile(re_dir(dir_name_to_ignore))
paths_to_ignore = [
".hidden",
"/.hidden",
"/path/.hidden",
"path/.hidden",
".hidden/path",
"path/.hidden/path",
"path/.hidden/path/",
]
paths_to_keep = [
".hidden1",
"not.hidden",
"nothidden",
"not.hidden/path",
"path/not.hidden",
"also/nothidden",
"hidden/not",
"also/hidden/not",
]
self.assertTrue(all(dir_name_to_ignore_re.match(p) for p in paths_to_ignore))
self.assertFalse(any(dir_name_to_ignore_re.match(p) for p in paths_to_keep))

def test_filter_ignored_directories_regex_legacy(self):
d_names = ['bin', 'integration_tests', 'tests', 'docs', '.github', 'checkov', 'venv', '.git', 'kubernetes', '.idea']
expected = ['bin', 'docs', 'checkov', 'venv', 'kubernetes']
Expand Down
Loading