Skip to content

Commit 7514387

Browse files
Merge branch 'master' into LuckySkyWalker-refresh1
2 parents 90f1db3 + adc5a7b commit 7514387

File tree

4 files changed

+190
-3
lines changed

4 files changed

+190
-3
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
"""
2+
Created on july 11, 2024
3+
@author: Dinesh Ravi
4+
Gather list of non matched components where blackduck could not able have match event with their kb for the bdio codelocation type
5+
"""
6+
from blackduck import Client
7+
8+
import argparse
9+
10+
import logging
11+
import json
12+
# py get_scan_missed_import_event.py --base-url=https://blackduck.company.com --token-file=.pt --project=ASTERIX2CLU3D_PR
13+
# OGRAM --version=AED2_ANDROID_S_2_2024-09-21_00-32 --company=company --no-verify > missing.txt
14+
logging.basicConfig(
15+
level=logging.INFO,
16+
format="[%(asctime)s] {%(module)s:%(lineno)d} %(levelname)s - %(message)s"
17+
)
18+
19+
parser = argparse.ArgumentParser("Get the BOM components for a given project-version and the license details for each BOM component")
20+
parser.add_argument("--base-url", required=True, help="Hub server URL e.g. https://your.blackduck.url")
21+
parser.add_argument("--token-file", dest='token_file', required=True, help="containing access token")
22+
parser.add_argument("--project", dest='project_name', required=True, help="Project that contains the BOM components")
23+
parser.add_argument("--version", dest='version_name', required=True, help="Version that contains the BOM components")
24+
parser.add_argument("--company", dest='company_name', required=True, help="modules that contains the company name for separation")
25+
parser.add_argument("--no-verify", dest='verify', action='store_false', help="disable TLS certificate verification")
26+
args = parser.parse_args()
27+
28+
with open(args.token_file, 'r') as tf:
29+
access_token = tf.readline().strip()
30+
31+
bd = Client(base_url=args.base_url, token=access_token, verify=args.verify)
32+
33+
params = {
34+
'q': [f"name:{args.project_name}"]
35+
}
36+
37+
projects = [p for p in bd.get_resource('projects', params=params) if p['name'] == args.project_name]
38+
assert len(projects) == 1, f"There should be one, and only one project named {args.project_name}. We found {len(projects)}"
39+
project = projects[0]
40+
41+
params = {
42+
'q': [f"versionName:{args.version_name}"]
43+
}
44+
versions = [v for v in bd.get_resource('versions', project, params=params) if v['versionName'] == args.version_name]
45+
assert len(versions) == 1, f"There should be one, and only one version named {args.version_name}. We found {len(versions)}"
46+
version = versions[0]
47+
48+
print(f"Found {project['name']}:{version['versionName']}")
49+
hashset_company = set()
50+
hashset_other = set()
51+
# ===================
52+
# print(version)
53+
# params = {
54+
# 'q': [f"name:*bdio*"]
55+
# }
56+
codelocations=[codelocation for codelocation in bd.get_resource('codelocations',version) if 'bdio' in codelocation['name']]
57+
# print(codelocations[0])
58+
# codelocation=codelocations[0]
59+
for codelocation in codelocations:
60+
scans=bd.get_resource('scans',codelocation)
61+
for scan in scans:
62+
events=[events for events in bd.get_resource('component-import-events',scan) if events['event']=="COMPONENT_MAPPING_FAILED"]
63+
if len(events)>0:
64+
print("============================")
65+
print(f"codelocation_name: {codelocation['name']}")
66+
print(f"matchCount: {scan['matchCount']}")
67+
print(f"missing: {len(events)}")
68+
69+
for i,event in enumerate(events,start=1):
70+
print(f"--------------{i}")
71+
externalId=event['externalId']
72+
print(f"externalId: {externalId}")
73+
print(f"importComponentName: {event['importComponentName']}")
74+
print(f"importComponentVersionName: {event['importComponentVersionName']}")
75+
if args.company_name in externalId:
76+
hashset_company.add(externalId)
77+
else:
78+
hashset_other.add(externalId)
79+
80+
# {'event': 'COMPONENT_MAPPING_FAILED',
81+
# 'importComponentName': 'rsi-common-lib',
82+
# 'importComponentVersionName': '0.2.14',
83+
# 'externalId': 'com.company.aed2:rsi-common-lib:0.2.14',
84+
# 'failureReason': 'Unable to map scanned component version to Black Duck project version because no mapping is present for the given external identifier'}
85+
print("============================")
86+
sorted_company=sorted(hashset_company)
87+
sorted_other=sorted(hashset_other)
88+
89+
print(f"========total missing Other components to get foss report: {len(hashset_other)}========")
90+
for i,missing in enumerate(sorted_other,start=1):
91+
print(f"{i} {missing}")
92+
print(f"========total missing {args.company_name} components to manually add: {len(hashset_company)}========")
93+
for i,missing in enumerate(sorted_company,start=1):
94+
print(f"{i} {missing}")
95+
total_missing=len(sorted_company)+len(sorted_other)
96+
print(f"========EB:{len(sorted_company)}+Other:{len(sorted_other)}={total_missing}========")

