ONAP release component mapping tool - generates definitive manifests of Gerrit projects and Docker images in an ONAP release
Project description
ONAP Release Mapping Tool
ONAP release component mapping tool — generates definitive manifests of Gerrit projects and Docker images comprising an ONAP release.
Results / GitHub Pages
https://modeseven-lfit.github.io/onap-release-mapping-tool/
Overview
onap-release-map follows an OOM-first strategy: it starts from the
OOM Helm umbrella chart, recursively resolves every sub-chart and Docker
image reference, then maps those images back to their source Gerrit
repositories. Further collectors enrich the manifest with data from
the ONAP release management repository, JJB CI definitions, and the
Gerrit REST API.
The tool produces a versioned, self-describing JSON artifact that captures the complete state of the analysis, including:
- Every Gerrit repository participating in the release
- Every Docker image and tag referenced by OOM Helm charts
- Image-to-repository mappings with provenance metadata
- Release management status for each project
- CI/CD pipeline correlation from JJB definitions
- Data source provenance and execution statistics
Features
- OOM Helm chart parsing — recursively walks the OOM umbrella chart to extract all Docker image references and sub-chart dependencies
- Gerrit project discovery — maps Docker images back to their source Gerrit repositories via configurable mapping rules and API queries
- JJB CI correlation — scans Jenkins Job Builder definitions to link repositories with their CI pipeline configurations
- Release management status — ingests the relman
repos.yamlto track per-project release participation and lifecycle state - Nexus Docker registry validation — verifies that every image:tag pair in the manifest actually exists in the ONAP Nexus3 registry
- Manifest diffing — compares two manifests to identify added, removed, and changed repositories or images across releases
- Repository filtering — excludes infrastructure repos (e.g.
All-Projects,All-Users,.github) and read-only/archived projects from reports by default, with full CLI override support - Multi-format export — converts manifests to YAML, CSV, Markdown, or a flat Gerrit repository list
- JSON Schema validation — every manifest conforms to a versioned JSON Schema, enabling downstream tooling to verify artifacts
- GitHub Action — composite action for CI/CD integration that clones OOM, runs discovery, and uploads the manifest as a build artifact
Installation
Install from PyPI:
pip install onap-release-map
Install from source using uv:
git clone https://github.com/modeseven-lfit/onap-release-mapping-tool.git
cd onap-release-mapping-tool
uv sync
Development setup with all extras:
uv sync --group dev
Quick Start
# Clone the OOM repository
git clone --depth 1 https://gerrit.onap.org/r/oom
# Generate the release manifest
onap-release-map discover --oom-path ./oom
The tool writes the manifest to ./output/manifest.json by default.
Commands
discover
The primary command. Parses OOM Helm charts and runs selected collectors to build the release manifest.
# Basic discovery with OOM charts
onap-release-map discover --oom-path ./oom
# Full discovery with all collectors
onap-release-map discover \
--oom-path ./oom \
--collectors oom,gerrit,relman,jjb \
--repos-yaml ./releases/repos.yaml \
--jjb-path ./ci-management/jjb
# Custom output location and format
onap-release-map discover \
--oom-path ./oom \
--output-dir ./results \
--output-format all
| Option | Default | Description |
|---|---|---|
--oom-path PATH |
(required) | Path to a local OOM repository clone |
--collectors LIST |
oom |
Comma-separated collectors: oom, gerrit, relman, jjb |
--release-name NAME |
Rabat |
ONAP release code name |
--output-dir DIR |
./output |
Output directory for manifest files |
--output-format FMT |
json |
Output format: json, yaml, all |
--repos-yaml PATH |
— | Path to relman repos.yaml (required for relman collector) |
--jjb-path PATH |
— | Path to ci-management/jjb/ directory (required for jjb collector) |
--gerrit-url URL |
config | Gerrit REST API base URL |
--filter-repos LIST |
config | Comma-separated Gerrit project names to exclude from reports |
--exclude-readonly / --no-exclude-readonly |
true |
Exclude read-only/archived Gerrit projects from reports |
--mapping-file PATH |
— | Custom image-to-repo mapping YAML override |
--config PATH |
— | Path to YAML configuration file |
--deterministic |
true |
Produce deterministic output (sorted keys, stable ordering) |
-v / -vv / -vvv |
— | Increase verbosity |
diff
Compare two manifests and report differences. Useful for tracking changes between releases or between successive builds.
# Text diff to stdout
onap-release-map diff manifest-old.json manifest-new.json
# Markdown diff written to file
onap-release-map diff \
manifest-old.json manifest-new.json \
--output-format md \
--output changes.md
| Option | Default | Description |
|---|---|---|
MANIFEST_A |
(required) | Path to the baseline manifest (JSON) |
MANIFEST_B |
(required) | Path to the comparison manifest (JSON) |
--output-format FMT |
text |
Output format: text, json, md |
--output PATH |
— | Write diff to file instead of stdout |
--ignore-timestamps |
false |
Ignore generated_at when comparing |
export
Convert a JSON manifest to other formats for consumption by downstream tools and reports.
# Export to YAML
onap-release-map export manifest.json --format yaml --output manifest.yaml
# Export a flat list of Gerrit repository names
onap-release-map export manifest.json --format gerrit-list
# Export Docker images as CSV (use --images flag)
onap-release-map export manifest.json --format csv --output images.csv
| Option | Default | Description |
|---|---|---|
MANIFEST_PATH |
(required) | Path to manifest JSON file |
--format FMT |
yaml |
Output format: yaml, csv, md, html, gerrit-list |
--output PATH |
— | Write to file instead of stdout |
--repos-only / --images-only |
false |
Limit CSV scope to repos or images (mutually exclusive) |
--filter-repos LIST |
— | Comma-separated Gerrit project names to exclude |
--exclude-readonly / --no-exclude-readonly |
true |
Exclude read-only/archived Gerrit projects |
verify
Check that every Docker image:tag pair in a manifest exists in the ONAP Nexus3 Docker registry. Returns a non-zero exit code if any images are missing.
# Verify all images against the default Nexus registry
onap-release-map verify manifest.json
# Use a custom registry with more workers
onap-release-map verify manifest.json \
--nexus-url https://nexus3.example.org \
--workers 8
| Option | Default | Description |
|---|---|---|
MANIFEST_PATH |
(required) | Path to manifest JSON file |
--nexus-url URL |
https://nexus3.onap.org:10001 |
Nexus3 registry URL |
--check-images / --no-check-images |
true |
Verify Docker image:tag existence |
--workers N |
4 |
Number of concurrent validation threads |
--update / --no-update |
true |
Write validation results back to the manifest |
schema
Print the JSON Schema that all manifests conform to. Useful for integrating with validation tools or generating documentation.
# Print schema to stdout
onap-release-map schema
# Save schema to a file
onap-release-map schema > manifest-v1.schema.json
version
Print version information for the tool and the Python runtime.
onap-release-map version
Configuration
The tool ships with a default configuration at
configuration/default.yaml. You can override it with the --config
flag on the discover command.
Key configuration sections:
# ONAP Gerrit server
gerrit:
url: "https://gerrit.onap.org/r"
timeout: 30
max_retries: 3
# OOM repository defaults
oom:
default_branch: "master"
exclude_dirs:
- "argo"
- "archive"
# Repository filtering — repos excluded from reports
filter_repos:
- ".github"
- "All-Projects"
- "All-Users"
# JJB CI job definitions for the ONAP Jenkins instance, not runtime
# release content
- "ci-management"
# Exclude read-only/archived Gerrit projects from reports
exclude_readonly: true
# Nexus registry for validation
nexus:
url: "https://nexus3.onap.org"
timeout: 10
max_retries: 3
concurrent_workers: 4
The filter_repos list and exclude_readonly flag control which
repositories appear in exported reports. Infrastructure repositories
(.github, All-Projects, All-Users) and CI-only repositories
(ci-management, which contains JJB CI job definitions for the ONAP
Jenkins instance) do not appear by default, nor do read-only/archived
Gerrit projects. Override either setting via CLI flags
(--filter-repos, --no-exclude-readonly) or a custom config file.
GitHub Action
The tool is available as a composite GitHub Action for CI/CD pipelines. It automatically clones OOM (or uses a pre-cloned checkout), runs discovery, and uploads the manifest as an artifact.
name: Generate ONAP Release Manifest
on:
workflow_dispatch:
jobs:
manifest:
runs-on: ubuntu-latest
steps:
- name: Generate manifest
uses: modeseven-lfit/onap-release-mapping-tool@main
id: release-map
with:
oom-branch: "master"
release-name: "Rabat"
collectors: "oom,gerrit"
output-format: "all"
- name: Show results
run: |
echo "Repositories: ${{ steps.release-map.outputs.total-repositories }}"
echo "Images: ${{ steps.release-map.outputs.total-images }}"
| Input | Default | Description |
|---|---|---|
oom-path |
(empty — triggers clone) | Path to pre-cloned OOM repo |
oom-branch |
master |
OOM branch to analyze |
gerrit-url |
https://gerrit.onap.org/r |
Gerrit base URL |
collectors |
oom,gerrit |
Comma-separated collector list |
output-dir |
$RUNNER_TEMP |
Output directory |
output-format |
json |
Output format: json, yaml, all |
release-name |
Rabat |
ONAP release code name |
mapping-file |
— | Custom image-to-repo mapping YAML override |
filter-repos |
— | Comma-separated Gerrit projects to exclude |
exclude-readonly |
true |
Exclude read-only/archived Gerrit projects |
python-version |
3.12 |
Python version to use |
version |
latest |
Tool version (e.g. 0.1.0 or latest) |
| Output | Description |
|---|---|
manifest-path |
Path to the generated JSON manifest |
manifest-version |
Schema version of the generated manifest |
total-repositories |
Number of repositories found |
total-images |
Number of Docker images found |
onap-release |
ONAP release name |
Output Formats
| Format | Command | Description |
|---|---|---|
| JSON | discover --output-format json |
Primary manifest format with full metadata and schema validation |
| YAML | discover --output-format yaml |
Human-readable counterpart of the JSON manifest |
| CSV | export --format csv |
Tabular data suitable for spreadsheets (filterable by repos or images) |
| Markdown | export --format md |
Formatted tables for embedding in reports or wikis |
| HTML | export --format html |
Dark-themed interactive report with search, sort, and emoji indicators |
| Gerrit list | export --format gerrit-list |
Flat newline-delimited list of Gerrit project names |
HTML Report Features
The HTML export (export --format html) produces a single dark-themed
HTML report hosted on
GitHub Pages.
CDN-hosted Simple-DataTables
assets supply interactive table behaviour and styling, so the report
requires network access for full functionality.
Interactive Tables
Report tables include search/filter and column sorting powered by Simple-DataTables:
- Search/filter — a search box above each table for real-time filtering
- Column sorting — click any column header to sort ascending/descending
Tables with fewer than three rows skip interactivity, as search and sort add no value to small tables.
State Indicators
The Repositories table uses emoji in the State column to convey release scope at a glance:
| Emoji | Meaning |
|---|---|
| 📦 | READ_ONLY — archived project |
| ✅ | ACTIVE — project content is in the current ONAP release |
| ☑️ | ACTIVE — parent project with children in current release |
| ❌ | ACTIVE — project is NOT in the current ONAP release |
| ❓ | Undetermined — tool could not resolve release scope |
Totals Summary
The Markdown and HTML reports include a Totals subsection directly below the Repositories table. This table provides a numerical count of repositories in each state category alongside the emoji key:
| Total | State | Description |
|---|---|---|
| 90 | ✅ | In current ONAP release |
| 11 | ☑️ | Parent project (children in release) |
| 5 | ❌ | Not in current ONAP release |
| 3 | ❓ | Undetermined |
| 20 | 📦 | Read-only / archived |
The table omits rows with a zero count automatically. When repository
filtering is active (e.g. --exclude-readonly), the totals reflect the
filtered set.
The tool resolves state by cross-referencing four data sources:
- OOM discovery — repos found in OOM Helm charts are definitively in the release (✅)
- Relman
included_in— the release managementrepos.yamltracks which releases each project participates in - READ_ONLY status — archived projects are definitively not in the release (📦)
- Parent project detection — Gerrit parent projects whose children ship in the release receive the parent indicator (☑️)
Development
Install development dependencies:
uv sync --group dev
Run the test suite:
uv run pytest tests/
Run linting and formatting checks:
uv run ruff check src/ tests/
uv run ruff format --check src/ tests/
Run type checking:
uv run mypy src/
This repository uses pre-commit hooks to enforce code quality on every commit. Install them with:
pre-commit install
The hooks run gitlint, ruff, mypy, reuse (SPDX license compliance), yamllint, actionlint, and interrogate (docstring coverage).
Documentation
Full documentation is available on Read the Docs.
License
This project uses the Apache License 2.0. See the LICENSE file for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file onap_release_map-0.5.1.tar.gz.
File metadata
- Download URL: onap_release_map-0.5.1.tar.gz
- Upload date:
- Size: 64.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27f1828b4d5fb1d9770bab9216a2c2fb4fe186b156581818c695a7bb82860b9b
|
|
| MD5 |
d9ee159d2331bf4feb98965c9f5b2c8a
|
|
| BLAKE2b-256 |
669f0daa4354d3c92396b9348ef254a654ffdd4c787416e749a39c4463ff0957
|
Provenance
The following attestation bundles were made for onap_release_map-0.5.1.tar.gz:
Publisher:
build-test-release.yaml on modeseven-lfit/onap-release-mapping-tool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
onap_release_map-0.5.1.tar.gz -
Subject digest:
27f1828b4d5fb1d9770bab9216a2c2fb4fe186b156581818c695a7bb82860b9b - Sigstore transparency entry: 1242767593
- Sigstore integration time:
-
Permalink:
modeseven-lfit/onap-release-mapping-tool@659dc15687360d07b7a94375133e81922b1d22b0 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/modeseven-lfit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-test-release.yaml@659dc15687360d07b7a94375133e81922b1d22b0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file onap_release_map-0.5.1-py3-none-any.whl.
File metadata
- Download URL: onap_release_map-0.5.1-py3-none-any.whl
- Upload date:
- Size: 79.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e0578832632c87981a4fb595164e6c323839b77123383b4291506bf676ca099
|
|
| MD5 |
e022c57456332a1f48c0a2e8d2e4e84c
|
|
| BLAKE2b-256 |
877943bb8c92685abfea53bbcbeb64a5183d36147173de9f1696084a9ade8ed4
|
Provenance
The following attestation bundles were made for onap_release_map-0.5.1-py3-none-any.whl:
Publisher:
build-test-release.yaml on modeseven-lfit/onap-release-mapping-tool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
onap_release_map-0.5.1-py3-none-any.whl -
Subject digest:
3e0578832632c87981a4fb595164e6c323839b77123383b4291506bf676ca099 - Sigstore transparency entry: 1242767594
- Sigstore integration time:
-
Permalink:
modeseven-lfit/onap-release-mapping-tool@659dc15687360d07b7a94375133e81922b1d22b0 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/modeseven-lfit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-test-release.yaml@659dc15687360d07b7a94375133e81922b1d22b0 -
Trigger Event:
push
-
Statement type: