Test repository for validating Trivy container scanning workflows before rolling out changes to shared CI/CD pipelines.
This repository tests:
- Local image scanning - Trivy scans Docker images without pushing to a registry
- Table output - Vulnerability results visible in GitHub Actions logs
- SARIF integration - Results uploaded to GitHub Security tab (public repos)
- Exit code behavior - Non-blocking vs blocking modes
- CVE suppression -
.trivyignorefunctionality
# Build locally
docker build -t trivy-test:local .
# Run container
docker run -p 3000:3000 trivy-test:local
# Test endpoint
curl http://localhost:3000/health| Job | Purpose |
|---|---|
hadolint |
Lint Dockerfile, upload SARIF |
build-and-scan |
Build image, run Trivy (non-blocking), upload SARIF |
test-blocking-mode |
Test exit-code=1 behavior (fails on CRITICAL) |
Check the build-and-scan job logs for vulnerability table.
For public repos, check Security → Code scanning alerts for Trivy and Hadolint results.
exit-code: 0- Workflow passes regardless of findingsexit-code: 1- Workflow fails if vulnerabilities match severity filter
Add a CVE ID to .trivyignore to verify it's excluded from results:
# .trivyignore
CVE-2023-XXXXX
- No registry push required - Trivy scans local images directly
- Faster feedback - Vulnerabilities caught before push
- SARIF condition - Only uploads on public repos (
github.event.repository.visibility == 'public')
| File | Description |
|---|---|
src/index.ts |
Express HTTP server |
Dockerfile |
Multi-stage build (node:20-alpine) |
.trivyignore |
CVE suppression list |
.github/workflows/test-trivy.yml |
Test workflow |