Skip to content

Commit fb76a57

Browse files
committed
Added repositories
# Conflicts: # .github/workflows/codeql.yml
1 parent 360c31d commit fb76a57

6 files changed

Lines changed: 55 additions & 23 deletions

File tree

.github/workflows/codeql.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,18 @@ jobs:
105105
JFROG_SIGNING_KEY: ${{ secrets.JFROG_SIGNING_KEY }}
106106
run: |
107107
KEY=$(echo $JFROG_SIGNING_KEY | base64 -d)
108+
echo $KEY
109+
jf config show
108110
if [ ${{ matrix.language_details.name }} == 'go' ]; then
109111
PACKAGE_VERSION="v0.0.${{ github.run_number }}"
110112
jf evd create \
111-
--package-name="jfrog.com/mygobuild" \
113+
--package-name="jfrog.com/mygobuild" \
112114
--package-version="$PACKAGE_VERSION" \
113115
--package-repo-name="go-local" \
114116
--key="${{ secrets.CODEQL_SIGNING_KEY }}" \
115117
--key-alias= ${{ vars.CODEQL_KEY_ALIAS }} \
116118
--predicate="results-go/go.sarif" \
117-
--predicate-type="http://github.com/CodeQL/static-analysis"
119+
--predicate-type="http://github.com/CodeQL/static-analysis" \
118120
--markdown="results-go/go-report.md"
119121
elif [ ${{ matrix.language_details.name }} == 'javascript' ]; then
120122
PACKAGE_VERSION="0.0.1"
@@ -125,6 +127,6 @@ jobs:
125127
--key="${{ secrets.CODEQL_SIGNING_KEY }}" \
126128
--key-alias= ${{ vars.CODEQL_KEY_ALIAS }} \
127129
--predicate="results-javascript/javascript.sarif" \
128-
--predicate-type="http://github.com/CodeQL/static-analysis"
130+
--predicate-type="http://github.com/CodeQL/static-analysis" \
129131
--markdown="results-javascript/javascript-report.md"
130132
fi

examples/codeql/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ The workflow performs CodeQL analysis on Go and JavaScript codebases, publishes
1313
- `ARTIFACTORY_URL` (Artifactory base URL)
1414
- The following GitHub repository secrets:
1515
- `ARTIFACTORY_ACCESS_TOKEN` (Artifactory access token)
16-
- `JFROG_SIGNING_KEY` (Base64 encoded key for signing evidence)
16+
- `JFROG_SIGNING_KEY`
1717

1818
## Supported Languages
1919
- Go

examples/codeql/go/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@ func Greetter(name string, place string, age int, fromDate time.Time, tillDate t
1717

1818
func main() {
1919
Greetter("John Doe", "New York", 30, time.Now().AddDate(0, 0, -7), time.Now())
20-
}
20+
}

examples/codeql/queries/go/go-too-many-params.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ import go
99

1010
from Function f
1111
where f.getNumParameter() > 3
12-
select f, "Function " + f.getName() + " has " + f.getNumParameter().toString() + " parameters, which is more than the allowed 3."
12+
select f, "Function " + f.getName() + " has " + f.getNumParameter().toString() + " parameters, which is more than the allowed 3."

examples/codeql/queries/js/js-too-many-params.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
* @name Too many parameters
33
* @description Functions with too many parameters can be hard to read and maintain.
44
* @kind problem
5-
* @problem.severity warning
65
* @precision high
6+
* @problem.severity warning
77
* @id js/too-many-params
88
* @tags maintainability
99
*/

examples/codeql/sarif_to_markdown.py

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,10 @@ def add_header(self) -> None:
6464
self.sections.extend([
6565
"# 🔍 CodeQL Security Analysis Report",
6666
"\n## Scan Details",
67-
f"**Scan Type**: CodeQL Static Analysis",
68-
f"**Scan Date**: {datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S UTC')}",
69-
f"**Operating System**: {platform.system()} {platform.release()}",
70-
f"**Analysis Tool**: CodeQL {codeql_version}",
71-
f"**Repository**: {os.path.basename(os.getcwd())}",
67+
f"**Scan Type**: CodeQL Static Analysis\n",
68+
f"**Scan Date**: {datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S UTC')}\n",
69+
f"**Operating System**: {platform.system()} {platform.release()}\n",
70+
f"**Analysis Tool**: CodeQL",
7271
"\n---\n"
7372
])
7473

