blob: f24013ae6cec348da6cc3b9fa7e9fae41bc85d83 [file] [log] [blame] [view]
# worker
`worker` is a binary that can act as both a CLI and a web server.
With no command-line arguments, it listens for HTTP traffic at the `PORT`
environment variable. There is no reason to run the server locally (except
debugging), so this document describes only the CLI.
The CLI can display Firestore database of CVE records, update the database from
commits of the CVE repo github.com/CVEProject/cvelist, and file issues.
## Setup
You will need a Google Cloud account and a project to run the worker. If you
don't already have default credentials on your machine, set them up with
```
gcloud auth application-default login
```
To run most CLI commands you'll need a `-project` flag, to specify the GCP
project where the Firestore DB resides. Since there is only one Firestore DB per
project and we want multiple, independent DBs, we also require a string called the
"namespace," specified with `-namespace`.
## update COMMIT
The update command takes a commit hash from the github.com/CVEProject/cvelist
repo, and modifies the DB to match the commit, creating and modifying CVE
records as needed. It does not file any issues; it only categorizes CVEs as
needing issues, not requiring action, and so on.
The command
```
worker -project go-vuln -namespace test update HEAD
```
will clone the cvelist repo from github and update the `test` namespace with the
most recent commit of the repo. It will contact pkg.go.dev to determine whether
URLs are modules.
To update at a different commit, or just to avoid the clone, clone the repo
locally and provide a path to it:
```
worker -project go-vuln -namespace test \
-local-cve-repo ~/repos/github.com/CVEProject/cvelist \
update cb2d8ae8ac0afed043d0fd99669e1aaac42e8b69
```
To avoid hitting pkg.go.dev, compile a file of known module paths, one per line,
and pass it as well:
```
worker -project go-vuln -namespace test \
-local-cve-repo ~/repos/github.com/CVEProject/cvelist \
-known-module-file ~/module-paths.txt \
update cb2d8ae8ac0afed043d0fd99669e1aaac42e8b69
```
If an update is interrupted or fails to complete, subsequent calls to `worker
update` will fail. If you're sure there is no concurrent update in progress, it
is safe to pass the `-force` flag to force the update.
## list-cves
The command
```
worker -project go-vuln -namespace test list-cves NeedsIssue
```
will list all CVE records that need an issue. You can also use these other
argument values (from internal/worker/store/store.go:TriageState):
- IssueCreated
- UpdatedSinceIssueCreation
- HasVuln
- FalsePositive
It's not recommended to pass the "NoActionNeeded" triage state, because the vast
majority of records have this state and listing them takes a long time.
## create-issues
To create issues from records that need them, use the `create-issues` subcommand
and provide a repo and the path to a file that holds a GitHub access token.
You can also limit the number of issues created.
```
worker -project go-vuln -namespace test \
-issue-repo myorg/myrepo \
-ghtokenfile ~/github-token \
-limit 10 \
create-issues
```
## list-updates
This subcommand shows the update operations that have run, most to least recent.
## show
Run `show` with a list of CVE IDs to display the corresponding CVE records.