Skip to content

Security scan

Security scan #797

name: "Security scan"
on:
workflow_dispatch:
schedule:
- cron: "0 0 * * *"
push:
branches:
- main
- "releases/**"
permissions: {}
jobs:
Trivy-Scan-Vuln:
runs-on: ubuntu-24.04
permissions:
security-events: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
with:
egress-policy: audit
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Setup Python
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
with:
python-version: "3.12"
- name: Install dependencies
run: python -m pip install pip-tools
- name: Freeze dependencies
run: |
mkdir -p trivy_input/base
pip-compile -o trivy_input/base/requirements.txt requirements/requirements.txt
mkdir -p trivy_input/docs
pip-compile -o trivy_input/docs/requirements.txt requirements/requirements-docs.txt
mkdir -p trivy_input/notebooks
pip-compile -o trivy_input/notebooks/requirements.txt requirements/requirements-notebooks.txt
mkdir -p trivy_input/develop
pip-compile -o trivy_input/develop/requirements.txt requirements/requirements-dev.txt
- name: Run Trivy Scan (vuln)
uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 # v0.29.0
with:
scan-type: fs
format: "sarif"
scan-ref: trivy_input
scanners: vuln
output: trivy-results-vuln.sarif
- name: Upload SARIF file
if: ${{ always() }}
uses: github/codeql-action/upload-sarif@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.8
with:
sarif_file: "trivy-results-vuln.sarif"
- name: Run Trivy Scan (spdx)
uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 # v0.29.0
with:
scan-type: fs
format: "spdx-json"
scan-ref: trivy_input
output: trivy-results-spdx.json
- name: Upload Trivy results
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
if: always()
with:
name: trivy-vuln-results
path: "${{ github.workspace }}/trivy-results-*"
retention-days: 7
- name: Upload deps list
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: python-deps-list
path: "${{ github.workspace }}/trivy_input"
retention-days: 7
Trivy-Scan-Misconfig:
runs-on: ubuntu-24.04
permissions:
security-events: write
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Run Trivy Scan (dockerfile and secrets)
uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 # v0.29.0
with:
scan-type: fs
format: "sarif"
scan-ref: .
scanners: misconfig,secret
output: trivy-results-misconfig.sarif
- name: Upload SARIF file
if: ${{ always() }}
uses: github/codeql-action/upload-sarif@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.8
with:
sarif_file: "trivy-results-misconfig.sarif"
- name: Upload Trivy results artifact
if: ${{ always() }}
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: trivy-misconfig-results
path: "${{ github.workspace }}/trivy-results-misconfig.sarif"
retention-days: 7
Bandit:
runs-on: ubuntu-24.04
permissions:
security-events: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
with:
egress-policy: audit
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Setup Python
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
with:
python-version: "3.12"
- name: Install Bandit
run: pip install bandit[sarif]
- name: Bandit Scanning
run: bandit --ini tox.ini -f sarif -o bandit-results.sarif -r --exit-zero . # report generation only
- name: Upload SARIF file
if: ${{ always() }}
uses: github/codeql-action/upload-sarif@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.8
with:
sarif_file: bandit-results.sarif
- name: Upload Bandit artifact
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
if: always()
with:
name: bandit-results
path: bandit-results.sarif
retention-days: 7
Summarize:
needs: [Trivy-Scan-Vuln, Trivy-Scan-Misconfig, Bandit]
if: always()
runs-on: ubuntu-24.04
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
with:
egress-policy: audit
# Create directory first
- name: Create results directory
run: mkdir -p all-results
# Download artifacts with error handling
- name: Download all results
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
continue-on-error: true # Don't fail if some tools didn't generate results
with:
pattern: "*-results"
merge-multiple: true
path: all-results
# Only upload if there are files
- name: Upload combined results
if: hashFiles('all-results/**/*') != ''
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: security-scan-results
path: all-results
retention-days: 7