Fix CyclingDependenciesError for target_content_resolver by routing vendor mappings through a dedicated VendorReposMapping model

The package version 0.24.0-2.elevate.4
This commit is contained in:
Yuriy Kohut 2026-06-30 21:37:52 +03:00
parent 7c938c7398
commit faca763e8b
2 changed files with 53 additions and 26 deletions

View File

@ -10081,10 +10081,10 @@ index d36900bd..85a3ff3d 100644
+ assert fact.enforcing_via_any_cmdline is expected
diff --git a/repos/system_upgrade/common/actors/targetcontentresolver/actor.py b/repos/system_upgrade/common/actors/targetcontentresolver/actor.py
new file mode 100644
index 00000000..48557817
index 00000000..ade95104
--- /dev/null
+++ b/repos/system_upgrade/common/actors/targetcontentresolver/actor.py
@@ -0,0 +1,70 @@
@@ -0,0 +1,71 @@
+from leapp.actors import Actor
+from leapp.libraries.actor.targetcontentresolver import process
+from leapp.models import (
@ -10105,7 +10105,8 @@ index 00000000..48557817
+ SkippedRepositories,
+ TargetRepositories,
+ UsedRepositories,
+ VendorCustomTargetRepositoryList
+ VendorCustomTargetRepositoryList,
+ VendorReposMapping
+)
+from leapp.reporting import Report
+from leapp.tags import FactsPhaseTag, IPUWorkflowTag
@ -10136,11 +10137,11 @@ index 00000000..48557817
+ RHUIInfo,
+ RepositoriesBlacklisted,
+ RepositoriesFacts,
+ RepositoriesMapping,
+ RepositoriesSetupTasks,
+ RpmTransactionTasks,
+ UsedRepositories,
+ VendorCustomTargetRepositoryList,
+ VendorReposMapping,
+ )
+ produces = (
+ ConsumedDataAsset,
@ -11008,10 +11009,10 @@ index 00000000..c77a1f13
+
+ return full_blocklist
diff --git a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py b/repos/system_upgrade/common/actors/targetcontentresolver/libraries/setuptargetrepos.py
similarity index 58%
similarity index 57%
rename from repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py
rename to repos/system_upgrade/common/actors/targetcontentresolver/libraries/setuptargetrepos.py
index df17a217..9db07c3b 100644
index df17a217..acd7b0bc 100644
--- a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py
+++ b/repos/system_upgrade/common/actors/targetcontentresolver/libraries/setuptargetrepos.py
@@ -1,4 +1,4 @@
@ -11030,12 +11031,12 @@ index df17a217..9db07c3b 100644
- RepositoriesSetupTasks,
RHELTargetRepository,
- RHUIInfo,
+ RepositoriesMapping,
SkippedRepositories,
TargetRepositories,
- UsedRepositories
+ UsedRepositories,
+ VendorCustomTargetRepositoryList
+ VendorCustomTargetRepositoryList,
+ VendorReposMapping
)
from leapp.utils.deprecation import suppress_deprecation
@ -11142,7 +11143,7 @@ index df17a217..9db07c3b 100644
- # Setup repomap handler
- repo_mappig_msg = next(api.consume(RepositoriesMapping), RepositoriesMapping())
+ # Remember that we can't just grab one message, each vendor can have its own mapping.
+ repo_mapping_list = list(api.consume(RepositoriesMapping))
+ repo_mapping_list = list(api.consume(VendorReposMapping))
- rhui_info = next(api.consume(RHUIInfo), None)
- cloud_provider = rhui_info.provider if rhui_info else ''
@ -11238,10 +11239,10 @@ index df17a217..9db07c3b 100644
pkgs = set()
diff --git a/repos/system_upgrade/common/actors/targetcontentresolver/libraries/targetcontentresolver.py b/repos/system_upgrade/common/actors/targetcontentresolver/libraries/targetcontentresolver.py
new file mode 100644
index 00000000..77d500a9
index 00000000..b5346350
--- /dev/null
+++ b/repos/system_upgrade/common/actors/targetcontentresolver/libraries/targetcontentresolver.py
@@ -0,0 +1,195 @@
@@ -0,0 +1,197 @@
+from collections import namedtuple
+
+from leapp.exceptions import StopActorExecutionError
@ -11257,9 +11258,9 @@ index 00000000..77d500a9
+ Module,
+ RepositoriesBlacklisted,
+ RepositoriesFacts,
+ RepositoriesMapping,
+ RepositoriesSetupTasks,
+ RHUIInfo
+ RHUIInfo,
+ VendorReposMapping
+)
+from leapp.utils.deprecation import suppress_deprecation
+
@ -11364,9 +11365,11 @@ index 00000000..77d500a9
+ repomap_msg = load_repositories_mapping()
+
+ # ELevate: vendors can provide their own repository mappings (produced by
+ # the vendorrepositoriesmapping actor). Combine them with the main mapping
+ # so that the handler operates on vendor-aware mapping data.
+ vendor_map_msgs = list(api.consume(RepositoriesMapping))
+ # the vendorrepositoriesmapping actor as VendorReposMapping — a separate
+ # type, so this actor can consume them without a produce/consume cycle on
+ # RepositoriesMapping). Combine them with the main mapping so that the
+ # handler operates on vendor-aware mapping data.
+ vendor_map_msgs = list(api.consume(VendorReposMapping))
+ if vendor_map_msgs:
+ repomap_msg = combine_repomap_messages([repomap_msg] + vendor_map_msgs)
+
@ -13015,14 +13018,14 @@ index 00000000..dbf86974
+ )
diff --git a/repos/system_upgrade/common/actors/vendorrepositoriesmapping/actor.py b/repos/system_upgrade/common/actors/vendorrepositoriesmapping/actor.py
new file mode 100644
index 00000000..13256476
index 00000000..a86fa12e
--- /dev/null
+++ b/repos/system_upgrade/common/actors/vendorrepositoriesmapping/actor.py
@@ -0,0 +1,19 @@
+from leapp.actors import Actor
+# from leapp.libraries.common.repomaputils import scan_vendor_repomaps, VENDOR_REPOMAP_DIR
+from leapp.libraries.actor.vendorrepositoriesmapping import scan_vendor_repomaps
+from leapp.models import VendorSourceRepos, RepositoriesMapping
+from leapp.models import VendorSourceRepos, VendorReposMapping
+from leapp.tags import FactsPhaseTag, IPUWorkflowTag
+
+
@ -13033,14 +13036,14 @@ index 00000000..13256476
+
+ name = "vendor_repositories_mapping"
+ consumes = ()
+ produces = (RepositoriesMapping, VendorSourceRepos,)
+ produces = (VendorReposMapping, VendorSourceRepos,)
+ tags = (IPUWorkflowTag, FactsPhaseTag.Before)
+
+ def process(self):
+ scan_vendor_repomaps()
diff --git a/repos/system_upgrade/common/actors/vendorrepositoriesmapping/libraries/vendorrepositoriesmapping.py b/repos/system_upgrade/common/actors/vendorrepositoriesmapping/libraries/vendorrepositoriesmapping.py
new file mode 100644
index 00000000..6a41d4e5
index 00000000..a368e1a7
--- /dev/null
+++ b/repos/system_upgrade/common/actors/vendorrepositoriesmapping/libraries/vendorrepositoriesmapping.py
@@ -0,0 +1,92 @@
@ -13051,7 +13054,7 @@ index 00000000..6a41d4e5
+from leapp.libraries.common.config.version import get_target_major_version, get_source_major_version
+from leapp.libraries.common.repomaputils import RepoMapData
+from leapp.libraries.stdlib import api
+from leapp.models import VendorSourceRepos, RepositoriesMapping
+from leapp.models import VendorSourceRepos, VendorReposMapping
+from leapp.models.fields import ModelViolationError
+from leapp.exceptions import StopActorExecutionError
+
@ -13093,7 +13096,7 @@ index 00000000..6a41d4e5
+ mapping = repomap_data.get_mappings(source_major, target_major)
+ valid_major_versions = [source_major, target_major]
+
+ api.produce(RepositoriesMapping(
+ api.produce(VendorReposMapping(
+ mapping=mapping,
+ repositories=repomap_data.get_repositories(valid_major_versions),
+ vendor=vendor_name
@ -13116,7 +13119,7 @@ index 00000000..6a41d4e5
+
+def scan_vendor_repomaps(read_repofile_func=read_repofile):
+ """
+ Scan the repository mapping file and produce RepositoriesMapping msg.
+ Scan the repository mapping file and produce VendorReposMapping msg.
+
+ See the description of the actor for more details.
+ """
@ -17797,14 +17800,35 @@ index 00000000..95fbd2dc
+ """
+ topic = SystemFactsTopic
diff --git a/repos/system_upgrade/common/models/repositoriesmap.py b/repos/system_upgrade/common/models/repositoriesmap.py
index 842cd807..fc740606 100644
index 842cd807..17bd6bc9 100644
--- a/repos/system_upgrade/common/models/repositoriesmap.py
+++ b/repos/system_upgrade/common/models/repositoriesmap.py
@@ -96,3 +96,4 @@ class RepositoriesMapping(Model):
@@ -96,3 +96,25 @@ class RepositoriesMapping(Model):
mapping = fields.List(fields.Model(RepoMapEntry), default=[])
repositories = fields.List(fields.Model(PESIDRepositoryEntry), default=[])
+ vendor = fields.Nullable(fields.String())
+
+
+class VendorReposMapping(Model):
+ """
+ Repository mapping contributed by a vendor (ELevate).
+
+ Same shape as RepositoriesMapping, but a distinct message type. The
+ target_content_resolver actor *produces* the main RepositoriesMapping and
+ therefore must not also *consume* it (that is a dependency cycle); vendor
+ mappings are produced by the vendorrepositoriesmapping actor under this
+ separate type and consumed by target_content_resolver, then combined with
+ the main mapping via combine_repomap_messages.
+
+ Warning: This model is not covered by the deprecation process and can be
+ changed or removed any time.
+ """
+ topic = TransactionTopic
+
+ mapping = fields.List(fields.Model(RepoMapEntry), default=[])
+ repositories = fields.List(fields.Model(PESIDRepositoryEntry), default=[])
+ vendor = fields.Nullable(fields.String())
diff --git a/repos/system_upgrade/common/models/repositoriessetuptasks.py b/repos/system_upgrade/common/models/repositoriessetuptasks.py
index fb267ad0..88056d97 100644
--- a/repos/system_upgrade/common/models/repositoriessetuptasks.py

View File

@ -53,7 +53,7 @@ py2_byte_compile "%1" "%2"}
Epoch: 1
Name: leapp-repository
Version: 0.24.0
Release: 2%{?dist}.elevate.3
Release: 2%{?dist}.elevate.4
Summary: Repositories for leapp
License: ASL 2.0
@ -438,6 +438,9 @@ fi
%changelog
* Tue Jun 30 2026 Yuriy Kohut <ykohut@almalinux.org> - 0.24.0-2.elevate.4
- Fix CyclingDependenciesError for target_content_resolver by routing vendor mappings through a dedicated VendorReposMapping model
* Tue Jun 30 2026 Yuriy Kohut <ykohut@almalinux.org> - 0.24.0-2.elevate.3
- ELevate vendors support for upstream 0.24.0-2 version (f7ccf5aefdd87856c4dda80c2c410d5cb34d0c1d)