All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
make test-diff-coveragerunsdiff-coverat 100% vsCOMPARE_BRANCH(defaultorigin/main) aftermake test, matching the PR merge gate;scripts/check-all.shalso generatescoverage.xmland runsdiff-coverwhen the tool and compare ref exist (DIFF_COVER_COMPARE_BRANCHoptional)upload --target-arch-repo:pulp_results.jsonincludes per-architecture RPM distribution base URLs underdistributionswith keysrpm_<arch>(e.g.rpm_x86_64); serializeddistributionsuses sorted keys for stable{name: url}output, alongside build-scoped entries when those repos exist- Upload optionally skips creating logs and SBOM repositories when no log or SBOM uploads are expected;
skip_logs_repo/skip_sbom_repoonUploadContextandPulpHelper.setup_repositories(defaults preserve creating all repos for programmatic callers who omit the flags) upload --target-arch-repo: per-architecture RPM repos/distributions ({namespace}/{arch}/Packages/...); logs/SBOM/artifacts stay build-scoped; lazy repo creation at upload; works with--results-json,--signed-by, and--overwrite; with--signed-by, same arch repo andsigned_byis label-onlyupload --overwrite: RPM-only; remove existing RPM package units in the target repo that match local file SHA256 (andsigned_bywhen set) viaremove_content_unitsbefore uploadupload --results-json: Upload artifacts from pulp_results.json; files resolved from JSON directory or --files-base-path; --build-id and --namespace optional (extracted from artifact labels)- DistributionClient username/password (Basic Auth) support; use
usernameandpasswordin config as alternative to cert/key for pull downloads pull --distribution-config: Path to config file for distribution auth (cert/key or username/password); overrides --transfer-dest/--config for auth when set- Skip artifacts repository and distribution when
--artifact-resultsis a local folder path (no comma); Konflux mode (url_path,digest_path) still creates artifacts repo upload --signed-by: Add signed_by pulp_label to RPMs only; use separate rpms-signed repo (logs/SBOMs never signed)search-bycommand: search RPM content in Pulp by checksum, filename, and/or signed_by; filter results.json by removing found artifacts (--results-json, --output-results); supports --filename/--filenames, --checksum/--checksums, --signed-by, --keep-files; NVR-based queries with incremental API call reduction; --keep-files keeps logs and sboms in output-results (default: only RPM artifacts)codecov.ymlconfiguration file withunit-testsflag and carryforward enabled- packages.redhat.com configuration section in README with OAuth2 setup
- Username/password (Basic Auth) support for packages.redhat.com
- Local
--artifact-resultsfolder path:distributionsinpulp_results.jsonno longer includes a syntheticartifactspulp-content URL (artifacts repo was already skipped; URL map now aligns) upload --target-arch-repo:pulp_results.jsondistributionskeys for per-arch RPM bases arerpm_<arch>instead of bare architecture names (e.g.rpm_x86_64notx86_64)upload/upload-files: infer whether log and SBOM repos are needed before repository setup (directory*.logscan or--results-jsonartifact keys; SBOM via--sbom-pathor SBOM-classified keys); omitted types are excluded from resultsdistributions; clear errors if uploads are attempted without the matching repository- Upload orchestration uses
RpmUploadResultper architecture instead of ad-hoc dicts; gather/collect usesPulpContentRow,ExtraArtifactRef, andFileInfoMapfor clearer typed data flow - Upload flow populates
pulp_results.jsonartifact entries incrementally as RPMs, logs, SBOMs, and generic files finish; final gather still reconciles via merge (keeps incremental entries when keys already exist) - Repository setup logs use the concrete repo slug (e.g.
rpms-signed) instead of a genericRpmslabel; distribution creation logs state thatnameandbase_pathmatch the repository name on one line upload --target-arch-repowith--signed-by: RPM paths remain{arch}/only (no{arch}/rpms-signed); signing is viasigned_bylabel on contentpull: use each artifact'surlfrom pulp_results.json when present instead of synthesizing download URLs from distribution entries
- Results JSON RPM URLs with
--signed-by: use therpms-signeddistribution base (distributions.rpms_signed/ correct artifacturl) instead of the unsignedrpmspath - RPM distribution URLs:
Packages/<letter>/uses the lowercase first character of the RPM basename only (correct for paths likePackages/W/foo.rpm,arch/pkg.rpm, or plainfoo.rpm) - Clear error when no auth credentials provided (client_id/client_secret or username/password)
--artifact-resultsfolder mode: pass a folder path to save pulp_results.json locally instead of uploading to Pulp- Comprehensive type annotations for all function arguments
- Pre-commit hooks for code quality checks
- CHANGELOG.md following Keep a Changelog format
- CONTRIBUTING.md with development guidelines
- Developer scripts for common tasks
- Makefile with common development targets
- .editorconfig for consistent formatting
- Dockerfile for containerized deployments
- Initial release of pulp-tool
- CLI commands: upload, transfer, get-repo-md
- PulpClient for API interactions
- PulpHelper for high-level operations
- DistributionClient for artifact downloads
- Support for RPM, log, and SBOM file management
- OAuth2 authentication with automatic token refresh
- Comprehensive test suite with 85%+ coverage
- Renamed
transfercommand topull; added--transfer-destoption for transfer destination. When using--build-id+--namespace, either--transfer-destor group-level--configcan be used - Renamed file structure from
transfertopull:cli/transfer.py→cli/pull.py,pulp_tool/transfer/→pulp_tool/pull/,TransferContext→PullContext,TransferService→PullService,tests/test_transfer.py→tests/test_pull.py - Upload progress messages (e.g. "Uploading SBOM: X", "Uploading RPM: X") now use logging.warning instead of info
- Consolidated all dependencies into pyproject.toml
- Improved type safety across the codebase
- Enhanced error handling and logging
- Per-file upload progress: "Uploading X: filename" now logged at INFO so progress is visible at default verbosity
- README: Makefile-first development workflow, pre-commit, fixed typos and duplicate Create Repository section
- CONTRIBUTING: recommend
make install-dev, pre-commit run twice,make testand 100% diff coverage for new code
transfercommand (replaced bypull; usepulp-tool pullwith--transfer-destinstead of--config)- Documentation GitHub workflow (
.github/workflows/docs.yml) - Makefile targets:
docs,docs-clean,docs-serve
- Fixed type annotation issues in transfer.py
- Fixed import order issues in cli.py
- Fixed Optional import missing in content_query.py