Usage
Parameters
Input JSON file listing all local SRPMs
Output DOT graph file path
Directory containing already built RPMs. Should contain top-level directories for each architecture.
Directory containing already built toolchain RPMs. Should contain top-level directories for each architecture.
Full path to worker_chroot.tar.gz
Full path to a repo file (can be specified multiple times)
Don’t allow missing goal packages
Don’t allow missing unresolved packages
Let grapher resolve cycles by marking RPMs available in upstream repos as remote
Directory to download packages into
Directory to store temporary files while downloading
Pull packages from the upstream preview repo
Disable pulling packages from PMC repos
Ignore package version while downloading package from upstream when resolving cycles
Optional: Repo time limit for tdnf virtual snapshot
TLS client certificate to use when downloading files
TLS client key to use when downloading files
File that stores timestamps for this program
Path to the log file
Log level (panic, fatal, error, warn, info, debug, trace)
How It Works
- Parse Input: Reads the package JSON file containing metadata for all local SRPMs
- Build Graph: Creates nodes for each package with run, build, and test dependencies
- Add Dependencies: Connects nodes based on their runtime, build-time, and test-time requirements
- Resolve Cycles: Optionally resolves circular dependencies by marking packages available in upstream repos as remote
- Output: Writes the final dependency graph in DOT format
Graph Node Types
- Run Node: Represents the runtime requirements of a package
- Build Node: Represents the build-time requirements
- Test Node: Represents the test-time requirements (optional)
- Remote/Unresolved Node: Packages that will be pulled from upstream repositories
Example
Notes
- The output graph is used as input to the scheduler tool for building packages
- Use
--strict-goalsand--strict-unresolvedflags during development to catch missing dependencies early - The
--resolve-cycles-from-upstreamflag is useful when dealing with circular dependencies by pulling some packages from upstream repos - Graph cycles must be resolved before the scheduler can process the build