Repository navigation
Releases: SolDevelo/InfraScan
Releases · SolDevelo/InfraScan
Release list
InfraScan v1.2.3
InfraScan 1.2.3 Release Notes
This release contains all changes since v1.2.2.
Highlights
- Grading recalibrated. Grades will shift compared with 1.2.2, mostly upward for repositories with many clean images and downward where a Critical/High finding used to be diluted by good scores elsewhere.
- Container score is based on scanned images. The maximum score now uses the number of images that were scanned (clean ones included) instead of the IaC resource count, so one vulnerable image among many clean ones is no longer judged against an unrelated denominator.
- Container severity weights: Medium 0.5, Low 0.1, Info 0 (Critical and High unchanged).
- CVEs with no fix available are graded one severity level lower. The report and
--fail-onstill use the real severity. - Categories with nothing to check are graded N/A and left out of the overall grade — no Terraform, no IaC resources, or no images no longer produce a misleading "A".
- Critical/High severity caps now apply to the overall grade too, not only to the category. When a cap lowers a grade,
GradeInfo.cap_reasonsays why.
Fixes
- "Address N images with …" recommendation counts images, not findings.
- Grype remediation picks the lowest fix above the installed version. The first fix listed could be a downgrade.
Notes
- The application version has been updated to
1.2.3.
InfraScan v1.2.2
InfraScan 1.2.2 Release Notes
This release contains all changes since v1.2.1.
Highlights
- New
fail-onthresholds that only count what a PR adds:new_high_critical,new_critical,new_any. The existing thresholds count every finding in the repository, so in a repo with even one existing HIGH findingfail-on: high_criticalfails every PR, including ones that don't touch infrastructure. Thenew_*thresholds compare against the baseline (the same comparison the PR comment's "New findings" uses) and fail only on findings the PR introduces. With no baseline — a push to the default branch, or a PR whose base branch couldn't be scanned — they're skipped with a notice in the log instead of treating every existing finding as new. The examples now usenew_high_critical. fail-ondefaults to an explicitneverin the GitHub Action and the Bitbucket pipe (same behaviour as before: no threshold, no failure).- Variables in compose image names are expanded the way
docker composedoes.image: prom/prometheus:${PROMETHEUS_VERSION}used to be resolved only from the scanner's own environment, so in CI such images were reported as unscannable. InfraScan now reads the environment, then.env, then the committed.env.example/.env.sample(since.envis usually gitignored), looked for next to the compose file and in parent directories. Supports$VAR,${VAR},${VAR:-default},${VAR-default}. Values are only used to expand image names and are never exported — a placeholder likeSLACK_WEBHOOK_URLin.env.examplehas no effect. An image with a variable that still can't be resolved is reported as not scanned, naming the variable. The file list is configurable withCONTAINER_ENV_FILES/container-env-files(e.g.deploy/versions.env,.env.sample). - Configurable per-image container scan timeout:
CONTAINER_SCAN_TIMEOUT/container-scan-timeout, default 300 s (previously a fixed 240 s for Grype and 120 s for Docker Scout). The limit covers the pull and the analysis, and for large images the analysis dominates — e.g.grafana/grafana: ~40 s to pull, ~3 min in Syft's binary cataloger, so it didn't fit in 240 s. A timed-out image is reported as not scanned, with a hint to raise the limit.
Fixes
- GitHub Action:
skip-if-no-matchnever skipped a scan. It diffed againstorigin/<base>, whichactions/checkout's default shallow clone doesn't fetch, so the diff was always empty and the scan always ran. The action now fetches the PR's base commit (depth 1) and diffs against it. If that fetch fails, the scan still runs. - Grype: one image timing out skipped the rest of Docker Hub. 1.2.1 skips the remaining images of a registry after it proves unreachable, but its own per-image timeout counted as "unreachable" — so one slow, large image on Docker Hub caused every later Docker Hub image to be skipped, even after earlier ones had been scanned. A registry that has already served an image in the run is no longer blocked, and the per-image timeout never blocks Docker Hub.
- Workflow examples (README,
docs/GITHUB_ACTION.md,docs/PIPELINE_INTEGRATION.md):pushruns only on the default branch (that run saves the baseline PRs compare against; on every branch it duplicated each PR's scan), andcontents: readis included — once a workflow setspermissions:, everything unlisted isnone, andactions/checkoutthen fails on private repositories.
Notes
- The application version has been updated to
1.2.2. - Workflows that generated an env file before the scan just to expand compose image versions can drop that step —
.env.example/.env.sampleare picked up automatically. See "Container scanning" in docs/BITBUCKET_PIPELINE.md and the inputs table in docs/GITHUB_ACTION.md.
v1.2.1
InfraScan 1.2.1 Release Notes
This release contains all changes since v1.2.0.
Highlights
- Images that can't be scanned are now reported, not counted as clean. Previously, if Grype couldn't pull an image (private registry unreachable from the CI runner, missing credentials, tag that doesn't exist), the image silently contributed zero findings. Now each one is listed with its reason in the build log, the PR comment and the step summary / Code Insights report ("K of M container images could not be scanned"). After the first unreachable or unauthorized registry, its remaining images are skipped instead of each one waiting out a timeout.
- Grype is picked automatically when there are no Docker Hub credentials. Docker Scout needs a Docker login even on a free account, so without one every image first failed with Scout before falling back to Grype. Pass credentials to keep using Scout (fewer false positives):
docker-hub-username/docker-hub-passwordinputs (GitHub Action) orDOCKER_HUB_USERNAME/DOCKER_HUB_PASSWORD(Bitbucket pipe). The pipe also getsCONTAINER_SCANNERto force either scanner. - New
container-ignore-images/CONTAINER_IGNORE_IMAGES: a regex of images to skip, e.g.-SNAPSHOT$for images the repo builds itself and only publishes after merge — on a PR the registry only has the previous build, so scanning it is misleading. - Grype vulnerability DB cache (saves a ~2.5 min download per run). GitHub Action: automatic, keyed on the date, so the DB is refreshed once a day. Bitbucket: opt-in
infrascan-grype-dbcache (added to all examples); when Anchore publishes a newer DB, the pipe replaces the cache through the step's local auth proxy, withBITBUCKET_ACCESS_TOKENas a fallback. Scans always use a current DB either way — the cache only decides whether a download is needed.
Fixes
- Bitbucket: stale baseline gave wrong PR deltas. Bitbucket never overwrites an existing cache, so the baseline saved on the first default-branch run was reused for up to a week while the branch kept changing. The baseline now carries a fingerprint of the scanned files; when a PR's target branch has changed since, the pipe scans the target branch directly for that PR's delta.
- Bitbucket: the no-cache baseline fallback didn't work inside the pipe container (git "dubious ownership", the clone's origin proxy unreachable from the pipe, no write access to
.git). It now reads and fetches the target branch without touching the clone. - Bitbucket: a declared Grype DB cache without the
chmodline scanned no images at all. The pipe now ignores a cache directory it can't write to (with a hint in the log) and downloads the DB as if no cache were declared. Pipelines without any caches work out of the box, just slower. - GitHub Action: the baseline was rescanned on every PR. It was only ever saved by PR runs, and GitHub scopes a cache saved by a PR to that PR alone — no other PR could restore it. Pushes to the default branch now save their scan as the baseline for that commit, so PRs targeting it restore it instead of scanning the base branch again. A PR scan failing via
fail-onalso no longer skips saving the baseline or the step summary. - GitHub Action: the baseline scan ignored
directory,scannerandframework, so a PR scan with non-default settings was compared against a differently-scanned baseline and reported false "new" findings. Both scans now use the same settings. - Findings tables showed only the file's basename, not its path — in a repo with many services each having their own
docker-compose.yml/Dockerfile(common in a monorepo), every entry looked identical (e.g.docker-compose.yml:7) with no way to tell which service a finding actually belonged to. The step summary's findings/cost-savings tables and the PR comment's "New findings" table now show the full relative path. - GitHub Actions inline annotations could be dropped non-deterministically. GitHub Actions caps annotations at 10 errors / 10 warnings / 10 notices per step, and silently keeps only "a random subset" beyond that with no indication anything was cut. A repo with more than 10 CRITICAL (or HIGH, or cost-delta) findings would get an arbitrary subset shown as inline annotations from run to run. Findings are already severity-sorted, so InfraScan now stops at 10 per level itself — the ones that do show up are deterministically the most severe, not whatever GitHub happened to keep. Doesn't affect grading, the PR comment, or the step summary, which already show the full set.
Notes
- The application version has been updated to
1.2.1. - Bitbucket users can add the Grype DB cache to their pipeline — see "Grype DB cache" in docs/BITBUCKET_PIPELINE.md. No token permission changes are needed.
v1.2.0
This release contains all changes since v1.1.1.
Highlights
- New: Bitbucket Pipelines integration — InfraScan is now available as a Bitbucket Pipe (
pipe: docker://soldevelo/infrascan:latest), at parity with the GitHub Action: PR comments, a Code Insights report (step-summary equivalent), inline annotations anchored to file/line, an HTML report artifact, and automatic cost/security baseline tracking against the default branch. See docs/BITBUCKET_PIPELINE.md. - The Code Insights report and annotations authenticate with no token required — only the PR comment (a different, more general API) needs a manually created Repository Access Token.
- New
MAX_ANNOTATIONS_PER_IMAGEvariable (default10) caps how many Code Insights annotations a single noisy container image can post, so one image's long CVE list can't drown out every other finding — doesn't affect grading, the PR comment, or the report.
Fixes (apply to both GitHub and Bitbucket)
- Checkov findings could report garbage file paths (e.g.
../../../../../test_infra.tf) — was relpath-ing Checkov's own syntheticfile_pathinstead of its realfile_abs_path. - A container CVE for an image referenced by more than one compose/Kubernetes file was silently dropped for every file but the first one encountered — every referencing file now gets the finding, without double-counting it in grading or the PR comment.
- Container CVE annotations now carry a real line number (the image's declaring line in its compose/Kubernetes file), instead of always being line-less.
Notes
- The application version has been updated to
1.2.0.
InfraScan v1.1.1
InfraScan 1.1.1 Release Notes
This release contains all changes since v1.1.0.
Highlights
feat: improve PR comments: display all new findings by defaultfix: raise grype per-image timeout to cover large image pullsfix: container scanning silently failing under non-default uidfix: show container CVEs in PR comment findingsfix: prevent stored/reflected XSS via repository_url and add nginx rate limits
Other changes
- The GitHub Action's
frameworkinput now defaults tosmart(wasauto), matching the CLI and web UI.smartscans all detected frameworks in a multi-framework repo instead of silently picking one and ignoring the rest — existing workflows that don't setframework:explicitly may see additional findings after this update. action.yml's description andframeworkinput docs updated to reflect Helm/CloudFormation/Ansible security-scanning support (cost estimation remains Terraform-only).
Notes
- The application version has been updated to
1.1.1. - The Marketplace quick-start example now pins the rolling
@v1tag instead of a specific patch version.
v1.1.0
- Step summary: full results in workflow run's Summary tab
- PR comments: grade table + cost estimate + new CRITICAL/HIGH findings (requires pull-requests: write)
- Auto-baseline: cost delta tracking with automatic baseline management
- Smart skipping: skips scan when no matching files changed in PRs
- Inline annotations: ::error and ::warning markers in PR diff view
- Cost estimation improvements
Full Changelog: v1.0.10...v1.1.0
v1.0.10
What's Changed
- fix: reduce false positives in COST-001, COST-006, and COST-007 rules by @jkondrat in #103
- Improve finding display accuracy by @jkondrat in #104
- feat: add last scan link to supported projects table and include scanID in project data by @igor-soldev in #105
- feat: add project scan history page and link from supported projects list by @igor-soldev in #106
Full Changelog: v1.0.9...v1.0.10
v1.0.9
What's Changed
- feat: fetch and automatically pre-select default branch for GitHub repositories by @igor-soldev in #84
- feat: simplify Markdown rendering in PDF report and enhance table layout for better readability by @igor-soldev in #92
- feat(rules): add 8 new cost rules COST-020–COST-027 (RDS old-gen, Lam… by @jkondrat in #94
- fix(rules): lower COST-011 Missing AWS Budget severity to Low by @ClydeTN in #96
- fix: link Recent Scans repository titles to reports by @igor-soldev in #97
- feat(cost): implement cost estimation by @jkondrat in #98
- Add sorting and page size control to Supported Projects table by @igor-soldev in #99
- feat: add support for GitHub Actions scans in Supported Projects by @igor-soldev in #95
- Revise action name and description in action.yml by @igor-soldev in #78
- chore(release): prepare v1.0.9 by @igor-soldev in #100
New Contributors
Full Changelog: v1.0.8...v1.0.9
InfraScan v1.0.8
What's Changed
- feat: Add support for monitoring of InfraScan projects by @igor-soldev in #89
Full Changelog: v1.0.7...v1.0.8
v1.0.7
What's Changed
- feat(seo): implement SEO-friendly report URLs, SSR, and dynamic sitemap by @igor-soldev in #77
- feat: implement report sharing functionality and clean up sitemap configuration by @igor-soldev in #79
- Revise README to enhance project clarity by @igor-soldev in #82
- Implemented the requested logging improvements. by @Natan-gal in #75
- Update grade report card rendering logic by @Natan-gal in #70
- feat: improve Docker Scout vulnerability descriptions in reports by @igor-soldev in #86
- feat: add Ansible support and smart multi-framework detection by @igor-soldev in #85
- feat: update to version 1.0.7, enhance release notes, and improve documentation references by @igor-soldev in #87
Full Changelog: v1.0.6...v1.0.7