Security scan #797
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |