diff --git a/.github/workflows/trivy-scan.yml b/.github/workflows/trivy-scan.yml new file mode 100644 index 0000000..223a48f --- /dev/null +++ b/.github/workflows/trivy-scan.yml @@ -0,0 +1,51 @@ +# Trivy configured to scan for vulnerable dependencies in the project software composition + +name: Trivy Scan + +# Events that triggers Trivy to run +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + name: Trivy Vulnerability Scanner + runs-on: ubuntu-latest + # Skip any PR created by dependabot to avoid permission issues (if used) + if: (github.actor != 'dependabot[bot]') + steps: + # Checking out the repo to scan + - name: Checkout code + uses: actions/checkout@v2 + + # Run Trivy to fail the job on critical vulnerabiliies with fix available + - name: Run Trivy for critical vulnerabilities + uses: aquasecurity/trivy-action@master + with: + scan-type: 'fs' # Filesystem mode + ignore-unfixed: true # Ignore vulnerabilities with no available fix + format: 'table' # Table output mode as next step will report in security tab + severity: 'CRITICAL' # Error only on critical vulnerabilities + exit-code: '1' # Fail the job if a critical vulnerability with fix available is found + + # Run Trivy reporting all vulnerabilities to the security tab + - name: Run Trivy for reporting all vulnerabilities + uses: aquasecurity/trivy-action@master + if: always() # Run this step even if job fails due to critical vuln + with: + scan-type: 'fs' # Filesystem mode + ignore-unfixed: true # Ignore vulnerabilities with no available fix + format: 'template' # Template output mode + template: '@/contrib/sarif.tpl' # SARIF template to be compatible with GitHub security tab + output: 'trivy-results.sarif' # Output file name + severity: 'CRITICAL,HIGH,MEDIUM' # Report on critical/high/medium vulnerabiliies + exit-code: '0' # No failing as for reporting purposes + + # Generate the output as SARIF and upload to the security tab + - name: Upload Trivy results + uses: github/codeql-action/upload-sarif@v1 + if: always() # Upload even if the job has failed due to a vulnerability + with: + sarif_file: 'trivy-results.sarif'