@@ -79,18 +78,45 @@ def add_tool_info(self) -> None:
7978
self.sections.extend([
8079
"\n## 🛠️ Analysis Details",
8180
f"- **Tool**: {tool.get('name', 'CodeQL')}",
82-
f"- **Version**: {tool.get('version', 'N/A')}",
83-
f"- **Language**: {tool.get('language', 'N/A')}"
81+
f"- **Version**: {tool.get('semanticVersion', tool.get('version', 'N/A'))}",
8482
])
8583

84+
# Map artifact index to language
85+
artifact_lang = {}
86+
for notification in tool.get('notifications', []):
87+
lang = notification.get('properties', {}).get('languageDisplayName')
88+
locations = notification.get('locations', [])
89+
for loc in locations:
90+
idx = loc.get('physicalLocation', {}).get('artifactLocation', {}).get('index')
91+
if lang and idx is not None:
92+
artifact_lang[idx] = lang
93+
94+
95+
8696
def add_summary(self) -> None:
87-
severity_count = {'error': 0, 'warning': 0, 'note': 0, 'none': 0}
97+
severity_count = {
98+
'error': 0,
99+
'warning': 0,
100+
'note': 0,
101+
'none': 0
102+
}
88103
total_issues = 0
89104

90105
for run in self.data.get('runs', []):
106+
# Collect rules from driver and all extensions
107+
rules = {rule['id']: rule for rule in run.get('tool', {}).get('driver', {}).get('rules', [])}
108+
for ext in run.get('tool', {}).get('extensions', []):
109+
for rule in ext.get('rules', []):
110+
rules[rule['id']] = rule
111+
91112
for result in run.get('results', []):
92-
level = result.get('level', 'none').lower()
93-
severity_count[level] = severity_count.get(level, 0) + 1
113+
rule_id = result.get('ruleId', 'unknown')
114+
rule = rules.get(rule_id, {})
115+
rule_severity = rule.get('properties', {}).get('problem.severity', 'none')
116+
level = result.get('level', rule_severity).lower()
117+
if level not in severity_count:
118+
severity_count[level] = 0
119+
severity_count[level] += 1
94120
total_issues += 1
95121

96122
self.sections.extend([
@@ -99,10 +125,11 @@ def add_summary(self) -> None:
99125
"\n### Severity Breakdown"
100126
])
101127

102-
for severity, count in severity_count.items():
103-
if count > 0:
104-
emoji = self.formatter.get_emoji(severity)
105-
self.sections.append(f"- {emoji} **{severity.title()}**: {count}")
128+
for severity in ['error', 'warning', 'note', 'none']:
129+
count = severity_count.get(severity, 0)
130+
emoji = self.formatter.get_emoji(severity)
131+
self.sections.append(f"- {emoji} **{severity.title()}**: {count}")
132+
106133

107134
def add_query_info(self) -> None:
108135
self.sections.append("\n## 📝 Query Information")
@@ -142,14 +169,18 @@ def add_findings(self) -> None:
142169
])
143170

144171
for run in self.data.get('runs', []):
172+
# Collect rules from driver and all extensions
145173
rules = {rule['id']: rule for rule in run.get('tool', {}).get('driver', {}).get('rules', [])}
174+
for ext in run.get('tool', {}).get('extensions', []):
175+
for rule in ext.get('rules', []):
176+
rules[rule['id']] = rule
146177

147178
for result in run.get('results', []):
148179
rule_id = result.get('ruleId', 'unknown')
149180
rule = rules.get(rule_id, {})
150181
rule_name = rule.get('name', rule_id)
151182

152-
# ✅ New logic to fallback to rule severity if result.level is missing
183+
# Fallback to rule severity if result.level is missing
153184
rule_severity = rule.get('properties', {}).get('problem.severity', 'none')
154185
severity = result.get('level', rule_severity)
155186

@@ -160,7 +191,6 @@ def add_findings(self) -> None:
160191
self.sections.append(
161192
f"| {emoji} {severity.title()} | {rule_name} | {location} | {message} |"
162193
)
163-
164194
def _format_location(self, locations: List[Dict]) -> str:
165195
if not locations:
166196
return "N/A"

0 commit comments

Comments
 (0)