| # 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. |