Skip to content

Commit 68c5c5c

Browse files
integrated renovate
1 parent ead607b commit 68c5c5c

File tree

7 files changed

+8676
-2
lines changed

7 files changed

+8676
-2
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ build
44
dist
55
*.egg-info
66
__pycache__
7-
test.py
7+
test.py
8+
testbed.ipynb

log.ndjson

Lines changed: 176 additions & 0 deletions
Large diffs are not rendered by default.

package-lock.json

Lines changed: 8386 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"dependencies": {
3+
"renovate": "^36.78.8"
4+
}
5+
}

src/scsctl/app.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
)
1616
from scsctl.helper.common import AppDetails, generate_final_report, modify_and_build_docker_image, custom_style_fancy
1717
from scsctl.helper.trivy import get_sbom_report, print_sbom_report, save_sbom_data
18+
from scsctl.helper.renovate import (check_if_node_and_npm_is_installed,check_if_renovate_is_installed_globally,run_renovate_on_a_repository)
1819

1920
import yaml
2021

@@ -48,11 +49,15 @@ def cli():
4849
)
4950
@click.option("--db_enabled", help="Enable db", default=False, is_flag=True, flag_value=True)
5051
@click.option("--falco_enabled", help="Enable falco", default=False, is_flag=True, flag_value=True)
52+
@click.option("--renovate_enabled", help="Enable renovate", default=False, is_flag=True, flag_value=True)
53+
@click.option("--renovate_repo_token", help="Repo token for renovate", default=None, is_flag=False, flag_value=None)
54+
@click.option("--renovate_repo_name", help="Repo name for renovate", default=None, is_flag=False, flag_value=None)
5155
@click.option("--non_interactive", help="Run scsctl in non interactive mode", default= False, is_flag=True, flag_value=True)
5256
@click.option(
5357
"--docker_file_folder_path", help="Path of the docker file to rebuild", default=None, is_flag=False, flag_value=None
5458
)
5559
@click.option("--config_file", help="Path of the configuration file", default=None, is_flag=False, flag_value=None)
60+
5661
def scan(
5762
pyroscope_app_name=None,
5863
docker_image_name=None,
@@ -63,7 +68,10 @@ def scan(
6368
db_enabled=False,
6469
falco_enabled=False,
6570
config_file=None,
66-
non_interactive = False
71+
non_interactive = False,
72+
renovate_enabled = False,
73+
renovate_repo_token = None,
74+
renovate_repo_name = None
6775
):
6876
config_data = {}
6977
if config_file is not None:
@@ -89,6 +97,8 @@ def scan(
8997
db_enabled = config_data.get("db_enabled", False)
9098
if not falco_enabled:
9199
falco_enabled = config_data.get("falco_enabled", False)
100+
if not renovate_enabled:
101+
renovate_enabled = config_data.get("renovate_enabled", False)
92102

93103
# Check mandatory fields
94104
if pyroscope_app_name is None:
@@ -103,6 +113,8 @@ def scan(
103113
raise ValueError(
104114
"falco_pod_name and falco_target_deployment_name are required, either via command line or config file if falco is enabled"
105115
)
116+
if(renovate_enabled and (renovate_repo_token is None or renovate_repo_name is None)):
117+
raise ValueError("renovate_repo_token and renovate_repo_name are required, either via command line or config file if renovate is enabled")
106118

107119
"""This script will scan the docker image and find the unused packages"""
108120
appDetails = AppDetails(
@@ -148,6 +160,22 @@ def scan(
148160
scan_status = False
149161
click.echo("\nError fetching data from sbom_report... Exiting")
150162

163+
if(renovate_enabled):
164+
if(check_if_node_and_npm_is_installed()):
165+
if(check_if_renovate_is_installed_globally()):
166+
renovate_process = run_renovate_on_a_repository(token=renovate_repo_token,repo_name=renovate_repo_name)
167+
if renovate_process.returncode == 0:
168+
click.echo("Renovate bot ran successfully")
169+
return True
170+
else:
171+
click.echo("Error running renovate bot")
172+
return False
173+
else:
174+
return False
175+
else:
176+
return False
177+
178+
151179
choices = [
152180
"Sbom report",
153181
"Pyroscope detected packages",

src/scsctl/helper/renovate.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import subprocess
2+
3+
def check_if_node_and_npm_is_installed():
4+
# Check if node and npm are installed
5+
# If not, install them locally
6+
# This is required for renovate bot to work
7+
node_version = subprocess.run(["node", "--version"], capture_output=True)
8+
npm_version = subprocess.run(["npm", "--version"], capture_output=True)
9+
if node_version.returncode != 0 or npm_version.returncode != 0:
10+
print("Node or npm not installed, please install them to use scsctl with renovate")
11+
return False
12+
print("Node and npm already installed")
13+
return True
14+
15+
def check_if_renovate_is_installed_globally():
16+
# Install renovate bot
17+
# This is required for renovate bot to work
18+
renovate_version = subprocess.run(["renovate", "--version"], capture_output=True)
19+
if renovate_version.returncode != 0:
20+
print("Renovate bot not installed, please install using `npm install -g renovate`")
21+
return False
22+
else:
23+
print("Renovate bot already installed")
24+
return True
25+
26+
def run_renovate_on_a_repository(token, repo_name):
27+
command = f"renovate --token {token} {repo_name}"
28+
print(f"Runing renovate on repo {repo_name}")
29+
#run renovate command from python
30+
renovate_process = subprocess.run(["renovate", "--token", token,repo_name], capture_output=True)
31+
return renovate_process

src/scsctl/server.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
)
2020

2121
from datetime import datetime
22+
import subprocess
23+
24+
from scsctl.helper.renovate import (check_if_node_and_npm_is_installed,check_if_renovate_is_installed_globally,run_renovate_on_a_repository)
2225

2326
class Config(BaseModel):
2427
pyroscope_app_name: str
@@ -30,15 +33,42 @@ class Config(BaseModel):
3033
db_enabled: bool = False
3134
falco_enabled: bool = False
3235

36+
class RenovateConfig(BaseModel):
37+
token: str
38+
repo_name: str
39+
3340
app = FastAPI()
3441

3542

3643
@app.get("/")
3744
async def root():
3845
return {"message": "Hello World"}
3946

47+
@app.post("/renovate")
48+
async def renovate(renovateConfig: RenovateConfig):
49+
if(check_if_node_and_npm_is_installed()):
50+
if(check_if_renovate_is_installed_globally()):
51+
renovate_process = run_renovate_on_a_repository(token=renovateConfig.token,repo_name=renovateConfig.repo_name)
52+
if renovate_process.returncode == 0:
53+
print("Renovate bot ran successfully")
54+
return True
55+
else:
56+
print("Error running renovate bot")
57+
return False
58+
else:
59+
return False
60+
else:
61+
return False
62+
63+
64+
65+
4066
@app.post("/scan")
4167
async def scan_api(config: Config):
68+
pyroscope_found_extra_packages = []
69+
falco_found_extra_packages = []
70+
final_report = []
71+
sbom_report = []
4272
current_datetime = datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
4373
batch_id = f"scsctl_{current_datetime}"
4474
falco_found_extra_packages = []
@@ -83,13 +113,30 @@ async def scan_api(config: Config):
83113
else:
84114
scan_status = False
85115
print("\nError fetching data from sbom_report... Exiting")
116+
117+
renovate_status = "Error"
118+
if(config.renovate_enabled):
119+
if(check_if_node_and_npm_is_installed()):
120+
if(check_if_renovate_is_installed_globally()):
121+
renovate_process = run_renovate_on_a_repository(token=config.renovate_repo_token,repo_name=config.renovate_repo_name)
122+
if renovate_process.returncode == 0:
123+
renovate_status = "Renovate bot ran successfully"
124+
else:
125+
renovate_status = "Error running renovate bot"
126+
else:
127+
renovate_status = "Renovate bot not installed, please install using `npm install -g renovate`"
128+
else:
129+
renovate_status = "Node or npm not installed, please install them to use scsctl with renovate"
130+
else:
131+
renovate_status = "Renovate not enabled"
86132
return {
87133
"scan_status": scan_status,
88134
"sbom_report": sbom_report,
89135
"pyroscope_data": pyroscope_data,
90136
"pyroscope_found_extra_packages": pyroscope_found_extra_packages,
91137
"falco_found_extra_packages": falco_found_extra_packages,
92138
"final_report": final_report,
139+
"renovate_status" : renovate_status
93140
}
94141

95142
if __name__ == "__main__":

0 commit comments

Comments
 (0)