Skip to content

Commit d10bbea

Browse files
committed
Update Makefile
1 parent 90d7b78 commit d10bbea

File tree

1 file changed

+49
-1
lines changed
  • metro-ai-suite/smart-traffic-intersection-agent

1 file changed

+49
-1
lines changed

metro-ai-suite/smart-traffic-intersection-agent/Makefile

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ TEST_TARGETS := $(addprefix test-,$(TEST_COMPONENTS))
9999
clean-all clean-all-keep-models \
100100
shellcheck pylint ruff \
101101
trivy-scan trivy-scan-fs trivy-scan-image trivy-scan-config \
102-
clamav-scan bandit-scan-new bandit-scan gitleaks-scan codeql-scan \
102+
clamav-scan bandit-scan-new bandit-scan gitleaks-scan codeql-scan codeql-scan-new \
103103
$(TEST_TARGETS) \
104104
get-service-name get-component-names get-image-tags get-context-dirs \
105105
get-python-version get-scan-matrix-json
@@ -450,6 +450,54 @@ gitleaks-scan:
450450
-r security-results/gitleaks-$(SERVICE_NAME)-$$(date +%Y%m%d-%H%M%S).json || true
451451
@echo "✅ Gitleaks scan complete: security-results/gitleaks-*"
452452

453+
codeql-scan-new:
454+
@echo "🛡️ Running CodeQL Security Analysis..."
455+
@if ! command -v codeql >/dev/null 2>&1; then \
456+
echo "❌ CodeQL CLI is not installed. Install: https://github.com/github/codeql-cli-binaries/releases"; \
457+
exit 1; \
458+
fi
459+
460+
@mkdir -p security-results
461+
462+
@echo "→ Creating CodeQL database for Python..."
463+
@codeql database create security-results/codeql-db-python-$(SERVICE_NAME) \
464+
--language=python \
465+
--source-root=. \
466+
--build-mode=none \
467+
--overwrite 2>&1 | tail -5
468+
469+
@echo "→ Updating CodeQL Python Query Packs..."
470+
@codeql pack download codeql/python-queries
471+
472+
@echo "→ Running CodeQL analysis (SARIF)..."
473+
@codeql database analyze security-results/codeql-db-python-$(SERVICE_NAME) \
474+
codeql/python-queries \
475+
--format=sarif-latest \
476+
--output=security-results/codeql-python-$(SERVICE_NAME).sarif || true
477+
478+
@echo "→ Running CodeQL analysis (CSV)..."
479+
@codeql database analyze security-results/codeql-db-python-$(SERVICE_NAME) \
480+
codeql/python-queries \
481+
--format=csv \
482+
--output=security-results/codeql-python-$(SERVICE_NAME).csv || true
483+
484+
@echo "→ Converting CSV to JSON..."
485+
@if [ -f security-results/codeql-python-$(SERVICE_NAME).csv ]; then \
486+
python3 -c "import csv,json; h=['name','description','severity','message','path','start_line','start_col','end_line','end_col']; rows=[dict(zip(h,r)) for r in csv.reader(open('security-results/codeql-python-$(SERVICE_NAME).csv')) if r]; json.dump(rows,open('security-results/codeql-python-$(SERVICE_NAME).json','w'),indent=2); print(' Converted '+str(len(rows))+' finding(s) to JSON')"; \
487+
else \
488+
echo " ⚠️ No CSV findings to convert."; \
489+
fi
490+
491+
@echo "→ Converting SARIF to HTML..."
492+
@if [ -f security-results/codeql-python-$(SERVICE_NAME).sarif ]; then \
493+
python3 -c "import json,html; s=json.load(open('security-results/codeql-python-$(SERVICE_NAME).sarif')); fs=[{'id':r.get('ruleId',''),'sev':r.get('level','warning'),'msg':r.get('message',{}).get('text',''),'path':r.get('locations',[{}])[0].get('physicalLocation',{}).get('artifactLocation',{}).get('uri',''),'line':r.get('locations',[{}])[0].get('physicalLocation',{}).get('region',{}).get('startLine',0)} for run in s.get('runs',[]) for r in run.get('results',[])]; rows=''.join(['<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s:%s</td></tr>'%(i+1,html.escape(f['sev']),html.escape(f['id']),html.escape(f['msg'][:200]),html.escape(f['path']),f['line']) for i,f in enumerate(fs)]); open('security-results/codeql-python-$(SERVICE_NAME).html','w').write('<!DOCTYPE html><html><head><meta charset=utf-8><title>CodeQL Report - $(SERVICE_NAME)</title><style>body{font-family:Arial,sans-serif;margin:20px}table{border-collapse:collapse;width:100%%}th,td{border:1px solid #ddd;padding:8px;text-align:left}th{background:#4472C4;color:white}tr:nth-child(even){background:#f2f2f2}</style></head><body><h1>CodeQL Security Report: $(SERVICE_NAME)</h1><p><strong>Total findings:</strong> %d</p><table><tr><th>#</th><th>Severity</th><th>Rule</th><th>Message</th><th>Location</th></tr>%s</table></body></html>'%(len(fs),rows)); print(' Generated HTML report with %d finding(s)'%len(fs))"; \
494+
else \
495+
echo " ⚠️ No SARIF file to convert."; \
496+
fi
497+
498+
@echo "✅ Python analysis complete."
499+
@echo "✅ CodeQL scan complete: security-results/codeql-*"
500+
453501
codeql-scan:
454502
@echo "🛡️ Running CodeQL Security Analysis..."
455503
@if ! command -v codeql >/dev/null 2>&1; then \

0 commit comments

Comments
 (0)