@@ -113,6 +113,29 @@ jobs:
113113 - name : Run govulncheck
114114 run : go tool govulncheck ./...
115115
116+ scan-fs :
117+ name : Trivy filesystem scan
118+ needs : changes
119+ if : github.event_name == 'merge_group' || ((needs.changes.outputs.go == 'true' || needs.changes.outputs.workflows == 'true') && (github.event_name != 'push' || github.actor != 'github-merge-queue[bot]'))
120+ runs-on : depot-ubuntu-24.04-8
121+ timeout-minutes : 20
122+ permissions :
123+ contents : read
124+ steps :
125+ - name : Checkout
126+ uses : actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
127+ with :
128+ persist-credentials : false
129+
130+ - name : Trivy filesystem scan
131+ uses : aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8 # v0.33.1
132+ with :
133+ scan-type : fs
134+ scan-ref : .
135+ skip-dirs : vendor
136+ severity : HIGH,CRITICAL
137+ exit-code : ' 1'
138+
116139 test :
117140 needs : changes
118141 if : github.event_name == 'merge_group' || (needs.changes.outputs.go == 'true' && (github.event_name != 'push' || github.actor != 'github-merge-queue[bot]'))
@@ -290,6 +313,45 @@ jobs:
290313 echo "=== CNPG controller logs ==="
291314 kubectl -n cnpg-system logs deploy/cnpg-controller-manager --tail=200 || true
292315
316+ image-scan :
317+ name : Trivy image scan
318+ needs : changes
319+ if : github.event_name == 'merge_group' || (needs.changes.outputs.publish == 'true' && (github.event_name != 'push' || github.actor != 'github-merge-queue[bot]'))
320+ runs-on : depot-ubuntu-24.04-8
321+ timeout-minutes : 20
322+ steps :
323+ - name : Checkout
324+ uses : actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
325+ with :
326+ persist-credentials : false
327+
328+ - name : Setup Go
329+ uses : actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5.6.0
330+ with :
331+ go-version-file : go.mod
332+ cache : true
333+
334+ - name : Build linux/amd64 binary for image
335+ env :
336+ GOFLAGS : -mod=vendor
337+ CGO_ENABLED : " 0"
338+ GOOS : linux
339+ GOARCH : amd64
340+ run : |
341+ mkdir -p linux/amd64
342+ go build -o linux/amd64/coder-k8s ./
343+
344+ - name : Build local image
345+ run : docker build -f Dockerfile.goreleaser -t coder-k8s:scan .
346+
347+ - name : Trivy image scan
348+ uses : aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8 # v0.33.1
349+ with :
350+ scan-type : image
351+ image-ref : coder-k8s:scan
352+ severity : HIGH,CRITICAL
353+ exit-code : ' 1'
354+
293355 terraform :
294356 name : Terraform (fmt/validate/tflint/trivy)
295357 needs : changes
@@ -393,16 +455,18 @@ jobs:
393455
394456 publish-main :
395457 name : Publish GHCR :main
396- needs : [changes, test, lint, lint-actions, e2e-kind, terraform]
458+ needs : [changes, test, lint, scan-fs, lint-actions, e2e-kind, image-scan , terraform]
397459 if : |
398460 always() &&
399461 github.event_name == 'push' &&
400462 github.ref == 'refs/heads/main' &&
401463 needs.changes.outputs.publish == 'true' &&
402464 (needs.test.result == 'success' || needs.test.result == 'skipped') &&
403465 (needs.lint.result == 'success' || needs.lint.result == 'skipped') &&
466+ (needs.scan-fs.result == 'success' || needs.scan-fs.result == 'skipped') &&
404467 (needs.lint-actions.result == 'success' || needs.lint-actions.result == 'skipped') &&
405468 (needs.e2e-kind.result == 'success' || needs.e2e-kind.result == 'skipped') &&
469+ (needs.image-scan.result == 'success' || needs.image-scan.result == 'skipped') &&
406470 (needs.terraform.result == 'success' || needs.terraform.result == 'skipped')
407471 runs-on : depot-ubuntu-24.04-8
408472 timeout-minutes : 30
@@ -464,3 +528,11 @@ jobs:
464528 org.opencontainers.image.vendor=Coder
465529 org.opencontainers.image.licenses=Apache-2.0
466530 org.opencontainers.image.authors=Coder
531+
532+ - name : Trivy image scan (:main)
533+ uses : aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8 # v0.33.1
534+ with :
535+ scan-type : image
536+ image-ref : ghcr.io/coder/coder-k8s:main
537+ severity : HIGH,CRITICAL
538+ exit-code : ' 1'
0 commit comments