1+ name : Security Scans
2+
3+ on :
4+ push :
5+ branches : [ main ]
6+ pull_request :
7+ branches : [ main ]
8+ schedule :
9+ - cron : ' 0 0 * * 0' # Weekly scan
10+
11+ permissions :
12+ actions : read
13+ contents : read
14+ security-events : write
15+
16+ jobs :
17+ codeql :
18+ name : CodeQL Analysis
19+ runs-on : ubuntu-latest
20+
21+ strategy :
22+ fail-fast : false
23+ matrix :
24+ language : [ 'python' ]
25+
26+ steps :
27+ - name : Checkout repository
28+ uses : actions/checkout@v4
29+
30+ - name : Initialize CodeQL
31+ uses : github/codeql-action/init@v2
32+ with :
33+ languages : ${{ matrix.language }}
34+
35+ - name : Autobuild
36+ uses : github/codeql-action/autobuild@v2
37+
38+ - name : Perform CodeQL Analysis
39+ uses : github/codeql-action/analyze@v2
40+
41+ dependency-review :
42+ name : Dependency Review
43+ runs-on : ubuntu-latest
44+ if : github.event_name == 'pull_request'
45+
46+ steps :
47+ - name : Checkout repository
48+ uses : actions/checkout@v4
49+
50+ - name : Dependency Review
51+ uses : actions/dependency-review-action@v3
52+
53+ secret-scan :
54+ name : Secret Scanning
55+ runs-on : ubuntu-latest
56+
57+ steps :
58+ - name : Checkout repository
59+ uses : actions/checkout@v4
60+
61+ - name : Run Trivy vulnerability scanner in repo mode
62+ uses : aquasecurity/trivy-action@master
63+ with :
64+ scan-type : ' fs'
65+ scan-ref : ' .'
66+ format : ' sarif'
67+ output : ' trivy-results.sarif'
68+
69+ - name : Upload Trivy scan results to GitHub Security tab
70+ uses : github/codeql-action/upload-sarif@v2
71+ if : always()
72+ with :
73+ sarif_file : ' trivy-results.sarif'
74+
75+ python-security :
76+ name : Python Security Scan
77+ runs-on : ubuntu-latest
78+
79+ steps :
80+ - name : Checkout repository
81+ uses : actions/checkout@v4
82+
83+ - name : Set up Python
84+ uses : actions/setup-python@v4
85+ with :
86+ python-version : ' 3.12'
87+
88+ - name : Install dependencies
89+ run : |
90+ python -m pip install --upgrade pip
91+ pip install bandit[toml] safety
92+
93+ - name : Run Bandit security linter
94+ run : |
95+ bandit -r . -f json -o bandit-results.json || true
96+
97+ - name : Run Safety security scanner
98+ run : |
99+ safety check --json --output safety-results.json || true
100+
101+ - name : Upload security scan results
102+ uses : actions/upload-artifact@v3
103+ if : always()
104+ with :
105+ name : security-scan-results
106+ path : |
107+ bandit-results.json
108+ safety-results.json
0 commit comments