@@ -103,103 +103,58 @@ trivy_tmp_dir="$(mktemp -d -p "$PROJECT_ROOT")"
103103
104104trap ' rm -rf "$tmp_dir" "$trivy_tmp_dir"' EXIT
105105
106- # Scan both example and enterprise images
107106for image in " ${IMAGES[@]} " ; do
108- # Process example images (primary)
109- example_image_ref=" codercom/example-${image} :${TAG} "
110- example_image_name=" example-${image} -${TAG} "
111- example_output=" ${tmp_dir} /example-${image} -${TAG} .sarif"
112-
113- if docker image inspect " $example_image_ref " > /dev/null 2>&1 ; then
114- old_tmpdir=" ${TMPDIR:- } "
115- export TMPDIR=" $trivy_tmp_dir "
116-
117- # The timeout is set to 15 minutes because in Java images it can take a while
118- # to scan JAR files for vulnerabilities.
119- run_trace $DRY_RUN trivy image \
120- --severity CRITICAL,HIGH \
121- --format sarif \
122- --output " $example_output " \
123- --timeout 15m0s \
124- " $example_image_ref " 2>&1 | indent
125-
126- if [ " $old_tmpdir " = " " ]; then
127- unset TMPDIR
128- else
129- export TMPDIR=" $old_tmpdir "
130- fi
131-
132- if [ $DRY_RUN = false ] && [ -f " $example_output " ]; then
133- # Do substitutions to add extra details to every message. Without these
134- # substitutions, most messages won't have any information about which image
135- # the vulnerability was found in.
136- jq \
137- " .runs[].tool.driver.name |= \" Trivy ${example_image_name} \" " \
138- " $example_output " > " $example_output .tmp"
139- mv " $example_output .tmp" " $example_output "
140- jq \
141- " .runs[].results[].locations[].physicalLocation.artifactLocation.uri |= \" ${example_image_name} /\" + ." \
142- " $example_output " > " $example_output .tmp"
143- mv " $example_output .tmp" " $example_output "
144- jq \
145- " .runs[].results[].locations[].message.text |= \" ${example_image_name} : \" + ." \
146- " $example_output " > " $example_output .tmp"
147- mv " $example_output .tmp" " $example_output "
148- elif [ $DRY_RUN = false ]; then
149- echo " No SARIF output found for image '$example_image_ref ' at '$example_output '" >&2
150- exit 1
151- fi
152- else
153- echo " Image '$example_image_ref ' does not exist locally; skipping" >&2
107+ image_ref=" codercom/enterprise-${image} :${TAG} "
108+ image_name=" ${image} -${TAG} "
109+ output=" ${tmp_dir} /${image} -${TAG} .sarif"
110+
111+ if ! docker image inspect " $image_ref " > /dev/null 2>&1 ; then
112+ echo " Image '$image_ref ' does not exist locally; skipping" >&2
113+ continue
154114 fi
155115
156- # Process enterprise images (alias)
157- enterprise_image_ref=" codercom/enterprise-${image} :${TAG} "
158- enterprise_image_name=" enterprise-${image} -${TAG} "
159- enterprise_output=" ${tmp_dir} /enterprise-${image} -${TAG} .sarif"
160-
161- if docker image inspect " $enterprise_image_ref " > /dev/null 2>&1 ; then
162- old_tmpdir=" ${TMPDIR:- } "
163- export TMPDIR=" $trivy_tmp_dir "
164-
165- # The timeout is set to 15 minutes because in Java images it can take a while
166- # to scan JAR files for vulnerabilities.
167- run_trace $DRY_RUN trivy image \
168- --severity CRITICAL,HIGH \
169- --format sarif \
170- --output " $enterprise_output " \
171- --timeout 15m0s \
172- " $enterprise_image_ref " 2>&1 | indent
173-
174- if [ " $old_tmpdir " = " " ]; then
175- unset TMPDIR
176- else
177- export TMPDIR=" $old_tmpdir "
178- fi
179-
180- if [ $DRY_RUN = false ] && [ -f " $enterprise_output " ]; then
181- # Do substitutions to add extra details to every message. Without these
182- # substitutions, most messages won't have any information about which image
183- # the vulnerability was found in.
184- jq \
185- " .runs[].tool.driver.name |= \" Trivy ${enterprise_image_name} \" " \
186- " $enterprise_output " > " $enterprise_output .tmp"
187- mv " $enterprise_output .tmp" " $enterprise_output "
188- jq \
189- " .runs[].results[].locations[].physicalLocation.artifactLocation.uri |= \" ${enterprise_image_name} /\" + ." \
190- " $enterprise_output " > " $enterprise_output .tmp"
191- mv " $enterprise_output .tmp" " $enterprise_output "
192- jq \
193- " .runs[].results[].locations[].message.text |= \" ${enterprise_image_name} : \" + ." \
194- " $enterprise_output " > " $enterprise_output .tmp"
195- mv " $enterprise_output .tmp" " $enterprise_output "
196- elif [ $DRY_RUN = false ]; then
197- echo " No SARIF output found for image '$enterprise_image_ref ' at '$enterprise_output '" >&2
198- exit 1
199- fi
116+ old_tmpdir=" ${TMPDIR:- } "
117+ export TMPDIR=" $trivy_tmp_dir "
118+
119+ # The timeout is set to 15 minutes because in Java images it can take a while
120+ # to scan JAR files for vulnerabilities.
121+ run_trace $DRY_RUN trivy image \
122+ --severity CRITICAL,HIGH \
123+ --format sarif \
124+ --output " $output " \
125+ --timeout 15m0s \
126+ " $image_ref " 2>&1 | indent
127+
128+ if [ " $old_tmpdir " = " " ]; then
129+ unset TMPDIR
200130 else
201- echo " Image ' $enterprise_image_ref ' does not exist locally; skipping " >&2
131+ export TMPDIR= " $old_tmpdir "
202132 fi
133+
134+ if [ $DRY_RUN = true ]; then
135+ continue
136+ fi
137+
138+ if [ ! -f " $output " ]; then
139+ echo " No SARIF output found for image '$image_ref ' at '$output '" >&2
140+ exit 1
141+ fi
142+
143+ # Do substitutions to add extra details to every message. Without these
144+ # substitutions, most messages won't have any information about which image
145+ # the vulnerability was found in.
146+ jq \
147+ " .runs[].tool.driver.name |= \" Trivy ${image_name} \" " \
148+ " $output " > " $output .tmp"
149+ mv " $output .tmp" " $output "
150+ jq \
151+ " .runs[].results[].locations[].physicalLocation.artifactLocation.uri |= \" ${image_name} /\" + ." \
152+ " $output " > " $output .tmp"
153+ mv " $output .tmp" " $output "
154+ jq \
155+ " .runs[].results[].locations[].message.text |= \" ${image_name} : \" + ." \
156+ " $output " > " $output .tmp"
157+ mv " $output .tmp" " $output "
203158done
204159
205160# Merge all SARIF files into one.
0 commit comments