Config
This page defines the run configuration contract.
Minimal valid config
repositories: repositories/one-repo.yaml
tools:
- github
- ck
workers: 2
If this file lives under configs/, that repository path resolves to
configs/repositories/one-repo.yaml.
Field contract
| Field | Required | Type | Validation | Runtime effect |
|---|---|---|---|---|
repositories |
yes | string | must point to an existing file; file must yield at least one repository entry after parsing | defines the repository set for the run |
tools |
no | string or list of strings | empty names rejected; duplicates removed while preserving first occurrence | selects extractors; omitted means all registered extractors |
workers |
no | positive integer or numeric string | values below 1 are rejected |
upper bound for parallel repository processing |
github_token |
no | string | empty string becomes unset | exported as GITHUB_TOKEN for runtime |
extractor_settings |
no | mapping | each extractor key must be non-empty; each value must be a mapping or null |
passed to extractor factory |
Strict rules that matter in production
- Paths in
repositoriesare resolved relative to the YAML file. ~is expanded before resolution.- A repository file containing only comments and blank lines is invalid.
- Repository files must be YAML sequences.
- Repository entries may include an optional
commit. - Pinned commits are only supported when reachable from the repository's default branch.
workersdefaults toos.cpu_count()when omitted.- non-empty
github_tokenvalues are redacted to***redacted***in the run summary.
Repository file example
Input file (configs/repositories/one-repo.yaml):
- https://github.com/example/alpha.git
- https://github.com/example/beta.git
- https://github.com/example/alpha.git
Effective repository list in the run summary (duplicates removed):
[
{
"repo_url": "https://github.com/example/alpha.git",
"requested_commit_hash": null
},
{
"repo_url": "https://github.com/example/beta.git",
"requested_commit_hash": null
}
]
With pinned commits:
- url: https://github.com/example/alpha.git
commit: deadbeefcafebabe
- https://github.com/example/beta.git
Extractor settings example
repositories: repositories/one-repo.yaml
tools:
- github
- cm
- sonar
extractor_settings:
github:
token: ghp_example
cm:
timeout_seconds: 1800
sonar:
host_url: http://sonarqube:9000
include_frontend: false
concurrency: 1
options: -Dsonar.sources=.
http://sonarqube:9000 is the address inside Docker Compose. Use
http://localhost:9234 only when running JOSSeph directly on the host.
This is a contract, not a suggestion:
- unknown extractor setting names fail before execution
- invalid setting types fail before execution
- unknown tool names fail before execution
Invalid config examples
Broken YAML:
repositories: [unterminated
Invalid worker count:
repositories: repositories/one-repo.yaml
workers: 0
Invalid extractor settings:
repositories: repositories/one-repo.yaml
extractor_settings:
- invalid
Exit behavior
- successful runs without repository-level failures return exit code
0; extractor-level failures are non-fatal and are recorded insummary.json - repository-level failures return exit code
1 - config load failure returns exit code
2 - if config fails before
RunReportCollectoris created, nosummary.jsonis written - if config loads but runtime preparation fails later,
summary.jsonis still written withexit_code: 2