diff --git a/scripts/trivy_vulnerabilities_data.sh b/scripts/trivy_vulnerabilities_data.sh index cf96a99a8123..e8842ecc3a04 100755 --- a/scripts/trivy_vulnerabilities_data.sh +++ b/scripts/trivy_vulnerabilities_data.sh @@ -71,6 +71,15 @@ case "$IMAGE" in *) product_name="UNKNOWN" ;; esac +# Download Trivy DB if necessary +if [ ! -d "$HOME/.cache/trivy/db" ]; then + echo "Trivy DB not found. Downloading..." + TRIVY_TEMP_DIR=$(mktemp -d) + trivy --cache-dir $TRIVY_TEMP_DIR image --download-db-only + tar -cf ./db.tar.gz -C $TRIVY_TEMP_DIR/db metadata.json trivy.db + rm -rf $TRIVY_TEMP_DIR +fi + # Run Trivy scan echo "Running Trivy scan for image: $IMAGE..." trivy image --db-repository public.ecr.aws/aquasecurity/trivy-db --java-db-repository public.ecr.aws/aquasecurity/trivy-java-db --insecure --format json "$IMAGE" > "trivy_vulnerabilities.json" || { @@ -78,7 +87,6 @@ trivy image --db-repository public.ecr.aws/aquasecurity/trivy-db --java-db-repos exit 1 } - # Process vulnerabilities and generate CSV if jq -e '.Results | length > 0' "trivy_vulnerabilities.json" > /dev/null; then jq -r --arg product "$product_name" '.Results[]? | .Vulnerabilities[]? | "\(.VulnerabilityID),\($product),TRIVY,\(.Severity)"' "trivy_vulnerabilities.json" | sort -u > "$NEW_VULN_FILE"