summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2023-03-06 10:07:32 +0000
committerGerrit Code Review <review@openstack.org>2023-03-06 10:07:32 +0000
commitfb6ab87d27b021d923a838627d98583ea47e2242 (patch)
tree7aa93b048534eeb7aadaccf0bf18874f37f7ddc3
parente2692e70ff82c6014dad99db64027e7bd89937ae (diff)
parentd74d40be5302d710410cc9fd8fdaaad352f3ebe6 (diff)
downloadzuul-fb6ab87d27b021d923a838627d98583ea47e2242.tar.gz
Merge "extra-config-files/dirs in items of a bundle should be loaded"
-rw-r--r--tests/fixtures/config/in-repo-dir/git/org_project/zuul.d/project.yaml5
-rw-r--r--tests/fixtures/config/in-repo-dir/git/org_project2/.zuul.yaml5
-rw-r--r--tests/fixtures/config/in-repo-dir/git/org_project3/.extra-3.yaml2
-rw-r--r--tests/fixtures/config/in-repo-dir/git/org_project3/.zuul.yaml11
-rw-r--r--tests/fixtures/config/in-repo-dir/git/org_project3/README1
-rw-r--r--tests/fixtures/config/in-repo-dir/git/org_project3/extra-3.d/jobs-private.yaml2
-rw-r--r--tests/fixtures/config/in-repo-dir/main.yaml4
-rw-r--r--tests/unit/test_v3.py36
-rw-r--r--zuul/manager/__init__.py25
9 files changed, 83 insertions, 8 deletions
diff --git a/tests/fixtures/config/in-repo-dir/git/org_project/zuul.d/project.yaml b/tests/fixtures/config/in-repo-dir/git/org_project/zuul.d/project.yaml
index 8d241f17e..201338c5c 100644
--- a/tests/fixtures/config/in-repo-dir/git/org_project/zuul.d/project.yaml
+++ b/tests/fixtures/config/in-repo-dir/git/org_project/zuul.d/project.yaml
@@ -1,8 +1,13 @@
- job:
name: project-test1
+- queue:
+ name: project-test-queue
+ allow-circular-dependencies: true
+
- project:
name: org/project
+ queue: project-test-queue
check:
jobs:
- project-test1
diff --git a/tests/fixtures/config/in-repo-dir/git/org_project2/.zuul.yaml b/tests/fixtures/config/in-repo-dir/git/org_project2/.zuul.yaml
index b86588e42..0c3d89309 100644
--- a/tests/fixtures/config/in-repo-dir/git/org_project2/.zuul.yaml
+++ b/tests/fixtures/config/in-repo-dir/git/org_project2/.zuul.yaml
@@ -1,5 +1,10 @@
+- queue:
+ name: project2-test-queue
+ allow-circular-dependencies: true
+
- project:
name: org/project2
+ queue: project2-test-queue
check:
jobs:
- project2-private-extra-file
diff --git a/tests/fixtures/config/in-repo-dir/git/org_project3/.extra-3.yaml b/tests/fixtures/config/in-repo-dir/git/org_project3/.extra-3.yaml
new file mode 100644
index 000000000..d0098aca7
--- /dev/null
+++ b/tests/fixtures/config/in-repo-dir/git/org_project3/.extra-3.yaml
@@ -0,0 +1,2 @@
+- job:
+ name: project3-private-extra-file
diff --git a/tests/fixtures/config/in-repo-dir/git/org_project3/.zuul.yaml b/tests/fixtures/config/in-repo-dir/git/org_project3/.zuul.yaml
new file mode 100644
index 000000000..4d760354f
--- /dev/null
+++ b/tests/fixtures/config/in-repo-dir/git/org_project3/.zuul.yaml
@@ -0,0 +1,11 @@
+- queue:
+ name: project3-test-queue
+ allow-circular-dependencies: true
+
+- project:
+ name: org/project3
+ queue: project3-test-queue
+ check:
+ jobs:
+ - project3-private-extra-file
+ - project3-private-extra-dir
diff --git a/tests/fixtures/config/in-repo-dir/git/org_project3/README b/tests/fixtures/config/in-repo-dir/git/org_project3/README
new file mode 100644
index 000000000..9daeafb98
--- /dev/null
+++ b/tests/fixtures/config/in-repo-dir/git/org_project3/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/in-repo-dir/git/org_project3/extra-3.d/jobs-private.yaml b/tests/fixtures/config/in-repo-dir/git/org_project3/extra-3.d/jobs-private.yaml
new file mode 100644
index 000000000..d62ad658f
--- /dev/null
+++ b/tests/fixtures/config/in-repo-dir/git/org_project3/extra-3.d/jobs-private.yaml
@@ -0,0 +1,2 @@
+- job:
+ name: project3-private-extra-dir
diff --git a/tests/fixtures/config/in-repo-dir/main.yaml b/tests/fixtures/config/in-repo-dir/main.yaml
index bf1679769..f4ea575d3 100644
--- a/tests/fixtures/config/in-repo-dir/main.yaml
+++ b/tests/fixtures/config/in-repo-dir/main.yaml
@@ -12,6 +12,10 @@
extra-config-paths:
- .extra.yaml
- extra.d/
+ - org/project3:
+ extra-config-paths:
+ - .extra-3.yaml
+ - extra-3.d/
- tenant:
name: tenant-two
diff --git a/tests/unit/test_v3.py b/tests/unit/test_v3.py
index 004ede862..22d9518a9 100644
--- a/tests/unit/test_v3.py
+++ b/tests/unit/test_v3.py
@@ -3367,6 +3367,42 @@ class TestExtraConfigInDependent(ZuulTestCase):
changes='2,1 1,1'),
], ordered=False)
+ def test_extra_config_in_bundle_change(self):
+ # Test that jobs defined in a extra-config-paths in a repo should be
+ # loaded in a bundle with changes from different repos.
+
+ # Add an empty zuul.yaml here so we are triggering dynamic layout load
+ A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A',
+ files={'zuul.yaml': ''})
+ B = self.fake_gerrit.addFakeChange('org/project2', 'master', 'B',
+ files={'zuul.yaml': ''})
+ C = self.fake_gerrit.addFakeChange('org/project3', 'master', 'C',
+ files={'zuul.yaml': ''})
+ # A B form a bundle, and A depends on C
+ A.data['commitMessage'] = '%s\n\nDepends-On: %s\nDepends-On: %s\n' % (
+ A.subject, B.data['url'], C.data['url'])
+ B.data['commitMessage'] = '%s\n\nDepends-On: %s\n' % (
+ B.subject, A.data['url'])
+
+ self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
+ self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1))
+ self.fake_gerrit.addEvent(C.getPatchsetCreatedEvent(1))
+ self.waitUntilSettled()
+
+ # Jobs in both changes should be success
+ self.assertHistory([
+ dict(name='project2-private-extra-file', result='SUCCESS',
+ changes='3,1 1,1 2,1'),
+ dict(name='project2-private-extra-dir', result='SUCCESS',
+ changes='3,1 1,1 2,1'),
+ dict(name='project-test1', result='SUCCESS',
+ changes='3,1 2,1 1,1'),
+ dict(name='project3-private-extra-file', result='SUCCESS',
+ changes='3,1'),
+ dict(name='project3-private-extra-dir', result='SUCCESS',
+ changes='3,1'),
+ ], ordered=False)
+
class TestGlobalRepoState(AnsibleZuulTestCase):
config_file = 'zuul-connections-gerrit-and-github.conf'
diff --git a/zuul/manager/__init__.py b/zuul/manager/__init__.py
index e87e553d3..0eaf844ad 100644
--- a/zuul/manager/__init__.py
+++ b/zuul/manager/__init__.py
@@ -1460,16 +1460,25 @@ class PipelineManager(metaclass=ABCMeta):
item.bundle and
item.bundle.updatesConfig(tenant) and tpc is not None
):
- extra_config_files = set(tpc.extra_config_files)
- extra_config_dirs = set(tpc.extra_config_dirs)
+ # Here we can not use build_set.merger_items because it does
+ # not contain the project canonical_name
+ merger_items = {item}
+ merger_items.update(item.items_ahead)
+ if item.bundle:
+ merger_items.update(item.bundle.items)
+
# Merge extra_config_files and extra_config_dirs of the
# dependent change
- for item_ahead in item.items_ahead:
- tpc_ahead = tenant.project_configs.get(
- item_ahead.change.project.canonical_name)
- if tpc_ahead:
- extra_config_files.update(tpc_ahead.extra_config_files)
- extra_config_dirs.update(tpc_ahead.extra_config_dirs)
+ extra_config_files = set()
+ extra_config_dirs = set()
+ for merger_item in merger_items:
+ merger_item_tpc = tenant.project_configs.get(
+ merger_item.change.project.canonical_name)
+ if merger_item_tpc:
+ extra_config_files.update(
+ merger_item_tpc.extra_config_files)
+ extra_config_dirs.update(
+ merger_item_tpc.extra_config_dirs)
ready = self.scheduleMerge(
item,