examples/client/refresh_project_copyrights.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ def SignalHandler(sig, frame):
136136
)
137137

138138

139+
str_unknown = "n/a"
139140

140141
str_unknown = "n/a"
141142

@@ -388,5 +389,4 @@ def SignalHandler(sig, frame):
388389
# end of processing loop
389390

390391
CompleteTask(0)
391-
392392
#end
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
"""
2+
Created on july 11, 2024
3+
4+
@author: Dinesh Ravi
5+
6+
Remap codelocations from a project version to another project version
7+
8+
"""
9+
10+
from blackduck import Client
11+
12+
import argparse
13+
import json
14+
import logging
15+
import sys
16+
import time
17+
from pprint import pprint
18+
19+
logging.basicConfig(
20+
level=logging.DEBUG,
21+
format="[%(asctime)s] {%(module)s:%(lineno)d} %(levelname)s - %(message)s",
22+
)
23+
24+
parser = argparse.ArgumentParser(sys.argv[0])
25+
parser.add_argument(
26+
"-u", "--bd_url", help="Hub server URL e.g. https://your.blackduck.url"
27+
)
28+
parser.add_argument(
29+
"-t", "--token-file", help="File name of a file containing access token"
30+
)
31+
parser.add_argument(
32+
"-nv",
33+
"--no-verify",
34+
dest="verify",
35+
action="store_false",
36+
help="disable TLS certificate verification",
37+
)
38+
parser.add_argument("project_name")
39+
parser.add_argument("version_name")
40+
parser.add_argument("update_pv_url")
41+
42+
43+
args = parser.parse_args()
44+
45+
logging.basicConfig(
46+
format="%(asctime)s:%(levelname)s:%(message)s",
47+
stream=sys.stderr,
48+
level=logging.DEBUG,
49+
)
50+
logging.getLogger("requests").setLevel(logging.WARNING)
51+
logging.getLogger("urllib3").setLevel(logging.WARNING)
52+
logging.getLogger("blackduck").setLevel(logging.WARNING)
53+
54+
with open(args.token_file, "r") as tf:
55+
access_token = tf.readline().strip()
56+
57+
bd = Client(base_url=args.bd_url, token=access_token, verify=args.verify)
58+
59+
params = {"q": [f"name:{args.project_name}"]}
60+
projects = [
61+
p
62+
for p in bd.get_resource("projects", params=params)
63+
if p["name"] == args.project_name
64+
]
65+
assert (
66+
len(projects) == 1
67+
), f"There should be one, and only one project named {args.project_name}. We found {len(projects)}"
68+
project = projects[0]
69+
70+
params = {"q": [f"versionName:{args.version_name}"]}
71+
versions = [
72+
v
73+
for v in bd.get_resource("versions", project, params=params)
74+
if v["versionName"] == args.version_name
75+
]
76+
assert (
77+
len(versions) == 1
78+
), f"There should be one, and only one version named {args.version_name}. We found {len(versions)}"
79+
version = versions[0]
80+
81+
logging.debug(f"Found {project['name']}:{version['versionName']}")
82+
83+
84+
codelocations = bd.get_resource("codelocations", version)
85+
# logging.info(f"Total Code locations '{len(list(codelocations))}'")
86+
for codelocation in codelocations:
87+
logging.debug(f"Un-mapping code location {codelocation['name']}")
88+
url = codelocation["_meta"]["href"]
89+
codelocation["mappedProjectVersion"] = args.update_pv_url
90+
result = bd.session.put(url, json=codelocation)
91+
logging.info(f"Code location '{codelocation['name']}' unmap status {result}")

examples/client/upload_sbom.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def find_or_create_project_group(group_name):
9898
else:
9999
return groups[0]['_meta']['href']
100100

101-
def create_project_version(project_name,version_name,project_group, nickname = None):
101+
def create_project_version(project_name, version_name, project_group, nickname = None):
102102
version_data = {"distribution": "EXTERNAL", "phase": "DEVELOPMENT", "versionName": version_name}
103103
if nickname:
104104
version_data['nickname'] = nickname
@@ -120,7 +120,7 @@ def find_or_create_project_version(project_name, version_name, project_group):
120120
if version:
121121
pass
122122
else:
123-
version = create_project_version(project_name, version_name)
123+
version = create_project_version(project_name, version_name, project_group)
124124
else:
125125
version = create_project_version(project_name, version_name, project_group)
126126
project = find_project_by_name(project_name)

0 commit comments

Comments
 (0)