generated from cisagov/ScubaGear
-
Notifications
You must be signed in to change notification settings - Fork 20
/
update_policyid_version.py
66 lines (52 loc) · 1.99 KB
/
update_policyid_version.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""
Updates the Policy ID version of SCuBA security baselines
in both the markdown documents and the Rego.
Note: This script could be modified to take in
arguments for now just modify the constants below.
"""
import os
import re
CURRENT_VERSION = 'v0.1'
REPLACEMENT_VERSION ='v0.3'
PATH_TO_FILES = '../'
FILES_TO_PROCESS = ['.md','rego','.csv']
def replace_last_n_chars(match):
"""
Replace the current version number with the desired number
"""
return match.group().replace(CURRENT_VERSION, REPLACEMENT_VERSION)
def replace_version_number(file_path):
"""
Parses the file at file_path and
replaces the SCuBA Policy ID version number
"""
try:
# Read the file line by line
with open(file_path, 'r', encoding='UTF-8') as file:
lines = file.readlines()
# SCuBA Policy ID regex pattern
pattern = r'[A-Za-z]+\.[A-Za-z]+\.\d+\.\d+v\d+\.*\d*'
# Replace matching Policy ID version number
modified_lines = [re.sub(pattern, replace_last_n_chars, line) for line in lines]
# Write the modified content back to the file
with open(file_path, 'w', encoding='UTF-8') as file:
file.writelines(modified_lines)
print(f"Updated file: {file_path}")
except Exception as e:
print(f"Error processing file {file_path}: {e}")
def process_files(directory_path):
"""
Enumerates through the files/folders in the directory path
and replaces the version number with the specified file
extensions
"""
exclude = set(['.github', '.venv', '.vscode', 'build', 'scubagoggles.egg-info'])
# pylint: disable=unused-variable
for root, dirs, files in os.walk(directory_path):
dirs[:] = [d for d in dirs if d not in exclude]
for file in files:
if any(file.lower().endswith(ext) for ext in FILES_TO_PROCESS):
file_path = os.path.join(root, file)
replace_version_number(file_path)
# Process the directory
process_files(PATH_TO_FILES)