|
1 | 1 | # Snyk scan for training‑runtime Dockerfiles |
2 | | -# push to main, nightly 03:00 UTC, fork PRs after label `safe-to-test` |
| 2 | +# push to main, nightly 03:00 UTC, fork PRs after label `run‑snyk` |
3 | 3 | # Fails on High/Critical CVEs |
4 | 4 |
|
5 | | -name: Snyk Dockerfile Security Scan |
| 5 | +name: Snyk Dockerfile Scan |
6 | 6 |
|
7 | 7 | on: |
8 | 8 | push: |
|
35 | 35 | runs-on: ubuntu-latest |
36 | 36 | if: > |
37 | 37 | github.event_name != 'pull_request_target' || |
38 | | - github.event.label.name == 'safe-to-test' || |
| 38 | + github.event.label.name == 'run‑snyk' || |
39 | 39 | github.event.pull_request.head.repo.owner.login == github.repository_owner |
40 | 40 | permissions: |
41 | 41 | contents: read |
@@ -392,6 +392,28 @@ jobs: |
392 | 392 | run: | |
393 | 393 | RESULTS_DIR="scan_results" |
394 | 394 | |
| 395 | + get_display_name() { |
| 396 | + local dockerfile="$1" |
| 397 | + local base_image=$(grep -m 1 "^FROM" "$dockerfile" | awk '{print $2}' | sed 's/ AS .*//g') |
| 398 | + |
| 399 | + # Try to resolve ARG variables from the Dockerfile |
| 400 | + while IFS= read -r line; do |
| 401 | + if [[ "$line" =~ ^ARG[[:space:]]+([^=[:space:]]+)=(.+)$ ]]; then |
| 402 | + local var_name="${BASH_REMATCH[1]}" |
| 403 | + local var_value="${BASH_REMATCH[2]//[\"\']}" |
| 404 | + base_image="${base_image//\$\{$var_name\}/$var_value}" |
| 405 | + base_image="${base_image//\$var_name/$var_value}" |
| 406 | + fi |
| 407 | + done < "$dockerfile" |
| 408 | + |
| 409 | + # If still contains variables, add note for display |
| 410 | + if [[ "$base_image" =~ \$\{.*\} ]] || [[ "$base_image" =~ \$[A-Z_]+ ]]; then |
| 411 | + echo "$base_image (contains build-time variables)" |
| 412 | + else |
| 413 | + echo "$base_image" |
| 414 | + fi |
| 415 | + } |
| 416 | + |
395 | 417 | get_base_vulns() { |
396 | 418 | local json_file="$1" |
397 | 419 | local count="${2:-999999}" |
@@ -698,10 +720,11 @@ jobs: |
698 | 720 | NEW_LOW=$(get_new_vuln_count "$FULL_SCAN_JSON" "$BASE_SCAN_JSON" "low") |
699 | 721 | NEW_TOTAL=$((NEW_CRITICAL + NEW_HIGH + NEW_MEDIUM + NEW_LOW)) |
700 | 722 | |
701 | | - # Get display name for base image |
| 723 | + # Get display name for base image from stored names |
702 | 724 | DISPLAY_BASE_IMAGE="${BASE_IMAGE_NAMES[$BASE_SCAN_KEY]}" |
703 | 725 | if [ -z "$DISPLAY_BASE_IMAGE" ]; then |
704 | | - DISPLAY_BASE_IMAGE="$BASE_IMAGE" |
| 726 | + # If not found in stored names, generate it directly |
| 727 | + DISPLAY_BASE_IMAGE=$(get_display_name "$DOCKERFILE_PATH") |
705 | 728 | fi |
706 | 729 | else |
707 | 730 | NEW_CRITICAL=0; NEW_HIGH=0; NEW_MEDIUM=0; NEW_LOW=0; NEW_TOTAL=0 |
|
0 commit comments