pulp-container 2.29.2__tar.gz → 2.30.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pulp_container-2.29.2 → pulp_container-2.30.0}/CHANGES.md +98 -2
- {pulp_container-2.29.2 → pulp_container-2.30.0}/PKG-INFO +1 -1
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/__init__.py +1 -1
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/registry_api.py +30 -6
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/viewsets.py +12 -12
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container.egg-info/PKG-INFO +1 -1
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pyproject.toml +2 -2
- {pulp_container-2.29.2 → pulp_container-2.30.0}/COMMITMENT +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/COPYRIGHT +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/LICENSE +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/MANIFEST.in +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/README.rst +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/functest_requirements.txt +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/__init__.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/access_policy.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/authorization.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/cache.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/checks.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/content.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/downloaders.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/dynaconf_hooks.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/exceptions.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/fields.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/global_access_conditions.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/json_schemas.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/management/__init__.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/management/commands/__init__.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/management/commands/container-handle-image-data.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/management/commands/container-repair-media-type.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/management/commands/container-repair-pull-through-distributions.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0001_initial.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0001_squashed_0032_upload_artifact.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0002_containerrepository.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0003_oci_mediatype.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0004_upload.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0005_contentredirectcontentguard.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0006_containerpushrepository.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0007_clear_tags_artifacts_refs.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0008_include_exclude_tags.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0009_container_namespace.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0010_remove_uploadchunk.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0011_add_container_repository_permissions.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0012_add_container_namespace_permissions.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0013_add_pull_push_permissions.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0014_containerdistribution_private.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0015_manage_tags_push_repo.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0016_add_delete_versions_permission.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0017_add_granular_perms.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0018_containerdistribution_description.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0019_DATA_distribution_model_swap.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0020_update_push_repo_perms.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0021_data_move_redirect_content_guard_to_core.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0022_delete_contentredirectcontentguard.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0023_manifestsignature.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0024_containerremote_sigstore.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0025_signature_stored_in_textfield.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0026_manifest_signing_service.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0027_data_translate_perms_to_roles.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0028_add_role_manage_permissions.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0029_remove_blob_media_type.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0030_enforce_tagged_manifest_reference.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0031_replace_charf_with_textf.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0032_upload_artifact.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0033_raise_warning_for_repair.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0034_translate_signed_schema.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0035_alter_blob_content_ptr_and_more.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0036_containerpushrepository_pending_blobs_manifests.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0037_create_pull_through_cache_models.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0038_add_manifest_metadata_fields.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0039_manifest_data.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0040_add_remote_repo_filter.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0041_add_pull_through_pull_permissions.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0042_add_manifest_nature_field.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0043_add_os_arch_image_size_manifest_fields.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0044_add_domain.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0045_alter_manifest_compressed_image_size.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0046_alter_manifest_listed_manifests.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0047_containernamespace_pulp_labels.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0048_containerremote_includes_excludes.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0049_manifestsignature_fingerprint.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0050_alter_containernamespace_options.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/__init__.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/modelresource.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/models.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/pull_through.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/redirects.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/registry.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/replica.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/serializers.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/settings.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/__init__.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/builder.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/download_image_data.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/migrate_push_repository.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/recursive_add.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/recursive_remove.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/sign.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/sync_stages.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/synchronize.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/tag.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/untag.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/token_verification.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/urls.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/utils.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/webserver_snippets/__init__.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/webserver_snippets/apache.conf +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/webserver_snippets/nginx.conf +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/constants.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/__init__.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/__init__.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/__init__.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_build_images.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_cancel_blob_upload.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_content_cache.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_crud_distributions.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_crud_remotes.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_delete_blob.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_delete_manifest.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_domains.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_flatpak.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_migrate_push_repository.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_pull_content.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_pull_through_cache.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_pulpimportexport.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_push_content.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_push_signatures.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_rbac_push_repositories.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_rbac_remotes.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_rbac_repo_content.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_rbac_repo_versions.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_rbac_sync_repositories.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_recursive_add.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_recursive_remove.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_remote_filter_pull_through.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_repositories_list.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_sign_manifests.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_sync.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_sync_signatures.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_tagging_images.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_token_authentication.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/conftest.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/constants.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/utils.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/unit/__init__.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/unit/fixtures/ryuk_0.13.0_manifest_list.json +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/unit/test_json_schemas.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/unit/test_models.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/unit/test_pull_through_repair.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/unit/test_serializers.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/unit/test_sync_stages.py +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container.egg-info/SOURCES.txt +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container.egg-info/dependency_links.txt +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container.egg-info/entry_points.txt +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container.egg-info/requires.txt +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container.egg-info/top_level.txt +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/setup.cfg +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/test_requirements.txt +0 -0
- {pulp_container-2.29.2 → pulp_container-2.30.0}/unittest_requirements.txt +0 -0
|
@@ -8,10 +8,16 @@
|
|
|
8
8
|
|
|
9
9
|
[//]: # (towncrier release notes start)
|
|
10
10
|
|
|
11
|
-
## 2.
|
|
11
|
+
## 2.30.0 (2026-10-08) {: #2.30.0 }
|
|
12
12
|
|
|
13
|
-
####
|
|
13
|
+
#### Features {: #2.30.0-feature }
|
|
14
14
|
|
|
15
|
+
- Pull-through manifest resolution now uses HEAD checks, reducing Docker Hub 429s for repeated tag resolutions.
|
|
16
|
+
|
|
17
|
+
#### Bugfixes {: #2.30.0-bugfix }
|
|
18
|
+
|
|
19
|
+
- Prevent container distributions from overlapping other distribution base paths. Pull-through distributions **NEED** to be fixed before upgrading pulpcore; run `pulpcore-manager container-repair-pull-through-distributions` to repair existing distributions.
|
|
20
|
+
[#2494](https://github.com/pulp/pulp_container/issues/2494)
|
|
15
21
|
- Fixed global auth token leakage. CVE-2026-103868
|
|
16
22
|
|
|
17
23
|
---
|
|
@@ -115,6 +121,21 @@
|
|
|
115
121
|
|
|
116
122
|
---
|
|
117
123
|
|
|
124
|
+
## 2.27.13 (2026-10-07) {: #2.27.13 }
|
|
125
|
+
|
|
126
|
+
No significant changes.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 2.27.12 (2026-09-23) {: #2.27.12 }
|
|
131
|
+
|
|
132
|
+
#### Bugfixes {: #2.27.12-bugfix }
|
|
133
|
+
|
|
134
|
+
- Prevent container distributions from overlapping other distribution base paths. Pull-through distributions **NEED** to be fixed before upgrading pulpcore; run `pulpcore-manager container-repair-pull-through-distributions` to repair existing distributions.
|
|
135
|
+
[#2494](https://github.com/pulp/pulp_container/issues/2494)
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
118
139
|
## 2.27.11 (2026-07-29) {: #2.27.11 }
|
|
119
140
|
|
|
120
141
|
No significant changes.
|
|
@@ -235,6 +256,21 @@ No significant changes.
|
|
|
235
256
|
#### Misc {: #2.27.0-misc }
|
|
236
257
|
|
|
237
258
|
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 2.26.18 (2026-10-07) {: #2.26.18 }
|
|
262
|
+
|
|
263
|
+
No significant changes.
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## 2.26.17 (2026-09-23) {: #2.26.17 }
|
|
268
|
+
|
|
269
|
+
#### Bugfixes {: #2.26.17-bugfix }
|
|
270
|
+
|
|
271
|
+
- Prevent container distributions from overlapping other distribution base paths. Pull-through distributions **NEED** to be fixed before upgrading pulpcore; run `pulpcore-manager container-repair-pull-through-distributions` to repair existing distributions.
|
|
272
|
+
[#2494](https://github.com/pulp/pulp_container/issues/2494)
|
|
273
|
+
|
|
238
274
|
---
|
|
239
275
|
|
|
240
276
|
## 2.26.16 (2026-06-08) {: #2.26.16 }
|
|
@@ -443,6 +479,21 @@ No significant changes.
|
|
|
443
479
|
|
|
444
480
|
---
|
|
445
481
|
|
|
482
|
+
## 2.24.14 (2026-10-07) {: #2.24.14 }
|
|
483
|
+
|
|
484
|
+
No significant changes.
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
## 2.24.13 (2026-09-23) {: #2.24.13 }
|
|
489
|
+
|
|
490
|
+
#### Bugfixes {: #2.24.13-bugfix }
|
|
491
|
+
|
|
492
|
+
- Prevent container distributions from overlapping other distribution base paths. Pull-through distributions **NEED** to be fixed before upgrading pulpcore; run `pulpcore-manager container-repair-pull-through-distributions` to repair existing distributions.
|
|
493
|
+
[#2494](https://github.com/pulp/pulp_container/issues/2494)
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
446
497
|
## 2.24.12 (2026-07-21) {: #2.24.12 }
|
|
447
498
|
|
|
448
499
|
#### Bugfixes {: #2.24.12-bugfix }
|
|
@@ -581,6 +632,21 @@ No significant changes.
|
|
|
581
632
|
|
|
582
633
|
---
|
|
583
634
|
|
|
635
|
+
## 2.22.12 (2026-10-07) {: #2.22.12 }
|
|
636
|
+
|
|
637
|
+
No significant changes.
|
|
638
|
+
|
|
639
|
+
---
|
|
640
|
+
|
|
641
|
+
## 2.22.11 (2026-09-23) {: #2.22.11 }
|
|
642
|
+
|
|
643
|
+
#### Bugfixes {: #2.22.11-bugfix }
|
|
644
|
+
|
|
645
|
+
- Prevent container distributions from overlapping other distribution base paths. Pull-through distributions **NEED** to be fixed before upgrading pulpcore; run `pulpcore-manager container-repair-pull-through-distributions` to repair existing distributions.
|
|
646
|
+
[#2494](https://github.com/pulp/pulp_container/issues/2494)
|
|
647
|
+
|
|
648
|
+
---
|
|
649
|
+
|
|
584
650
|
## 2.22.10 (2026-07-23) {: #2.22.10 }
|
|
585
651
|
|
|
586
652
|
#### Bugfixes {: #2.22.10-bugfix }
|
|
@@ -774,6 +840,21 @@ No significant changes.
|
|
|
774
840
|
|
|
775
841
|
---
|
|
776
842
|
|
|
843
|
+
## 2.20.13 (2026-10-07) {: #2.20.13 }
|
|
844
|
+
|
|
845
|
+
No significant changes.
|
|
846
|
+
|
|
847
|
+
---
|
|
848
|
+
|
|
849
|
+
## 2.20.12 (2026-09-23) {: #2.20.12 }
|
|
850
|
+
|
|
851
|
+
#### Bugfixes {: #2.20.12-bugfix }
|
|
852
|
+
|
|
853
|
+
- Prevent container distributions from overlapping other distribution base paths. Pull-through distributions **NEED** to be fixed before upgrading pulpcore; run `pulpcore-manager container-repair-pull-through-distributions` to repair existing distributions.
|
|
854
|
+
[#2494](https://github.com/pulp/pulp_container/issues/2494)
|
|
855
|
+
|
|
856
|
+
---
|
|
857
|
+
|
|
777
858
|
## 2.20.11 (2026-07-27) {: #2.20.11 }
|
|
778
859
|
|
|
779
860
|
#### Bugfixes {: #2.20.11-bugfix }
|
|
@@ -915,6 +996,21 @@ No significant changes.
|
|
|
915
996
|
|
|
916
997
|
---
|
|
917
998
|
|
|
999
|
+
## 2.19.15 (2026-10-07) {: #2.19.15 }
|
|
1000
|
+
|
|
1001
|
+
No significant changes.
|
|
1002
|
+
|
|
1003
|
+
---
|
|
1004
|
+
|
|
1005
|
+
## 2.19.14 (2026-09-23) {: #2.19.14 }
|
|
1006
|
+
|
|
1007
|
+
#### Bugfixes {: #2.19.14-bugfix }
|
|
1008
|
+
|
|
1009
|
+
- Prevent container distributions from overlapping other distribution base paths. Pull-through distributions **NEED** to be fixed before upgrading pulpcore; run `pulpcore-manager container-repair-pull-through-distributions` to repair existing distributions.
|
|
1010
|
+
[#2494](https://github.com/pulp/pulp_container/issues/2494)
|
|
1011
|
+
|
|
1012
|
+
---
|
|
1013
|
+
|
|
918
1014
|
## 2.19.13 (2026-07-27) {: #2.19.13 }
|
|
919
1015
|
|
|
920
1016
|
#### Bugfixes {: #2.19.13-bugfix }
|
|
@@ -1477,14 +1477,43 @@ class Manifests(RedirectsMixin, ContainerRegistryApiMixin, ViewSet):
|
|
|
1477
1477
|
Fetch a manifest from the upstream remote.
|
|
1478
1478
|
Returns the local manifest, if it exists in Pulp, and the full response from upstream.
|
|
1479
1479
|
Raises response errors if manifest is not found or the download fails.
|
|
1480
|
+
|
|
1481
|
+
A HEAD request is issued first to check the manifest's digest against what is already
|
|
1482
|
+
stored in Pulp. Per Docker Hub's pull-rate accounting, a HEAD ("version check") does not
|
|
1483
|
+
count as a pull, unlike a GET. If the manifest is already stored locally, the HEAD
|
|
1484
|
+
response is returned as-is and the counted GET is skipped entirely.
|
|
1480
1485
|
"""
|
|
1481
1486
|
relative_url = "/v2/{name}/manifests/{pk}".format(
|
|
1482
1487
|
name=remote.namespaced_upstream_name, pk=pk
|
|
1483
1488
|
)
|
|
1484
1489
|
tag_url = urljoin(remote.url, relative_url)
|
|
1490
|
+
|
|
1491
|
+
head_response = self._fetch_manifest_response(remote, tag_url, pk, http_method="head")
|
|
1492
|
+
digest = head_response.headers.get("docker-content-digest")
|
|
1493
|
+
if digest:
|
|
1494
|
+
manifest = models.Manifest.objects.filter(
|
|
1495
|
+
digest=digest, pulp_domain=get_domain()
|
|
1496
|
+
).first()
|
|
1497
|
+
if manifest is not None:
|
|
1498
|
+
return manifest, head_response
|
|
1499
|
+
|
|
1500
|
+
# The manifest is not stored locally yet, or the upstream did not report a digest on the
|
|
1501
|
+
# HEAD response; fall back to a full GET, identical to the previous behavior.
|
|
1502
|
+
response = self._fetch_manifest_response(remote, tag_url, pk, http_method="get")
|
|
1503
|
+
digest = response.headers.get("docker-content-digest")
|
|
1504
|
+
return models.Manifest.objects.filter(
|
|
1505
|
+
digest=digest, pulp_domain=get_domain()
|
|
1506
|
+
).first(), response
|
|
1507
|
+
|
|
1508
|
+
def _fetch_manifest_response(self, remote, tag_url, pk, http_method):
|
|
1509
|
+
"""
|
|
1510
|
+
Issue a HEAD or GET request for a manifest and map response errors consistently.
|
|
1511
|
+
"""
|
|
1485
1512
|
downloader = remote.get_downloader(url=tag_url)
|
|
1486
1513
|
try:
|
|
1487
|
-
|
|
1514
|
+
return downloader.fetch(
|
|
1515
|
+
extra_data={"headers": V2_ACCEPT_HEADERS, "http_method": http_method}
|
|
1516
|
+
)
|
|
1488
1517
|
except ClientResponseError as response_error:
|
|
1489
1518
|
if response_error.status == 429:
|
|
1490
1519
|
# the client could request the manifest outside the docker hub pull limit;
|
|
@@ -1497,11 +1526,6 @@ class Manifests(RedirectsMixin, ContainerRegistryApiMixin, ViewSet):
|
|
|
1497
1526
|
except (ClientConnectionError, TimeoutException):
|
|
1498
1527
|
# The remote server is not available at the moment
|
|
1499
1528
|
raise GatewayTimeout()
|
|
1500
|
-
else:
|
|
1501
|
-
digest = response.headers.get("docker-content-digest")
|
|
1502
|
-
return models.Manifest.objects.filter(
|
|
1503
|
-
digest=digest, pulp_domain=get_domain()
|
|
1504
|
-
).first(), response
|
|
1505
1529
|
|
|
1506
1530
|
def put(self, request, path, pk=None):
|
|
1507
1531
|
"""
|
|
@@ -561,7 +561,7 @@ class TagOperationsMixin:
|
|
|
561
561
|
responses={202: AsyncOperationResponseSerializer},
|
|
562
562
|
)
|
|
563
563
|
@action(detail=True, methods=["post"], serializer_class=serializers.TagImageSerializer)
|
|
564
|
-
def tag(self, request, pk):
|
|
564
|
+
def tag(self, request, pk, **kwargs):
|
|
565
565
|
"""
|
|
566
566
|
Create a task which is responsible for creating a new tag.
|
|
567
567
|
"""
|
|
@@ -592,7 +592,7 @@ class TagOperationsMixin:
|
|
|
592
592
|
responses={202: AsyncOperationResponseSerializer},
|
|
593
593
|
)
|
|
594
594
|
@action(detail=True, methods=["post"], serializer_class=serializers.UnTagImageSerializer)
|
|
595
|
-
def untag(self, request, pk):
|
|
595
|
+
def untag(self, request, pk, **kwargs):
|
|
596
596
|
"""
|
|
597
597
|
Create a task which is responsible for untagging an image.
|
|
598
598
|
"""
|
|
@@ -622,7 +622,7 @@ class SignOperationsMixin:
|
|
|
622
622
|
responses={202: AsyncOperationResponseSerializer},
|
|
623
623
|
)
|
|
624
624
|
@action(detail=True, methods=["post"], serializer_class=serializers.RepositorySignSerializer)
|
|
625
|
-
def sign(self, request, pk):
|
|
625
|
+
def sign(self, request, pk, **kwargs):
|
|
626
626
|
"""
|
|
627
627
|
Signs manifests by tag in the repository.
|
|
628
628
|
"""
|
|
@@ -827,7 +827,7 @@ class ContainerRepositoryViewSet(
|
|
|
827
827
|
methods=["post"],
|
|
828
828
|
serializer_class=serializers.ContainerRepositorySyncURLSerializer,
|
|
829
829
|
)
|
|
830
|
-
def sync(self, request, pk):
|
|
830
|
+
def sync(self, request, pk, **kwargs):
|
|
831
831
|
"""
|
|
832
832
|
Synchronizes a repository. The ``repository`` field has to be provided.
|
|
833
833
|
"""
|
|
@@ -861,7 +861,7 @@ class ContainerRepositoryViewSet(
|
|
|
861
861
|
responses={202: AsyncOperationResponseSerializer},
|
|
862
862
|
)
|
|
863
863
|
@action(detail=True, methods=["post"], serializer_class=serializers.RecursiveManageSerializer)
|
|
864
|
-
def add(self, request, pk):
|
|
864
|
+
def add(self, request, pk, **kwargs):
|
|
865
865
|
"""
|
|
866
866
|
Queues a task that creates a new RepositoryVersion by adding content units.
|
|
867
867
|
"""
|
|
@@ -900,7 +900,7 @@ class ContainerRepositoryViewSet(
|
|
|
900
900
|
responses={202: AsyncOperationResponseSerializer},
|
|
901
901
|
)
|
|
902
902
|
@action(detail=True, methods=["post"], serializer_class=serializers.RecursiveManageSerializer)
|
|
903
|
-
def remove(self, request, pk):
|
|
903
|
+
def remove(self, request, pk, **kwargs):
|
|
904
904
|
"""
|
|
905
905
|
Queues a task that creates a new RepositoryVersion by removing content units.
|
|
906
906
|
"""
|
|
@@ -935,7 +935,7 @@ class ContainerRepositoryViewSet(
|
|
|
935
935
|
responses={202: AsyncOperationResponseSerializer},
|
|
936
936
|
)
|
|
937
937
|
@action(detail=True, methods=["post"], serializer_class=serializers.TagCopySerializer)
|
|
938
|
-
def copy_tags(self, request, pk):
|
|
938
|
+
def copy_tags(self, request, pk, **kwargs):
|
|
939
939
|
"""
|
|
940
940
|
Queues a task that creates a new RepositoryVersion by adding Tags.
|
|
941
941
|
"""
|
|
@@ -968,7 +968,7 @@ class ContainerRepositoryViewSet(
|
|
|
968
968
|
responses={202: AsyncOperationResponseSerializer},
|
|
969
969
|
)
|
|
970
970
|
@action(detail=True, methods=["post"], serializer_class=serializers.ManifestCopySerializer)
|
|
971
|
-
def copy_manifests(self, request, pk):
|
|
971
|
+
def copy_manifests(self, request, pk, **kwargs):
|
|
972
972
|
"""
|
|
973
973
|
Queues a task that creates a new RepositoryVersion by adding Manifests.
|
|
974
974
|
"""
|
|
@@ -1008,7 +1008,7 @@ class ContainerRepositoryViewSet(
|
|
|
1008
1008
|
responses={202: AsyncOperationResponseSerializer},
|
|
1009
1009
|
)
|
|
1010
1010
|
@action(detail=True, methods=["post"], serializer_class=serializers.OCIBuildImageSerializer)
|
|
1011
|
-
def build_image(self, request, pk):
|
|
1011
|
+
def build_image(self, request, pk, **kwargs):
|
|
1012
1012
|
"""
|
|
1013
1013
|
Create a task which is responsible for creating a new image and tag.
|
|
1014
1014
|
"""
|
|
@@ -1169,7 +1169,7 @@ class ContainerPushRepositoryViewSet(
|
|
|
1169
1169
|
@action(
|
|
1170
1170
|
detail=True, methods=["post"], serializer_class=serializers.MigratePushRepositorySerializer
|
|
1171
1171
|
)
|
|
1172
|
-
def migrate(self, request, pk):
|
|
1172
|
+
def migrate(self, request, pk, **kwargs):
|
|
1173
1173
|
"""
|
|
1174
1174
|
Create a task which converts a push repository into a container repository in place.
|
|
1175
1175
|
"""
|
|
@@ -1199,7 +1199,7 @@ class ContainerPushRepositoryViewSet(
|
|
|
1199
1199
|
responses={202: AsyncOperationResponseSerializer},
|
|
1200
1200
|
)
|
|
1201
1201
|
@action(detail=True, methods=["post"], serializer_class=serializers.RemoveImageSerializer)
|
|
1202
|
-
def remove_image(self, request, pk):
|
|
1202
|
+
def remove_image(self, request, pk, **kwargs):
|
|
1203
1203
|
"""
|
|
1204
1204
|
Create a task which deletes an image by the passed digest.
|
|
1205
1205
|
"""
|
|
@@ -1225,7 +1225,7 @@ class ContainerPushRepositoryViewSet(
|
|
|
1225
1225
|
return OperationPostponedResponse(result, request)
|
|
1226
1226
|
|
|
1227
1227
|
@action(detail=True, methods=["post"], serializer_class=serializers.RemoveSignaturesSerializer)
|
|
1228
|
-
def remove_signatures(self, request, pk):
|
|
1228
|
+
def remove_signatures(self, request, pk, **kwargs):
|
|
1229
1229
|
"""
|
|
1230
1230
|
Create a task which deletes signatures by the passed key_id.
|
|
1231
1231
|
"""
|
|
@@ -7,7 +7,7 @@ build-backend = 'setuptools.build_meta'
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "pulp-container"
|
|
10
|
-
version = "2.
|
|
10
|
+
version = "2.30.0"
|
|
11
11
|
description = "Container plugin for the Pulp Project"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
authors = [
|
|
@@ -89,7 +89,7 @@ ignore = [
|
|
|
89
89
|
[tool.bumpversion]
|
|
90
90
|
# This section is managed by the plugin template. Do not edit manually.
|
|
91
91
|
|
|
92
|
-
current_version = "2.
|
|
92
|
+
current_version = "2.30.0"
|
|
93
93
|
commit = false
|
|
94
94
|
tag = false
|
|
95
95
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<alpha>0a)?(?P<patch>\\d+)(\\.(?P<release>[a-z]+))?"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/global_access_conditions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/management/commands/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0001_initial.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0003_oci_mediatype.py
RENAMED
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0004_upload.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0039_manifest_data.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/migrations/0044_add_domain.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/download_image_data.py
RENAMED
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/migrate_push_repository.py
RENAMED
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/tasks/recursive_remove.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/webserver_snippets/__init__.py
RENAMED
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/webserver_snippets/apache.conf
RENAMED
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/app/webserver_snippets/nginx.conf
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_domains.py
RENAMED
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_flatpak.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/api/test_sync.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/functional/constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/unit/test_json_schemas.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/unit/test_serializers.py
RENAMED
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container/tests/unit/test_sync_stages.py
RENAMED
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.2 → pulp_container-2.30.0}/pulp_container.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|