name: Security Scan (Trivy) on: push: branches: [main, develop] paths: - 'Dockerfile' - 'docker-compose.yml' - 'api/**' schedule: # Run weekly on Monday at 07:00 UTC - cron: '0 7 * * 1' workflow_dispatch: jobs: trivy-docker: name: Trivy — Docker image scan runs-on: ubuntu-latest permissions: security-events: write contents: read steps: - name: Checkout repository uses: actions/checkout@v4 - name: Build Docker image run: docker build -t evershelf:scan . - name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@master with: image-ref: 'evershelf:scan' format: 'sarif' output: 'trivy-results.sarif' severity: 'CRITICAL,HIGH' exit-code: '0' # don't fail the build, just report - name: Upload Trivy SARIF to GitHub Security tab uses: github/codeql-action/upload-sarif@v3 with: sarif_file: 'trivy-results.sarif' category: 'trivy-docker' trivy-fs: name: Trivy — Filesystem scan runs-on: ubuntu-latest permissions: security-events: write contents: read steps: - name: Checkout repository uses: actions/checkout@v4 - name: Run Trivy filesystem scanner uses: aquasecurity/trivy-action@master with: scan-type: 'fs' scan-ref: '.' format: 'sarif' output: 'trivy-fs-results.sarif' severity: 'CRITICAL,HIGH' exit-code: '0' - name: Upload Trivy FS SARIF uses: github/codeql-action/upload-sarif@v3 with: sarif_file: 'trivy-fs-results.sarif' category: 'trivy-fs'