You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Search results will include branch matches: package PURLs annotated with `@branch` inside the match list (e.g. `pkg:npm/[email protected]@feature-x`). Dependency Review additions / updates are also searched; only added/updated head-side packages are considered.
83
+
84
+
If a branch SBOM or diff retrieval fails, the error is recorded but does not stop collection for other branches or repositories.
85
+
86
+
#### Handling Missing Dependency Review Snapshots
87
+
88
+
If the Dependency Review API returns a 404 for a branch diff (commonly due to a missing dependency snapshot on either the base or head commit), the toolkit can optionally attempt to generate and submit a snapshot using Component Detection and Dependency Submission. This is vendored-in and forked from the public [Component Detection Dependency Submission Action](https://github.com/advanced-security/component-detection-dependency-submission-action).
89
+
90
+
Enable automatic submission + retry with:
91
+
92
+
```bash
93
+
--submit-on-missing-snapshot
94
+
```
95
+
96
+
The tool will attempt to download the latest Component Detection release from GitHub Releases into the current directory, to run it, unless you provide a local binary with `--component-detection-bin`.
97
+
98
+
If submission fails, the original 404 reason is retained and collection proceeds.
99
+
100
+
##### Using a Local Component Detection Binary
101
+
102
+
Instead of downloading the latest release automatically, you can point the toolkit at a local `component-detection` executable. This is useful if you already manage the binary or need a custom build.
103
+
104
+
Pass the path via `--component-detection-bin` and optionally limit languages to reduce sparse checkout size:
On MacOS, you may find that system protection prevents running a downloaded binary. You can [check out the .NET code](https://github.com/microsoft/component-detection/) and run it via a wrapper script such as:
If you also perform a search in the same invocation (add `--purl` or `--purl-file`), the JSON file will contain both `malwareMatches` and `search` top-level keys.
133
213
214
+
#### Advisory Rate Limit Handling
215
+
216
+
Advisory sync uses GitHub GraphQL with adaptive retry/backoff to handle secondary rate limits and transient errors:
217
+
218
+
- Retries on `403` secondary rate limit, `429`, and `5xx` responses.
219
+
- Honors `Retry-After` when provided; otherwise uses exponential backoff with jitter.
220
+
- Respects `--quiet` to suppress retry log messages.
221
+
222
+
If retries are exhausted, the sync aborts gracefully and leaves previously cached advisories intact.
223
+
134
224
#### Ignoring Matches
135
225
136
226
Provide a YAML ignore file via `--ignore-file` to suppress specific matches (before SARIF generation / JSON output). Structure:
@@ -295,31 +385,42 @@ Then type one PURL query per line. Entering a blank line or using Ctrl+C on a bl
295
385
296
386
| Arg | Purpose |
297
387
|------|---------|
298
-
| `--sbom-cache <dir>` | Directory holding per-repo SBOM JSON files (required for offline mode; used as write target when syncing) |
299
-
| `--sync-sboms` | Perform API calls to (re)collect SBOMs; without it the CLI runs offline loading cached SBOMs. Requires a GitHub token |
| `--malware-cutoff <ISO-date>` | Ignore advisories whose publishedAt AND updatedAt are both before this date/time (e.g. `2025-09-29` or full timestamp) |
311
-
| `--ignore-file <path>` | YAML ignore file (advisories / purls / scoped blocks) to filter malware matches before output |
312
-
| `--ignore-unbounded-malware` | Ignore matches whose advisory vulnerable version range covers all versions (e.g. `*`, `>=0`, `0.0.0`) |
Standard & secondary rate limits trigger an automatic retry (up to 2 times).
366
467
367
-
You can tune concurrency and increase the delay to reduce the chance of hitting rate limits.
468
+
You can tune concurrency and increase the various delays to reduce the chance of hitting rate limits, if you find that you have hit rate limits.
368
469
369
470
Each time a secondary rate limit is hit, the delay between fetching SBOMs is increased by 10%, to provide a way to adaptively respond to that rate limit.
0 commit comments